Это копия, сохраненная 28 мая 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
Литература вторым постом
1. Ресурсы:
- http://stackoverflow.com/questions/tagged/c#
- http://www.tutorialspoint.com/csharp/
- http://professorweb.ru
- https://metanit.com/
- http://net-informations.com
- http://habrahabr.ru/hub/csharp/
2. Онлайн-компиляторы:
- https://dotnetfiddle.net/ - возможно лучший вариант. Встроено немного убогое, но все-таки автодополнение и проверка синтаксиса.
- http://ideone.com/
- http://csharppad.com/
- http://www.tutorialspoint.com/compile_csharp_online.php
- http://rextester.com/l/csharp_online_compiler
3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае WinForms, делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?
Неправда. C# довольно активно развивается, недавно вышла третья версия .NET Core фреймворка и восьмая версия языка. Весь дотнет понемногу становится опенсорсным, а ASP.NET становится независимым от платформы. В некотором смысле понемногу вымирают десктопные приложения с развитием веб-технологий, но в том же энтерпрайзе он еще очень даже востребован.
5. Какую ИДЕ выбрать?
Для Windows самым очевидным вариантом будет Visual Studio (https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Студия распространяется в двух редакциях: бесплатная коммьюнити-версия и платный энтерпрейс эдишн. В большинстве случае будет достаточно Community-версии: она поддерживает и C#, C++, VB.NET и F#, а так же имеет возможность установки дополнений
Для мака и никсов самый юзабельный вариант - MonoDevelop ( http://www.monodevelop.com/download/ ).
Для vim можно использовать OmniSharp ( https://github.com/OmniSharp/omnisharp-vim ).
Кросплатформенный полуредактор/полуIDE VS Code ( https://www.visualstudio.com/en-us/products/code-vs.aspx )
Также существуют плагины для Atom'а и Sublime Text, но функциональность там достаточно сильно урезана.
Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны первые EAP. IDE заявлена как кросплатформенная, со всем решарпер-функционалом, поддержкой отладки, моно и .net core.
SharpDevelop - еще одна IDE для C#, отличается малым размером (около 20мб) и опциональной портабельностью, при этом имея дизайнер WinForms и WPF, а также интеграцию с FxCop, StyleCop и прочими ништяками. Если хочется что-то по быстрому набросать, а выкачивать гигабйты нет желания, то возможно SharpDevelop будет лучшим вариантом.
6. С# для мобильной разработки
Если нужны инструменты для разработке под мобилы, смотри сюда - https://docs.microsoft.com/ru-ru/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?view=vs-2019.
Из актуальной литературы
- Xamarin Mobile Application Development
- Xamarin Essentials
7. Дополнительные инструменты для разработки на C#
LINQPad - сорт оф REPL, с возможностью быстрого подключения к БД и удобной визуализацией данных
dnSpy - декомпилятор, малоизвестный форк ILSpy, где реализована возможность модификации IL-кода прямо в EXE и DLL файлах, отладка IL-кода и много других фич для reverse engineering'а. Плюс няшные темы как в студии
dotPeek - бесплатный декомпилятор от JetBrains
scriptcs - для запуска C# кода как скриптов, возможность использовать как REPL
8. Расширения для студии
ReSharper - одно из известнейших. Рефакторинги, умный автокомплит, настраиваемый стиль кода. Платный, но можно стянуть с торрентов
Supercharger - показывает "карту" с классами, методами и всем остальным сбоку от кода с возможностью прыгать по ним
Indent Guides - показывает вертикальные линии на каждом уровне отступов.
Format document on Save - форматирует код каждый раз при сохранении документа
Code alignment - Выравнивает код по указанным символам. Удобно, например, при инициализации словарей или в перечислениях
Обзор Roslyn: https://github.com/dotnet/roslyn/wiki/Roslyn Overview
Новые возможности C# 8.0: https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-8
ПРИНИМАЮТСЯ ПРЕДЛОЖЕНИЯ ПО ШАПКЕ
Код этой шапки: https://pastebin.com/YJFQKsNm
Прошлый тред тонет здесь: https://2ch.hk/pr/res/1586030.html (М) ( >>1586030 (OP) )
Архивач: https://arhivach.ng/thread/530544/
Архивач в TOR'e (доступен через TorBrowser): http://arhivachovtj2jrp.onion/thread/530544/
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 7: With .NET and .NET Core (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Pro ASP.NET MVC 5 Platform (Adam Freeman)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 7: With .NET and .NET Core (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Pro ASP.NET MVC 5 Platform (Adam Freeman)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
Ну и чё за хуйню оно возвращает, при (string)domain_name, (string)IP_PORT, (string)domain_port?
Как же долго я ебался с гуглежом, чтобы найти вышеизложенное.
А есть нечто подобное но для валидации file_path, в том числе и пути относительного, скажем "..\..\data\bigData.json",
чтобы проверяло путь, и если туда можно сохранить файл - чтобы сохраняло его,
и опционально - чтобы проверяло ещё наличие файла там, если он должен быть по указанному пути?
1232x1124, 1:15
Аноны такой вопрос не знаю почему вулетает исключение при нажатии кнопки запуска, смотрел пошагово вроде всё правильно но класс Database наотрез не хочет создавать "score.json" может кто знает почему?
класс Database
https://pastebin.com/zNtQq84n
class LevelMenu : State
https://pastebin.com/guaqHWMg
Так он "fighters.json" не может найти, File.Exists() тупо возвращает false.
Попробуй в настройках проекта в отладке поставить рабочую директорию туда, где лежат все эти json-ы.
> Юзаешь относительные пути - страдай.
Пфффф. Вот серьезно. Нашел к чему доебаться. Абсолютные пути это рак убивающий. Запомни это.
Ебать ты додик. Ну тогда скрести пальцы и молись, чтоб программа работала в таком же окружении как и твоё. Или ты думаешь, что абсолютный путь это тот, который захардкожен строкой?
>Стоит ли платить айтицыганам за информацию, которая лежит в интернете бесплатно
Плати, раз ты настолько тупой что аж такой вопрос в голове возник
Если ты агрошкольник и не можешь ответить без оскорблений, то и не высовывался бы :З
Аноны хочу спросить не ради холивара, а ради интереса. От этого зависит дальнейший интерес.
Зачем нужен c#?
Утверждают что есть 2 ветки развития c# разработчика, а в скором и 3 будет blazor
Начнем с простого desktop - да под Винду конечно круто, но кросс платформенность рулит. Есть java, js web приложения, c++ и тут видна четкая градация - старый код поддерживаем на Java. Что-то мощное и большое c++ . Быстро что-то накатить js. Какое место занимает с#? Wpf и winforms мертвы, uwp спохватился и пытается что-то отжать. Посмотрите на игры
Единственный вариант это разработка игр, но это ебучий лес. Болото не проходимое, где придется порваться, что бы хоть чего-то добиться и называть себя разработчиком игр
Идём дальше web. А именно backend. Тут все так же. Быстро что-то сделать js, python. Что-то сложное и крупное c++ и Java. И где-то в центре c# пытаясь сесть на 2 стула, жестокого Энтерпрайза и хипстерский новенький опенсорс язык. И не стоит забывать про ruby, тот же язык меж 2 огней, только более адекватный чем c#
Как мне кажется новые языки по типу go, rust нет нет да спихивают c#, пока майки оправдываются и говорят что они тоже опенсорс и вот даже с пацанами из mono договорились. А разработку, развёртку и установку проекта так же сложно вести, да и ещё дорого. Не каждый готов купить готовую продукцию от майков, что бы было удобнее работать с back проектом c#
Про blazor я молчу, проще js выучить, пока ты будешь думать. Как реализовать вызов окна для выбора файла. Сейчас лишь годится для получения данных и удобной работы с c# backend и все.
Так как быть аноны? Может я не прав?
Ответ стандартный: открывай вакансии в своем регионе и смотри, что нужно на рынке, а что нет.
Я не знаю откуда вы берете такие стереотипы, которым лет 5 минимум. Наверное смотрите видосики всяких хауди хо и других клоунов ютуба.
>Начнем с простого desktop
C# кроссплатформен. Писать декстоп можно не только на винформах и впфе. Вот где-где, а на java точно не пишут декстоп. Причем рынок смещен в сторону мобилок и тут шарп снова позволяет писать кроссплатформенный код для Android и iOS, чего не позволяет java. Много таких проектов я даже оценивал в компании на 2к сотрудников.
>c++ и тут видна
Где видна? Мне не видна. Много популярных программ вообще на делфях написаны. В геймдеве часть сишников перебежало на шарп, на юнити. Потому что несмотря на все прелести 17, писать на плюсах все равно сложно и блюпринты тут помогают от части. Другая часть, не только в геймдеве, хотят писать на расте. Существуют проекты с AR и VR на шарпе, но в вакансиях про это писать не будут.
>старый код поддерживаем на Java
Это применимо к любому языку и тому, что вокруг них обросло.
>Быстро что-то сделать js, python.
Быстро делать "хуяк, хуяк и в продакшен" можно на любом мейнстримном языке. Самый быстрый язык - php из-за обилия всяких магенто и вордпрессов.
>Что-то сложное и крупное c++
Нет, что-то сложное и крупное делать на плюсах очень дорого и долго, потому они придумали много всякого изврата по типу плюсы + что-то: луа, шарп...
>Как мне кажется новые языки по типу go
В некоторых тестах реальных низкоуровневых приложениях C# обгоняет Go, но адепты Go тебе такое никогда не напишут в своих статьях. И про всирание на серверлессах не напишут. И про сборщик мусора тактически умолчат.
>А разработку, развёртку и установку проекта так же сложно вести, да и ещё дорого.
Это неправда. C# и Java так популярны, потому что разработка дешевая и быстрая, уже понаписано куча легаси-говна, которое надо кому-то саппортить.
>Не каждый готов купить готовую продукцию от майков
О какой продукции речь?
>проще js выучить
На серьезных проектах фронтендом занимается отдельная команда, а не человек-оркестр.
Есть язык F#, который позволяет фронт и бек писать только на нем уже сейчас и писать в разы быстрее и безопаснее, чем на C#. Но с этим языком существует очень много проблем, одна из них - сранные вкатывальщики в айти, которым в универе преподают js и python и они пытаются больше нехуя не учить и гребсти бабки лопатой.
Я не знаю откуда вы берете такие стереотипы, которым лет 5 минимум. Наверное смотрите видосики всяких хауди хо и других клоунов ютуба.
>Начнем с простого desktop
C# кроссплатформен. Писать декстоп можно не только на винформах и впфе. Вот где-где, а на java точно не пишут декстоп. Причем рынок смещен в сторону мобилок и тут шарп снова позволяет писать кроссплатформенный код для Android и iOS, чего не позволяет java. Много таких проектов я даже оценивал в компании на 2к сотрудников.
>c++ и тут видна
Где видна? Мне не видна. Много популярных программ вообще на делфях написаны. В геймдеве часть сишников перебежало на шарп, на юнити. Потому что несмотря на все прелести 17, писать на плюсах все равно сложно и блюпринты тут помогают от части. Другая часть, не только в геймдеве, хотят писать на расте. Существуют проекты с AR и VR на шарпе, но в вакансиях про это писать не будут.
>старый код поддерживаем на Java
Это применимо к любому языку и тому, что вокруг них обросло.
>Быстро что-то сделать js, python.
Быстро делать "хуяк, хуяк и в продакшен" можно на любом мейнстримном языке. Самый быстрый язык - php из-за обилия всяких магенто и вордпрессов.
>Что-то сложное и крупное c++
Нет, что-то сложное и крупное делать на плюсах очень дорого и долго, потому они придумали много всякого изврата по типу плюсы + что-то: луа, шарп...
>Как мне кажется новые языки по типу go
В некоторых тестах реальных низкоуровневых приложениях C# обгоняет Go, но адепты Go тебе такое никогда не напишут в своих статьях. И про всирание на серверлессах не напишут. И про сборщик мусора тактически умолчат.
>А разработку, развёртку и установку проекта так же сложно вести, да и ещё дорого.
Это неправда. C# и Java так популярны, потому что разработка дешевая и быстрая, уже понаписано куча легаси-говна, которое надо кому-то саппортить.
>Не каждый готов купить готовую продукцию от майков
О какой продукции речь?
>проще js выучить
На серьезных проектах фронтендом занимается отдельная команда, а не человек-оркестр.
Есть язык F#, который позволяет фронт и бек писать только на нем уже сейчас и писать в разы быстрее и безопаснее, чем на C#. Но с этим языком существует очень много проблем, одна из них - сранные вкатывальщики в айти, которым в универе преподают js и python и они пытаются больше нехуя не учить и гребсти бабки лопатой.
> Асинхронный
Нет, обычный void
> Как ты определял
В таске добавил Console.WriteLine("task started")
Ухх. Спасибо большое прям от души отлегло, как долго я ждала подобного ответа. Ибо мне c# очень нравится, а как на вакансии смотришь один гд и поддержка кода под winforms. Надеюсь то что говоришь правда. А что насчёт blazor? Какая у него судьба web assembler взлетит?
>Готовая продукция
Azure, да и просто хост на Винде, не каждый готов предоставить за такую же цену хост на Винде.
F# на фронте? Это как?
Странно, почему же тупая мочерация опять потёрла вот этот пост про наноборду? https://arhivach.ng/thread/538151/#1618710
Я всё понел... ПОТОМУ ЧТО МОЧАН!
Там ещё один пост был, кстати: https://arhivach.ng/thread/538151/#1619575
Хоть не оставляй ничего, пипец, мочан какой.
если .net core взлетит, то кучу легаси говна придется на него переносить. вот тебе и работа.
А если не взлетит. Постоянно одно но, а вдруг, может быть. .net core взлетит, ещё как, люди волком выли и mono помогали чтобы кроссплатформенно было, а майки на протяжении нескольких лет упирались, пока поняли что большая часть разработчиков не на Винде сидят. Так хоть какую-то но свою долю займет. Вот я начну переписывать все на .net core. Будем переписывать это все условно лет 6-8 . А дальше что? Там уже десктоп приложения не нужны будут. Ведь есть веб. Blazor? Он же предназначен лишь для получения данных. В Гите разрабы пишут что политика blazor не нацелена изменять само Dom дерево, а через бинд параметров. Так что js так и останется.
Единственное спасение f#.
Ибо постоянно про c# в масс медия ни слуху ни духу. Все модные на python, go rust typescript пишут. А как ткнуть их носом в c#, сразу говорят иначе и про остальные языки вспоминают. Сразу лелеют c#, красивый синтаксис и все дела. И потом убегаю опять писать на модном языке.
Что блятт происходит не понятно
А как у тебя сейчас?
А ты хочешь выучить одну технологию и до пенсии работать на ней? В программировании так не бывает.
Нет. Я хочу стабильно работать на одном языке, попытаться попробовать его и в хвост и в гриву, сгореть с языка и перейди в совершенно другой язык с другой политикой
>стабильно работать на одном языке
как сказал один умный человек: "программист должен уметь программировать на нескольких языках программирования".
язык лишь инструмент для достижения поставленной задачи и переход на другой не должен доставить проблем.
пока есть винда, будет и C#. Уже 8ая версия у языка.
По вакансиям по Москве у С# где то 1500-1700, это конечно в 2 раза меньше чем у того же питона и JS, но если сравнивать с ruby, то у последнего совсем всё плачевно.
он прав, кому нахуй этот ITVDN нужен? Ни одни курсы не сделают из тебя разработчика. У многих в голове абуз денег == успех, на самом деле это не так. В интернетах море инфы, главное - желание
>>20179
>Идём дальше web. А именно backend. Тут все так же. Быстро что-то сделать js, python. Что-то сложное и крупное c++ и Java
земля тебе пухом, иди на ++ они круче да нет
>>20587
наконец то моча начал работать
>>20719
>как сказал один умный человек: "программист должен уметь программировать на нескольких языках программирования"
долбоеб скорее сказал. Программист - это профессия без привязки языка от слова совсем.
>>1618880 →
я надеюсь, что весь этот пиздокульт по IT в СНГ помойке лопнет, как мыльный пузырь. И как можно скорее. И ебаный мелкософт с их решеточками, блейзора и корами вместе с ним. Да здрастует Rust
Так они же и на youtube выкладывают. Посмотри и оцени их качество.
>Мб у анона есть слитые курсы?
При должном старании и сам найти сможешь.
Моя позиция насчет курсов такая: "Лучше книгу почитаю".
https://docs.microsoft.com/ru-ru/dotnet/csharp/codedoc
и это как-то крипово, по сравнению с
/
*/, которая ещё и все поля для заполнения в нормальных IDE сама генерирует. Может есть альтернативы?
Не даром тут: https://2ch.hk/b/arch/2017-11-02/res/164121539.html (М)
писали следующее:
>Мочан — площадка для насасывания модераторами друг другу в позе №69.
Но оказывается не только они друг другу насасывают, есть и такие как ты.
Как же заебал этот вечно тормозящий подтирач с анальной модерастией,
неадекватной администрацией и запредельной концентрацией рака, вроде тебя.
мимокрокодил
Вопрос вот в чём: есть два стула. На одном веб-приложения и энтерпрайз точенный, на втором - геймдев дроченный. Стоит ли смотреть в сторону геймдева, чтобы работать с женой в одной отрасли? Геймдев в теории мне нравится, он мне близок (я например даже издававшийся писатель, хоть и нонфикшн), но энтерпрайз - это надёжное средство зарабатывания деняк.
Что делать?
Нужно всегда диверсифицировать риски, если с геймдевом что-то случится, то соснёшь как ты, так и твоя жена, а вот если вы будете в разных отраслях, то шанс соснуть резко уменьшается. Поэтому выбор очевиден.
>Геймдев в теории мне нравится
Нравится он тогда, когда ты занимаешься проектами которые тебе по душе, но тебе выбора не дадут, будешь пилить херню которую скажет дядя пилить.
Какая в таком случае лучшая стратегия? Геймдев оставить для своих петпроектов, а развиваться по линии энтерпрайза целиком?
Как хочешь, главное чтобы в рабочем направлении не проседать.
бамп. Ну, серьёзно, как тут у вас принято писать комментарии к коду, так чтоб потом одной кнопкой загенерить html?
>>21415
я ссать хотел на вашу наноборду, ок? Хотите казино с блек джеком и шлюхами? Для этого не нужна борда, можно шифровать сообщения другим способом, но есть одно но - TCP/IP протокол, через который идут реквест-респонс любого интернет ресурса. И зная, что есть портал с illegal информацией, да еще и шифрованной, по которой хуй определишь Ip конкретного юзера как на мочане его просто сразу задушан на любом уровне, чтобы только к нему не было доступа. Вы будете перекидывать с хоста на хост, меняя IP, меняя домен и будете плавать в говне. Поэтому don't waste my and your time.
Есть комментарии типа /// в Visual studio, которые потом можно автоматически в справку преобразовать. Попробуй, может то что ищешь.
Sandcastle поищи, так вроде называлось
Неуловимого Джо душили, душили, но так и не начали душить...
>Да! Как раз то, что нужно. А как преобразовывать..?
https://professorweb.ru/my/csharp/charp_theory/level3/3_3.php
Иди в другой тред, дауненок.
DocFX же говно через консоль, разве нет?
Если просто десктоп приложение:
Открываешь на диске папку проекта, там ищешь папку bin, в ней папку debug. Оттуда копируешь экзешник и все дополнительные файлы и папки (данные там какие). Если применяешь всякие сторонние либы - то и их тоже. Всё это переносишь на другой комп и запускаешь экзешник. На втором компе должен нет.фреймворк стоять соответствующей версии, если под него делалось. Если под core, то хз как, не пробовал пока переносить. Кроме того учти, на твой код может антивирус ругаться, если нету подписей, а их нету.
"path": "AppDomain.CurrentDomain.BaseDirectory"
Value я легко могу получить, но как мне теперь превратить строку в объект и чтобы он путь вернул?
>а поподробнее?
Открываешь документацию и смотришь поподробнее. Тебе только польза будет.
>А по-другому никак?
Никак.
Ты с мобилы пишешь? Открываешь IDE, пробуешь. Можешь консольное приложение создать. Можешь LINQPad использовать, если лень заводить IDE.
Но вот разбираюсь в привязках в винформах
https://www.codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial
И тут есть пример
В разделе Binding without a BindingSource
grid.DataSource = a;
grid.DataMember = "Passengers";
grid.AutoGenerateColumns = true;
txtModel.DataBindings.Add("Text", a, "Model");
И потом при нажатии кнокпи идет добавление в коллекцию источника данных
и идет вызов
grid.ResetBindings();
Чтобы преезачитать измения с источника данных в грид
Так в чем загвоздка, этот метод не отрабатывает и данные в грид не перечитываются
Если обернуть все это в BindingSource и вызвать bs.ResetBindings(false), то все ок
Еще такой интесрный момент, что метод ResetBindings у класса Control помечен как
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetBindings();
То есть как будто его не следует уже вызывать.
Это получается они просто прикрыли использования этого метода?
Хорошо, последний вопрос. Как мне достать класс AppDomain.CurrentDomain.BaseDirectory, то есть класс AppDomain.CurrentDomain. Через операции строчек? или можно как-то по-другому?
Этот хуевый json из appsettings.json. У меня задача, дать возможность задавать нормальный путь или через объект, по типу: AppDomain.CurrentDomain.BaseDirectory, Environment.SpecialFolder и т.п.
Ок, а кто его пихает в appsetting? Я к тому, что если это под твоим контролем, то почему бы не считать все относительные пути относительня папки AppDomain.CurrentDomain.BaseDirectory, а спецпапки указывать как обычно %%ProgramFiles%, %SYSTEMROOT% и т.д.
appsetting это статический файл у net core, у меня в asp net core Web Api. В который можно пихать различные настройки перед запуском проекта. Строка к бд, ключи, данные и т.п. Вот у меня и задача дать пользователь самому определять куда разворачиваются некоторые файлы
>то почему бы не считать все относительные пути
не понял, еще раз
Раз ты сам конфиг пишешь, то можно так:
/foo/bar/tits.jpg - воспринимать как путь относительно исполняемого файла
%ApplicationData%/boobs.mp4 - если начинается с %, значит использовать Environment.SpecialFolder
D:/dildo.txt - полный путь, значит полный путь
Хм, звучит хайпово
хорошо, а если я хочу не Environment.SpecialFolder, а AppDomain.CurrentDomain.BaseDirectory, как мне это указать?
То есть, это может изменить любой пользователь, который пользуется апи. Он захочет не лазая в код и меня строку Environment.SpecialFolder, а просто чтобы указал относительно чего начинается путь: Environment.SpecialFolder, AppDomain.CurrentDomain.BaseDirectory
Отбой, я ошибся.
Я ж тебе написал - первый пример. Если не указ диск/спецпапка считай относительно дирректории домена
Бля, я совсем отупел. Я хочу сделать так:
Тот кто пользуется моей апи, мог просто зайти в appsettings.json и указать либо нормальный путь или объект который хранит какой либо путь, то есть относительно чего начинать путь: BaseDirectory, CurrentDomain, SpecialFolder
А не чтобы он лез в мой код ищя строчку Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "name")
>пользуется моей апи
> мог просто зайти в appsettings.json
В голосину нахуй. Ты чужим API не пользовался что-ли, поэтому такую хуету несёшь?
Ну вот хочется мне, прям руки чешутся. Ебланство конечно же, но выглядит прикольно
Ладно, отброшу пока фантазии. Кто знает в .net core Environment.SpecialFolder распространяется только на винду или на другие операционки тоже?
>значит использовать Environment.SpecialFolder
Я хотел так:
>объект который хранит какой либо путь, то есть относительно чего начинать путь: BaseDirectory, CurrentDomain, SpecialFolder
Спасибо
Поясните про IEnumerator. Я правильно понимаю, что GetEnumenator() возвращает один из объектов массива? Какой именно, первый? Почему тогда возвращается интерфейс IEnumerable, а не сам тип элемента массива?
В какой момент вообще вызывается GetEnumerator(), это как-то foreach неявно делает? Почему там не будут генерироваться исключения?
>возвращает один из объектов массива?
Нет, GetEnumerator возвращает, внезапно, IEnumerator.
>первый?
Класс, реализующий IEnumerble, умеет перебирать элементы множества.
> возвращается интерфейс IEnumerable
Кем?
>В какой момент вообще вызывается GetEnumerator()
Странный вопрос, а когда вызывается Console.WriteLine? Когда надо, тогда и вызывают.
>foreach неявно делает
Строго говоря, для форыча сама реализация IEnumerable не нужна. Там юзается рефлексия и для его работы достаточно любого класса, с методом GetEnumerator, который вернет класс с методом MoveNext и свойством Current.
> Почему там не будут генерироваться исключения?
Какое исключение где должно сгенерироваться?
Не увеличивают. Даже используемые библиотеки обрезаются ровно до используемого минимума, но это не точно.
> using с ссылками на различные сборки (это же называется сборки?)
Нет, это пространства имен. Сборки перечислен в references.
> Влияют ли как-то эти ссылки на само приложение, оставаясь неиспользованными?
Нет, компилятор все вычистит. Точнее он заменит все классы их полными идентификаторами (System.IO.File вместо File). Ты можешь тоже без юзингов писать, используя полные имена. Чисто для удобства штука.
Только в структурах. Еще есть модификатор параметра in, он как ref но менять такой параметр нельзя.
>Учишь очередной женерик мейнстрим говноязык пропихивуемый корпорацией, повевшись на наживочную "тырпрайз" приписку, не зная, что она применима только к западной системе
>Удивляешься говновакансиям аутсорс галер, ничем не отличающихся от пхп-макакинга
>пук-среньк
>делегаты
>ивенты
>Можно ли уже открыть ВинФормс
тебе как раз таки в ВинФормс выше перечисленное пригодится
Хз, правильно ли я понял твой трабл, но вот с помощью модели конфига и простейшей десереализации из строки.
class MyJsonConfig
{
public string Path { get; set; }
// другие поля конфига
}
..
var configText = File.IO.ReadAllText(path_to_json);
var config = JsonConvert.DeserealizeObject<MyJsonConfig>();
var pathValue = config.Path;
ой, проебал параметр функции десереализации
var config = JsonConvert.DeserealizeObject<MyJsonConfig>(configText );
Не понимаю, в чём сложность обучения работы с ивентами. Кликаешь (или производишь другое действие) на кнопку, она генерирует событие, т.е. ивент. К этому ивенту надо привязать метод, который будет как то реагировать на это событие. Всё. Ну а написание своих ивентов и делегатов - нахуй не нужно, в обычном программировании.
>Ну а написание своих ивентов и делегатов
Чего блять? Если делегаты еще можно использовать Func/Action, хотя это не айс, то как ты без ивентов живешь? Или всё остальное, кроме крудов и поко классов, это уже необычное программирование?
Ну так разговор про винформс шёл, нахуя там свои ивенты писать? Юзаешь имеющиеся у контроллеров и всё, они там все действия покрывают. А для своих классов не люблю ивенты писать. Как по мне - это загромождает и усложняет код. Прям в методе и вызываю другие методы.
> нахуя там свои ивенты писать
Не отменяет написание модели. А так у тебя получается связанный спагетти код, раз все знают про друг друга. Из команды огонят ссаными тряпками за такое.
Ахахах сука! Сейчас милион ентерплайз говна есть на винду и еще пол милиона будет.
Поскорее бы сорцы открыли и все будут рофлить над goto!
Я бы дома оставил включённую пеку, но у меня айпишник не белый, не статический, хуёвый.
Куда бы задеплоить серверную часть, желательно, бесплатно. Есть студенческая азура, но, если честно, я не совсем понял, можно ли там запустить такое, вендоспецифическое, или она больше для веба и кора.
Чё делать, посаны?
Подними самую уебищную виртуальную машина на азурных облаках. Там можно через рдп подключиться к ней и работать как с обычной виндой. А вообще, тебе стоит сперва забыть про вцф.
На азуре можно. В принципе, когда я последний раз туда обращался, то там был варик с бесплатной на один месяц удалённой машиной.
Лол. Как раз имею опыт в несколько лет всяких говноподелий на шарпе, пытаюсь выучить яву. Плююсь от его упрощений, так как в половине случаев нихуя непонятно какой результат будет.
Думаю дело привычки.
>У вас также было поначалу
по сей день плююсь от этого индусовского говна
Насчет работы - это компании, которые случайно угодили на мелкософтовский софт, в будущем будут более внимательны и не станут становиться на те же грабли 2ой раз. Пайтон - идеальный язык по сравнению с говно-шарпиком, котороые к тому же сейчас дрочат в шарагах и вузах на первых курсах (см. посты выше). Я уже смотрю в сторону Rust и Kotlin, поэтому имо завязывай с этой йухней и выбирай нормальный язык
Например Па*сек можно назвать как Pa_x_sec. Конечно, было бы лучше Pa×sec, но × использовать нельзя, поэтому и так сойдёт.
Но вот например кг/м³ как нормально назвать в C#, чтобы сохранить эстетику кода? kg_div_m3 или того хуже kg_divided_by_m3 - хуйня какая-то уродливая, от которой даже веб-макаку стошнит.
Пытался найти в таблицах символов Unicode символ в каком-либо языке, который похож на / и который можно было бы использовать в именах переменных, но сходу не нашел. Хотя греческие буквы типа μ или ρ VS нормально хавает. Даже некоторые верхние индексы типа ᵗ проходят.
Может есть надстройка для VS, которая некоторое сочетание символов отображает на экране специальным образом, по аналогии с редакторами формул? Или как-то ещё можно решить эту проблему?
В общем, вброшу пример
https://ideone.com/yB6hJb
В чем собственно проблема. Когда рисуешь в консоли контрол, если делать это асинхронно, может быть хуйня, что другой пидорас передвинул курсор и рисуешь ты его не там где надо. С одним классом это решается просто, я просто делаю статичный объект локер и вроде как все работает. Но если у меня там будут прогрессбары, таблички разные и прочее. Не получится же сделать так же, если не наследоваться от какого-то совсем базового класса, типа Controll, в котором лежит локер к которому все тянутся. А если делать так, то если в консольке будет куча контроллов будет очень много времени тратится на то чтобы все отрисовать. В общем, я наверное чего-то не понимаю. Раньше же делали консольный приложухи, где все двигалось одновременно и ничего друг на друге не рисовалось же.
Я пока думал над этим, единственный выход придумал, это какой-то абстрактный экран, к которому в очередь выстраиваются контроллы, они говорят: Хочу здесь себя нарисовать, потом, когда все сказали где и как хотят нарисовать, этот экран всех в той очереди и рисует. Но блин, мне кажется, что это какая-то хуйня же.
Создаешь бесконечный цикл, пока работает приложение, где по очереди вызываешь две функции:
Update - всякая хуйня на подсчитать, обработать кнопки клавиатуры и т.п.
Draw - отрисовка разницы между предыдущем кадром и следующим, в этот момент блокируется ввод пользователя
Из другого потока влиять на Update нельзя.
> Бля, можете перечислить все темы
Алгоритмы, структуры данных - чтобы ты понимал что ты пишешь и не писал говно
Паттерны, как базовые, так и проектирования - чтобы ты знал как решаются классические задачи
Знание работы сетей - ты ж, блядь, для веба пишешь, сука, как ты будешь это делать, если ты не банально стек TCP/IP не знаешь и не понимаешь что там происходит
Проектирование высоконагруженных приложений - чтобы твой бекенд от 100 клиентов не ложился, плюс никто сейчас не пишет
Знание микросервисной архитектуры, понимание того как работает событийная модель и т.д.
HTML+CSS - это стандарт, раз ты именно в веб метишь
Жаваскрипт и знание пары фреймворков и популярных библиотек - клиентскую часть сейчас почти никто не пишет на .net, а если ты будешь по 3 дня кнопку которая запрос к API делает, то нахуй ты такой нужен.
SQL и умение писать на нем запросы(если в модный-молодежный стартап вкатываешься, то еще потребуется NoSQL освоить) - банально чтобы даже с каким-нибудь EF ты понимал что своими Linq ты хуйню сделал и либо Linq составлял нормальные либо умел на нативных решениях переписать нормально
Знание, собственно, фреймворка(.net, .net core, asp.net, asp.net core) - чтобы ты не тратил кучу времени на свои велосипеды, которые уже есть во фреймворке
Знание того как работает CLR - чтобы ты хотя бы понимал что под капотом происходит и в будущем знал как оптимизировать это говно
Умение читать IL-код - аналогично пункту выше
Умение работать с докером - сейчас все еще стандарт для развертывания твоих апликаций
Умение работать с гитом - стандарт, без гита никуда
Знание линукса и умение его администрировать - твое говно в 95% случаев будет на линуксовом сервере крутиться и ты должен понимать что там происходит.
Знание ангилйского - гуглить тебе все равно придется и на русском ты хуй что нагуглишь, а через полгода-год придется самому вести переписки.
Рост 180см+ возраст 20-25 - чтобы хрюша не послала нахуй.
Член 20см+ - чтобы тимлид не послал нахуй.
Общительность - чтобы команда не послала нахуй
Исполнительность - чтобы менеджер не послал нахуй
Ухоженность - каким бы охуенным спецом ты не был, если от тебя воняет или ты выглядишь как чухан, никто тебя долго в офисе терпеть не будет
> Бля, можете перечислить все темы
Алгоритмы, структуры данных - чтобы ты понимал что ты пишешь и не писал говно
Паттерны, как базовые, так и проектирования - чтобы ты знал как решаются классические задачи
Знание работы сетей - ты ж, блядь, для веба пишешь, сука, как ты будешь это делать, если ты не банально стек TCP/IP не знаешь и не понимаешь что там происходит
Проектирование высоконагруженных приложений - чтобы твой бекенд от 100 клиентов не ложился, плюс никто сейчас не пишет
Знание микросервисной архитектуры, понимание того как работает событийная модель и т.д.
HTML+CSS - это стандарт, раз ты именно в веб метишь
Жаваскрипт и знание пары фреймворков и популярных библиотек - клиентскую часть сейчас почти никто не пишет на .net, а если ты будешь по 3 дня кнопку которая запрос к API делает, то нахуй ты такой нужен.
SQL и умение писать на нем запросы(если в модный-молодежный стартап вкатываешься, то еще потребуется NoSQL освоить) - банально чтобы даже с каким-нибудь EF ты понимал что своими Linq ты хуйню сделал и либо Linq составлял нормальные либо умел на нативных решениях переписать нормально
Знание, собственно, фреймворка(.net, .net core, asp.net, asp.net core) - чтобы ты не тратил кучу времени на свои велосипеды, которые уже есть во фреймворке
Знание того как работает CLR - чтобы ты хотя бы понимал что под капотом происходит и в будущем знал как оптимизировать это говно
Умение читать IL-код - аналогично пункту выше
Умение работать с докером - сейчас все еще стандарт для развертывания твоих апликаций
Умение работать с гитом - стандарт, без гита никуда
Знание линукса и умение его администрировать - твое говно в 95% случаев будет на линуксовом сервере крутиться и ты должен понимать что там происходит.
Знание ангилйского - гуглить тебе все равно придется и на русском ты хуй что нагуглишь, а через полгода-год придется самому вести переписки.
Рост 180см+ возраст 20-25 - чтобы хрюша не послала нахуй.
Член 20см+ - чтобы тимлид не послал нахуй.
Общительность - чтобы команда не послала нахуй
Исполнительность - чтобы менеджер не послал нахуй
Ухоженность - каким бы охуенным спецом ты не был, если от тебя воняет или ты выглядишь как чухан, никто тебя долго в офисе терпеть не будет
Есть ли годный roadmap для fullstack desktop developer’a?
Если нет, то есть ли хорошие ресурсы для создания роадмапов?
Если это не паста то зря ты это писал, меня этой хуйней не напугаешь, я и так вротендер уже вкатившийся и знаю большую часть релейтеда. Меня вот именно что какие то темы по аспу интересуют, что нужно знать чтобы вебапи писать, всякие mvc параши не нужны. и вот это очень интересует
> банально чтобы даже с каким-нибудь EF ты понимал что своими Linq ты хуйню сделал и либо Linq составлял нормальные либо умел на нативных решениях переписать нормально
Ту стену текста высрал какой-то студент.
Джава была топ платформой для разработки приложений, но с топорным синтаксисом. После того как накатили котлин, есть ли смысл вообще вкатывается в шарп? Достаточно ли под net core библиотек вообще?
Попробуй и нам расскажешь.
Спрашивает что есть из готового для отображения статистики. Очевидно же.
Все еще точку запятой ставите и функции суете в классы, называя их статичными?
Еще эти шикарные отступы с неймспейсом и постоянное ощущение за спиной, что МС выкинет очередную палку тебе в колеса
Дам подсказку: ссылка открывается левой кнопкой мыши.
Забавно, я до этого топил за шарфик (как минимум защищал за потуги net core). А потом понял что он все равно морально устарел.
Я котлин-шизик
Каждый раз это записывается в json, возникла проблема что при больших файлах выскакивает следующее: System.IO.IOException: The process cannot access the file '.txt' because it is being used by another process
Код записи объекта следующий :
var json = JsonConvert.SerializeObject(item, Formatting.Indented);
using (var writer = File.CreateText(path))
{
await writer.WriteAsync(json);
writer.Close();
}
Как быть?
Бля братан, спасибо за помощь, если бы не ты всю голову бы сломал. От души прям
а если серьезно че делать? Как из разных потоков записывать в файл инфо
Копай в сторону стримридеров и стримрайтеров, а также более низкоуровнейвой работы с файлами.
Бамп вопросу.
Да там только long должно хватить
Такой же всеобъемлющий и дарующий жизнь?
StringBuilder
1. Переплыть на full stack и начать зарабатывать деньги, а не собирать крошки с пола;
2. Относительно не плохой стэк на проекте - WebApi .NET Core 2.2
Опастности:
1. Улететь на легаси и тонуть в решеточном говне до скончания веков;
2. Т.к. галера свежая (судя по .NET core, а не легаси говне), то могут кинуть на Blazor, как full stack, что есть говно, калл и моча.
Насчет +- JS-сника и так все понятно, иденственный минус - это лычка trainee и меньше ЗП, но в моем городе кол-во вакансий JS vs #, как 20к1.
Дискас
Еще один даун, который думает, что язык и стэк выбирается один раз и на всю жизнь? Иди туда, что больше нравится, если похуй выкатывайтя туда, где больше платят.
>что язык и стэк выбирается один раз и на всю жизнь
20 летний сеньер, который меняет стек каждые два года, ты?
>>27401
>Улететь на легаси и тонуть в решеточном говне до скончания веков
На JS тоже есть шанс улететь на легаси говно типо ember / knockout / etc
>>27401
>то могут кинуть на Blazor
Отказывайся, если галера достаточно адекватная, никаких проблем не будет
Дотнет, имхо, в твоем случае лучше, перекатиться в JS с дотнета будет проще, наоборот - нет
ноулаферы на месте. Как бы охото после РАБоты дрочить новый фреймворк
>>27711
>Дотнет, имхо
я на мидла # выйду быстрее, чем на мидла JS. Просто решетки - это яма, уже в галерах ряды .NET макак редеют и адекватные люди переходят на Node или Python. Я не хочу мало того, что в легаси утонуть, так еще и уплыть на умирающих решетках в помойку. Если бы # реально были перспективные, я бы даже не думая выбрал их...
Есть клиент:
await client.PostAsync("Files/upload/byStream", new StreamContent(file.Data));
Есть сервер:
public async Task<IActionResult> UploadFileByStream()
{
}
Request.Body всегда пустой как быть?
>Просто решетки - это яма, уже в галерах ряды .NET макак редеют
>>27727
>Я не хочу мало того, что в легаси утонуть, так еще и уплыть на умирающих решетках в помойку
>>27727
>адекватные люди переходят на Node или Python
Спорные утверждения, но раз ты так считаешь, то тебе действительно будет лучше брать JS, твои маняфантазии что на условном пайтон лучше никуда не уйдут.
Открываю секрет: на пайтоне тоже есть говно на старом торнадо, говно, которое в сотни раз (субъективно) хуже легаси, например написание условных парсеров.
Может быть тебе повезло бы влететь на нормальный проект на пайтоне, где будут современные плюшки типо AWS, но не факт.
>Спорные утверждения
давай будем смотреть правде в глаза, что open source - это последний вздох мелкософт. Я люблю #, но не хочу с senior/middle опять падать до джуна в python/Go/другом языке. И кстати да - меня берут на позицию, где выгоняют фул бэкера и берут #+JS (уже сказали на собесе, что фул бэкеров осталось единицы) и я даже не знаю, в каком соотношении я буду писать бэк, а в каком фронт. Во вторник буду опять мозги ебать насчет проекта и перспектив, на JS всегда заберут, как трейни - у них только штат растет, а вот .NET-тчиков, как бы не пели за свои Core и Blazor - гонят в шею
>open source - это последний вздох мелкософт
>>27748
> хочу с senior/middle опять падать до джуна в python/Go/другом языке
>>27748
>где выгоняют фул бэкера
>>27748
>гонят в шею
>>27748
>что фул бэкеров осталось единицы
По этим утверждениям, становится понятно что ты даже близко не понимаешь о том, что происходит
В нормальных галерах, при должном желании, перейти на Go, с дотнета, вполне себе можно, даже без потери зарплаты.
Вопрос только нахуя, учитывая какое ГО говно.
Не знаю кого там выгоняют, пиздишь либо ты, либо галера
>>27748
>Blazor
Это говно никто кроме шизиков серьезно не воспринимает
Бери JS, твои маняфантазии не уйдут
Я другой анон. Хотел бы спросить, а как у тебя дела с работой? Ты фулл бэк c#? На чем пишете и что используете, если есть возможность опиши свою галеру
>Ты фулл бэк c#?
>>27785
>На чем пишете и что используете
Зависит от размера проекта, сейчас полностью на бэке.
.net core, ef, nancy, polly, rabbit, xunit, postgresql, mongo, на фронте часть на реакте, часть на angular2+, но ангулял планируют выпиливать
В целом проекты разные, есть и легаси на MVC5 + angular2, там как правило работают фуллстеки, хотя я бы это особо и легаси не назвал
>близко не понимаешь о том, что происходит
у меня 3 из 4 знакомых уже с веслом в руках, только раскидана от пыхаря до dev-ops (все на той же галере). Поэтому я прекрастно осведомлен, что сейчас шепчет рыночек.
>ГО говно
Это я так, сам не писал на нем. Насчет перепрыгнуть с одного стэка на другой - будет полюбому рейз вниз (уже узнал)
>Бери JS
Спасибо за совет, наверное так и поступлю
Спасибо. Довольно стандартный набор, только докера не хватает. И этот набор полностью покрывает потребности? То есть на сколько будет живуч данный набор?
>Довольно стандартный набор, только докера не хватает
Он есть, я просто забыл упомянуть, на .net core, кажется, это уже что-то стандартное
>>27817
>И этот набор полностью покрывает потребности?
Вполне, но это понятное дело далеко не полный список того что есть
Ef core проблемный, но в 3.0 вроде уже исправили много чего.
>>27817
>То есть на сколько будет живуч данный набор
Сложно сказать, если не будет технического долга, то вполне себе, если я правильно понял вопрос
будет 1, но успеха это ему не придаст, т.к. мелкософт как обычно держали тузы в рукаве, вот только опаздали их показать. Теперь на этих тузах будут сидеть
А чьё место должен занять шапр в случае успеха? Джавы? Так она и так труп. С/С++? Ну в геймдеве юнити уже топ-1, а в остальном мёртв сам С++.
У тебя целый список sql запросов.?
Короче заворачивай их в структуру json :
[
"",
"",
]
И потом через system.text.json парсь как list<string> и все
На клиенте есть примерно
var content = new MultipartFormDataContent();
var imageContent = new StreamContent(file.Data);
content.Add(imageContent, "file", file.Name);
var response = await client.PostAsync("upload", content);
Как теперь это читать?
Ну у меня порядка 15 файлов с разными SQL-задачами. Их довольно легко в этих самых файлах редактировать в Notepad++. Но я не хочу класть эти файлы рядом с exe-шником, хочу просто на этапе компиляции вшить это в соответствующие string.
А твоё решение как я понимаю тоже требует на этапе выполнения считать это всё из файла с json?
а ты работаешь с asp net core web api? Если запросы статичны, то есть вообще не меняются можешь добавить в appsettings.json или свой settings.json добавить и в Startup парсить через Configuration.GetValue<string>
>Требует на этапе выполнения считать это всё из файла с json?
Это самый оптимальный вариант, через Configuration.GetValue<string>, нужен тебе какой-то запрос, вызываешь Configuration и все, просто и удобно
Так же в Configuration ты можешь вызывать секции, то есть запросы можно будет каталогизировать:
То есть у тебя json следующего вида:
{
"Get files by somthing":
{
"ByIndex":"Твой запрос",
"ByName":"Твой запрос"
}
И ты вызываешь Configuration.GetSection("Get files by somthing").GetValue<string>("ByIndex") и получаешь свой запрос. Очень удобно
}
есть лист с датам, нам нужно проверить больше ли самая большая дата указанной
что будет быстрее пройтись фором и сравнить каждые даты с указанной, или отсортировать лист по увеличению даты и сравнить указанную дату с последней?
Конечно пройтись и сравнить с каждой. Сортировка подразумевает под собой гораздо больше сравнений.
хорошо, спасибо анон! а тот в интернете мне какие-то люди говорили что сортировка и занимает 1 строчку а фор 10, и что лучше сортировку ведь меньше строчек кода...
Сортировка в серднем займет O(n*Logn), а поиск сравнением сравнением O(n).
Как сделать нечто подобное http://ecomputernotes.com/csharp/cs/multiple-main-functions
но с помощью MSBuild?
Чтобы можно было указать какой /main юзать в качестве майна, а какие - нет.
>>28291
>>28294
У меня десктопное приложение, которое пишет результаты расчётов в SQLite и читает их оттуда для сравнения и визуализации.
Ранее с json не работал, поковыряю его, посмотрю что как.
В идеале хочу иметь один файл exe, который можно передать коллегам, и он у них не сломается. Если где-то рядом должны лежать внешние файлы, вероятность, что они потеряются и всё поломается становится очень высокой.
1. Google
2. MSBuild parameters
3. MSBuild properties
4. https://docs.microsoft.com/en-us/visualstudio/msbuild/common-msbuild-project-properties?view=vs-2019
5. StartupObject
Юзать как то так:
>< StartupObject >foo.Program2< / StartupObject >
или так:
>MSBuild foo.csproj /p:StartupObject=foo.Program1
>MSBuild foo.csproj /property:StartupObject=foo.Program2
Где foo.Program1, foo.Program2 - классы Program1 и Program2 в namespece foo, внутри которых эти ваши - майны.
Какой сложности и объема проект? Если мелкий - ебаш на Node JS или пыхе, если крупный интерпрайз проект - можно смотреть в сторону Java или .NET
так вопрос в проекте. У тебя логика сломанна. Это тоже самое, что спрашивать - какую машину купить - Трак или Таврию? Тебе для чего? Если с петом мелкософта поиграть - .NET core, если какой то комерческий проект - то нужно смотреть требования заказчика. Ты же блять не будешь покупать MsSql за 12к для свистелки-перделки?
Работаю около полугода в конторке в своем мухосранске 300к
Платят не плохо 900не деревеянных, но есть желание перекатиться и подпрокачать себя
И ввиду того что я сейчас юзаю довольно банальный стек sql,git,чутка ООП,WinForms, созрел вопрос:
Какой примерный стек нужен от джуна чтоб вкатиться куда нибудь в МСК?
Но он же коровам хвосты крутит и хочет узнать как там в большом городе.
Спасибо. Лол когда под тестовый язык f# больше возможностей и способностей чем под c#, я хуею. И при чем функциональная парадигма больше подходит под большой интерпрайз. А f# опен сорс или как всегда у Майков?
Посмотри, как было сделано Turbo Vision (или его Free аналог). Наверное есть и более современные версии, но я давно не интересовался.
В ресурсы запихни. Или в код, как константы в отдельном классе и файле
Или можешь посмотреть в сторону сортированого контейнера. Вообще, изучи сложности операций в разных контейнерах
А у clojure больше возможностей, чем у всей дотнет платформы.
SQL, Entity Framework, ООП на отличном уровне, async/await (полное понимание работы), паттерны (SOLID, Репозиторий и всё в этом духе), GIT (десктопная поебень не интересует, на собесе могут спросить про конкретные команды и будут правы, а через что на проде коммитить - сам решишь), тестовый фреймворк (XUnit, NUnit, MSTest - разницы особой нет, дальше уровня ассертов обычно не спрашивают), ну и дальнейшее направление (ASP.NET MVC, Blazor, WPF, UWP, Unity, etc).
Ко всему этому лучше почитай литературу: сможешь поговорить с тимлидом на умные темы.
Если выберешь веб - должен уметь в html/css/js/bootstrap. Глубокие знания обычно не нужны, если только не впишешься в говноконтору джуном-фуллстэком.
Выберешь десктоп - там XAML-разметка. Опять же, основы лучше изучи, чтобы смог что-то сверстать на коленке.
Выберешь геймдев - готовь жёппу и шарь работодателю свои познания в математических дисциплинах.
Что бы ты ни выбрал по направлению - перед попыткой схватить удачу за хуй хвост лучше обзаведись портфолио: одного-двух хорошо смазанных и вылизанных проекта в опенсорсе на гитхабе вполне достаточно, чтобы заинтересовать няшу с отдела hr. Если постараешься и вылижешь каждую строку, да ещё и по паттернам, со здравой расширяемой архитектурой и с мануалом в readme по запуску твоего творения - можешь собирать чемоданы. Но это маловероятно.
Вообще странно, что работающий анон спрашивает про стек джуна, но я в чужие дела не лезу. Спрашиваешь - значит есть зачем.
Антон как думаешь такого портфолио хватит?
Есть на uwp работающий клиент ftp, документацию ещё пишу и пару классов надо подправить. Делал все через mvvm, через команды
Есть на ангуляре 8 свой бложик, с wyswyg и бэк в виде шарпа с даппером.
Есть проект освещения на ардине под десктоп на winform, это самый доделанный проект, но и самый первый, там надо переделывать всё
Есть так пару проектов на blazor с js, по типу тудушек.
По патернам есть всякие фабрики, компоновщики, стратегии. Фасады и т.п.
Более менее соблюдаю solid. Документация есть в половине проектов.
Ебать спасибо тебе, человеческое
Да я работаю на галерах макакой, это слабо связанно с нормальным программированием
Введено вместе с Non-nullable reference types, чтобы ты мог показать компилятору, что эта переменная может иметь значение null и её нужно проверять на равенство null перед доступом к значению, если её объявить как non-nullable то ты не сможешь присвоить этой переменной значение null и тебе не нужно будет делать проверки на null при доступе к значению этой переменной.
я разобрался, необходимо было править вебконфиг
>если её объявить как non-nullable то ты не сможешь присвоить этой переменной значение null и тебе не нужно будет делать проверки на null при доступе к значению этой переменной.
Но компилятор на это не ругается, только предупреждение даёт. И присваивать null позволяет, и сравнивать.
Пиши разрабам чтобы исправили.
Да, звучит неплохо. Если это не копипасты с метанитов или чужих гитов и сможешь пояснить за свой код - можешь шарить в попенсорсе и кидать ссылки в своём резюме. Но документацию лучше допиши: сам не забудешь и тимлиду понравится такой подход.
Есть данные в виде List<List<string>> (по сути таблица), которые нужно преобразовать в текст с нужными разделителями. Можно это как-то сделать быстрее и оптимальнее, чем на пике? А то оно ОЧЕНЬ долго(много часов) добавляет разделители при огромном количестве столбцов и строк.
Начнем с того, что цикл foreach в 4-5 раз медленнее, чем обычный for. Закончим тем, что ты идиот, не понимающий базовых вещей, если для аппендинга используешь иммутабельные стринги, которые создают новый string при любой операции, их меняющей.
Да я даже не джун, ну чего ты.
>Начнем с того, что цикл foreach в 4-5 раз медленнее, чем обычный for.
Ок, переделаем под for.
>если для аппендинга используешь иммутабельные стринги, которые создают новый string при любой операции, их меняющей.
Что и как можно использовать вместо них?
>>30263
Для работы со строками используй StringBuilder. А говнокод твой непонятен. К чему у тебя обертка в виде списка вообще, если в твоём примере заменить List<List<string>> на List<string>, то всё что изменится это станет на 1 цикл меньше? И почему разделители нельзя добавить сразу при создании изначального списка, добавив сразу всё в результат?
давай неси и не выебывайся, смерд. Сегодня без типсов, за длинный язык
>Для работы со строками используй StringBuilder.
Спасибо!
>И почему разделители нельзя добавить сразу при создании изначального списка, добавив сразу всё в результат?
Да, ты прав, переделаю, чтобы 2 раза не обходить.
>К чему у тебя обертка в виде списка вообще, если в твоём примере заменить List<List<string>> на List<string>, то всё что изменится это станет на 1 цикл меньше?
Так это таблица: один список строк - одна строка обработанных данных. Хм, хотя наверное да, можно сразу все в один StringBuilder c \r\n делать, тоже переделаю.
Суть в том, что в примере у тебя все строки получат один разделитель, единственное отличие в том, что ты добавляешь \r\n после конца каждого массива строк. Можно заменить на \r\n после каждых n строк,если для тебя просто важно чтобы результат выводился столбиком.
Т. е. получится что-то вроде
var sb = new StringBuilder();
for (int i = 0; i < data.Count; i ++)
{
sb.Append(data + separator);
if (i % 10 == 0) sb.Append("\r\n");
}
макаба съела квадратные скобки [ i ] у data
Спасибо. Нет, не копипасты, брал от туда только части и под себя делал. Надо будет еще нормальное резюме составить и алгоритмы всякие подтянуть
Да нахуй ты этому идиоту со шлюхами помагаешь? Написал, что у него не так - дальше пускай сам разбирается, в гугле его не забанили. А так ему очевидно будет похуй почему for быстрее foreach и что такое мутабельность; через полгода будет плодить очередные высеры о том, что иммутабельность - зло и вообще ненужно.
P.S.: У тебя в коде всё равно происходит конкатенация в выражении "data[і] + separator".
>конкатенация в выражении "data[і] + separator".
Без этого никак. Ради сложения двух строк создавать sb - ненужный оверхед.
Издеваешься? Ещё один аппенд дописать и готово. Или хочешь сказать, что одна лишняя строчка убьет читабельность?
Нет, всё верно, я просто тупой.
Длина строк всегда разная, тк не все колонки задействованы, но все равно спасибо: я так же буду на моменте обработки данных добавлять \r\n и сразу собирать итоговый StringBuilder.
Как сконвертировать код на CSharp в C или Python?
А ещё - в кресты (C++), чтобы вообще заебись было?
Берешь и переписываешь без задней мысли.
Почему у тебя код уровня студента ПТУ?
Где лежит твой json файл?
Ты уверен что точно знаешь, как работает Data.ReadObject()?
А что по твоему происходит с относительной строкой? Она точно также превращается в абсолютную, зависит от настроек и магии твоего фреймворка или приложения.
О-о-о, моя любимая тема!
Tl;DR в самом конце.
Disclaimer
Работаю с C# с версии 1.0 (год 2003 на дворе). Начинал со всяких пхп, вб, делфи. Делал проекты на C++ и Джаве в универе, в аспирантуре, на работе. Встречался со Страуструпом, который заявил что если кто-то найдёт мастера с++, то он очень хочет с ним познакомиться, потому что по его мнению плюсы невозможно знать хорошо, их можно просто знать (отсюда и большая нужда в Rust, на котором уже начали делать добавления к Линуксу, писать дрова и вообще целые ОС - https://www.redox-os.org/, новые игровые движки и конечно WebAssembly).
Работал как в энтерйпрайзах типа Amazon, GM, Siemens, так и стартапах от 2 до 10 человек.
Преподавал Ruby, JS/TS и Python в универе по вечерам в свободное от работы время.
C# - наше всё
Помню как Java и Ruby начали вируситься из всех щелей. Коллеги и товарищи постоянно пытались перетянуть в один из этих языков. Стабильно раз в год я брался за большие проекты с одним из них. Потом еще добавился Питон, NodeJS. Потом всякие React'ы и Angular'ы.
Мне нравилась моя среда разработки, но постоянно гложило то, что я завязан на разработку под Винду и одну единственную IDE. А также зависть того, какие крутые штуки может вытворять JVM (по сравнению с CLR). Поэтому поиск куда бы перескочить продолжался.
Но каждый раз как я пересаживался на Java, я не мог перестать плеваться. Пусть Spring (благодаря JVM продвинутости) и имела крутые фичи в своём арсенале, но постоянно было ощущение что работаешь с костылями и бета продуктами. Постоянно надо было дружить сотни разных библиотек от разных создателей друг с другом. Бесконечное курение мануалов, которые надо было искать по всем закоулкам интернета.
Про Руби с его рельсами вообще молчу. Он появился как замена ПХП. Позволял быстренько клепать POC, Demo и небольшие сайты под копирку. Отсутствие производительности решалось закупкой железа и большими счетами за хостинг.
Питон по производительности тоже где-то там рядом с Руби, кстати. Не один раз приходилось переписывать API с Питона на C#.
Работая с теми же самыми ресурсами (DB, Queues, distributed cache, external APIs, etc.)
- Python выдавал 5-10 сек
- C# - 50-500 мс.
Конечно, код на Питоне иногда был писан индусами или студентами. Но чаще всего всякими сеньорами, бившими себя пяткой в грудь, доказывая что Питон круче всех.
TL;DR
С выходом dotnet core все сомнения отпали:
- довели до ума то, чего нам не хватало из Spring
- open source и cross-platform!
- производительность больше не проблема
- писать и запускать код можно в VS, VS Code, <вставь что нравится>, Notepad++, терминале (lol)
- писать можно под мобилки, веб, облака, игры, любой десктоп и нынче даже скрипты для автоматизации
- Azure любит C# и dotnet по умолчанию (остальные облачные платформы тоже с радостью с ними работают)
- F# никуда не уходил и только стал лучше
- WebAssembly c Blazor в самом разгаре и будут становится более популярными с адоптацией HTTP 2 (а скоро и HTTP 3), который уже поддерживается всеми облаками
- Powershell теперь может работать на Core, используя все его плюшки
https://visualstudiomagazine.com/articles/2020/03/06/de-icaza-webassembly.aspx
О-о-о, моя любимая тема!
Tl;DR в самом конце.
Disclaimer
Работаю с C# с версии 1.0 (год 2003 на дворе). Начинал со всяких пхп, вб, делфи. Делал проекты на C++ и Джаве в универе, в аспирантуре, на работе. Встречался со Страуструпом, который заявил что если кто-то найдёт мастера с++, то он очень хочет с ним познакомиться, потому что по его мнению плюсы невозможно знать хорошо, их можно просто знать (отсюда и большая нужда в Rust, на котором уже начали делать добавления к Линуксу, писать дрова и вообще целые ОС - https://www.redox-os.org/, новые игровые движки и конечно WebAssembly).
Работал как в энтерйпрайзах типа Amazon, GM, Siemens, так и стартапах от 2 до 10 человек.
Преподавал Ruby, JS/TS и Python в универе по вечерам в свободное от работы время.
C# - наше всё
Помню как Java и Ruby начали вируситься из всех щелей. Коллеги и товарищи постоянно пытались перетянуть в один из этих языков. Стабильно раз в год я брался за большие проекты с одним из них. Потом еще добавился Питон, NodeJS. Потом всякие React'ы и Angular'ы.
Мне нравилась моя среда разработки, но постоянно гложило то, что я завязан на разработку под Винду и одну единственную IDE. А также зависть того, какие крутые штуки может вытворять JVM (по сравнению с CLR). Поэтому поиск куда бы перескочить продолжался.
Но каждый раз как я пересаживался на Java, я не мог перестать плеваться. Пусть Spring (благодаря JVM продвинутости) и имела крутые фичи в своём арсенале, но постоянно было ощущение что работаешь с костылями и бета продуктами. Постоянно надо было дружить сотни разных библиотек от разных создателей друг с другом. Бесконечное курение мануалов, которые надо было искать по всем закоулкам интернета.
Про Руби с его рельсами вообще молчу. Он появился как замена ПХП. Позволял быстренько клепать POC, Demo и небольшие сайты под копирку. Отсутствие производительности решалось закупкой железа и большими счетами за хостинг.
Питон по производительности тоже где-то там рядом с Руби, кстати. Не один раз приходилось переписывать API с Питона на C#.
Работая с теми же самыми ресурсами (DB, Queues, distributed cache, external APIs, etc.)
- Python выдавал 5-10 сек
- C# - 50-500 мс.
Конечно, код на Питоне иногда был писан индусами или студентами. Но чаще всего всякими сеньорами, бившими себя пяткой в грудь, доказывая что Питон круче всех.
TL;DR
С выходом dotnet core все сомнения отпали:
- довели до ума то, чего нам не хватало из Spring
- open source и cross-platform!
- производительность больше не проблема
- писать и запускать код можно в VS, VS Code, <вставь что нравится>, Notepad++, терминале (lol)
- писать можно под мобилки, веб, облака, игры, любой десктоп и нынче даже скрипты для автоматизации
- Azure любит C# и dotnet по умолчанию (остальные облачные платформы тоже с радостью с ними работают)
- F# никуда не уходил и только стал лучше
- WebAssembly c Blazor в самом разгаре и будут становится более популярными с адоптацией HTTP 2 (а скоро и HTTP 3), который уже поддерживается всеми облаками
- Powershell теперь может работать на Core, используя все его плюшки
https://visualstudiomagazine.com/articles/2020/03/06/de-icaza-webassembly.aspx
перед тем как спросить у тебя куча вопросов и поблагодарить множество раз, если у тебя хоть какие-нибудь пруфы, подтверждающие твои слова о опыте.
Это же деанон, ну ты че.
Обычно опыт подтверждают собеседованиями. В данном случае наверное просто техническими запросами о помощи.
хм. хорошо я уважаю твой выбор. тогда посыплю вопросиками.
Сразу в омут, blazor. Blazor должен вот-вот выйти, но очень сырой. Нет route catch all, нет нормального получения информации перед загрузкой Dom дерева, нормальные модельные окна не создать без костылей, localstorage не работает даже в тестовой репе у майков, не работает простые взаимодействия с системой - выбор файлов. и это только с тем что я столкнулся, а сколько еще. То есть без js blazor полуживой.
Насчёт .net core, инфы очень мало. вот недавний случай, ножно было через multiple part отправлять с клиента стрим с именем файла в net core api. Ели как нашел документацию от майков в репозитоии примеров, в котором говорится что этот пример может отправлять большие файлы ~2MB но это же смешно. А самое веселое это то что стрим на сервере превращается в тыкву, в memory stream без буфера. Я это понял когда захотел отправить около 500мб. И это только один случай такой ебли с бубном. Хотя кричат опенсорс, комьюнити, а по итогу на гите проблема с оптравлением большого файла открыта. А на стаке все поголовно отвечают что нужно через memory stream.
И таких проблем много, тот же cors политика отправки.
Я это к чему, все кричат о c# круто, быстро, опенсорс, а после своих выкрикиваний показывают как массив сортировать и все. а о том как работать с файлами, бэком брокерами и и.п. ни слуха ни духа, только копипастят друг друга что в голову придет и все. А потом приходится через тонны документации Майков искать крупицы.
грустно это все
а вот ещё вспомнил весёлый случай. игрался с апи, у которое есть долгое время ожидания. пошел гуглить как подписываться на ожидание и какие есть альтернативные пути. на стаке говорят, делай через async/await и пингуй раз в 1000ms, лол. облазил все. кто-то говорит про thread, кто-то предлагает с нуля реализовывать систему менеджера, который будет выдавать нужные результаты, приводя при этом пример пару строчек. Благо тут анон хороший нашелся и почти готовую систему скинул. А потом мне вечером в рекомендациях появляется видео в рекомендованных про митап .net и вступление чувака про rxjs, боже благослови его золотые руки. И это только из недавнего и что смог вспомнить
>довели до ума то, что 20 лет нагло крадут из проперженной жавы и всё никак не осилят
>open source и cross-platform (на самом деле всё давно в пизде и остается лишь перепаковывать бинарники)
>производительность больше не проблема, если сравнивать с питухонами и рубями
>код можно писать
>писать можно под мобилки, веб, облака, игры, любой десктоп и нынче даже скрипты для автоматизации, правда в лучшем случае получишь 100мб блоб грузящийся 10 секунд, может даже запуститься
>MS пропихивает свою говно на своей платформе
>F# всё еще самый невнятный высер ФП мира в истории, саймон пейтон ситуацию не спас
>Полноценные WebAssembly фрейворки, написанные комьюнити даже на TS и Rust'e, идут в продакшены
>Мегакорпорация наконец справилась с плагином для шела, ебать
и это только с web API. мне страшно представить что будет если я захочу пол мобилки начать писать и в мою голову опять какое-нибудь дерьмо придет и буду опять мучиться как с wpf. Однажды я решил добавить контекстное меню в wpf приложении через command и mvvm. оо сколько простыней инфы я получил о костыле proxy, биндинге и о том что виртуальное Dom дерево нет в wpf. а вот о том как нормально связать команды vm и vm меню ничего, только пласты инфы о паттерне proxy
Люди берут нормальный инструмент и делают продукты, которые нормально работают годами да, большинство кода на любой платформе и языке пишется макаками, которые влезли в область ради денег, не надо сравнивать с ними.
Всегда найдутся те, у кого рот полон говна и им не терпится им поделиться с окружающими.
Гугли нормальные бенчмарки и пиши нормальный код, и будет у тебя загрузка по сети чего угодно что на плюсах, что на шарпах работать практически одинаково.
https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=plaintext
https://stackoverflow.com/questions/43920942/unexpected-outcome-of-node-js-vs-asp-net-core-performance-test
https://raygun.com/blog/dotnet-vs-nodejs/ - этот пост как только уже не сношали.
У всех конечно своя специфика работы и свои проблемы, поэтому со всех их множеством ни один эксперт никогда не столкнётся. Я помню до 2012 года инфу реально было сложно гуглить (особенно на русском). Основным источником знаний были коллеги и документация внутри компании.
Потом как-то проще стало до выхода первой версии Core. Но оно было ожидаемо. Любой свежак еще несколько лет обкатывать надо (ждём .NET 5 в этом году, который должен стать первым стабильным продуктом после появления Core). Тот же Blazor еще до нормального прода надо пару лет дорабатывать. Любой продукт эти стадии проходит.
Сейчас с поиском инфы проблем вообще не возникает. И обратная связь появилась и работает хорошо:
https://docs.microsoft.com - тут можно прям в статьях вопросы задавать (снизу на странице) и отвечают быстро.
https://github.com/dotnet/core/issues
С приведёнными тобой проблемами в принципе сталкиваться не приходилось. Хотя тоже работаем с большими файлами, БД, кучей запросов, долгими (иногда несколько дней долгими) асинхронными бэкграундными процессами.
Я стал придерживаться идеи что люди любят в принципе усложнять себе жизнь. Из-за этого мы видим не тривиальные вопросы и костыли. Много такого кода было вычищено из наших репо.
А еще люди уже который год не могу срастить разницу между параллельной и асинхронной обработкой:
https://dev.to/scotthannen/concurrency-vs-parallel-vs-async-in-net-3812
Научившись правильно работать с async/await много проблем быстро отпадёт.
На счёт твоей multipart проблемы - вот это еще не читал?
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1
WPF меня каким-то образом обошёл стороной. Мы сразу с винформс в веб перескочили и там сначала был ад asp.net web forms, а потом достаточно быстро в asp.net mvc, RESTful и на клиенте сначала всякие knockout'ы, а потом Vue, React, Angular.
Делали проекты на Xamarin для андроида и ios (там тоже XAML используется). Бэкенд на Core с API, и разные морды под веб и под мобилки. Большую часть времени мы ломали головы над бизнес задачами, а не техническими проблемами. Так что не боись.
Один и тот же код деплоим хоть так, хоть в докер конейнере в винду и в убунту. Работает из коробки без напильников.
>усложнять жизнь
Так я поэтому-то и ищу решения от Майков а их нет. Идёшь на стак а там пишу вот так упрощённо записывая все в memory stream. Вот и приходится не найдя готового инструмента и простого и лаконичного решения делать костыли.
>На счёт твоей multipart проблемы - вот это еще не читал?
Это и читал, особенно главу : Upload large files with streaming
Если зайти в репу примера загрузки и посмотреть под капот можно увидеть сюрприз:
https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/mvc/models/file-uploads/samples/3.x/SampleApp/Utilities/FileHelpers.cs
>return memoryStream.ToArray(); ой-ой вот тебе и загрузка больших файлов, а в доках к репе написано ~2mb вот это мощь. А почему нельзя читать стрим? А потому что seek у него отключен, он сразу в конечном положении и получается только через массив байтов.
А так спасибо за помощь. А вы ждёте файлы несколькл дней через async? если да, то это как? Просто я для себя открыл iobservable и rxjs и теперь асинхронные ожидания не проблема.
Спасибо. а как вы на xaml делали контекстное меню и прочие штуки, которые требуют виртуального дом дерева? хотя бы кратко и как это все связывали через mvvm
между async и параллельностью это пончьоо6, спасибо лысому из itdvn. если кратко, то async позволяет отложить задачу до тех пор пока не выполнится, отдавая обещание в виде таска, там ещё Стейт машина переводит контекст выполнения программы дальше и много ещё умных слов.
параллельность на то она так и звучит. говоришь машине хочу выполнять несколько задач одновременно, и машина с помощью внутреннего механизма это делает. Все очень просто, если вот так на пальцах
это как раньше я не видел разницу между интерфейсом и базовым классом, а потом ранними утром и пару видео itdvn сразу осенило что к чему. Сейчас даже не думая получается создать когда нужно интерфейс или базовый класс
>какие крутые штуки может вытворять JVM (по сравнению с CLR)
давай, расскажи мне за эти "штучки". Я уже расстегнул молнию на брюках и выпил литр воды. Готов тебя слушать
Эмм, там хоть и XAML, но если ты Web controls не используешь, то никакого DOM нет. Все UI элементы доступны из кода.
Не смог найти доков, по которым мы MVVM делали, все ссылки на xamarin.com теперь ведут на майкрософт докс.
Мы выгребали данные из всяких DataSources (DB, API) и отправляли объект для рендеринга во ViewModel.
abstract class ViewModelBase : ExtendedBindableObject, INavigationAware, IDestructible
class ScheduleManagementPageViewModel : ViewModelBase
partial class ScheduleManagementPage : ContentPage
ScheduleManagementPage.xaml
ScheduleManagementPage.xaml.cs
ScheduleManagementPageViewModel.cs
>Работая с теми же самыми ресурсами (DB, Queues, distributed cache, external APIs, etc.)
>- Python выдавал 5-10 сек
>- C# - 50-500 мс.
Какие-то охуительные истории. При работе с базой, сторонними сервисами и тому подобным 95% времени тратится на сетевое IO, и ожидание ответа, та хуйня что ты там мог выиграть за счёт скорости выполнения кода это капля в море.
зачем ты копротивляешься, Мистер Андерсон, почему ты принимаешь того, что python > #
спасибо большое. да ошибка вышла, спутал с дом деревом. статья было что в wpf нет виртуального визуального дерева и все надо через код делать, а потом уже биндить экземпляр меню.
А тебе файл сразу из браузера надо стримить в реляционную БД что ли? Примеры они на то и примеры, чтобы показать имеющиеся классы и методы. Код в примерах ни разу не для прода. Никогда его не копипасть.
Ссылка у тебя на пример приложения (sample). А то щас люди подумают что это часть фреймворка.
Стрим надо в файл уложить, там нормальный пример с async/await для этого есть, а дальше можно и в какой-нибудь BLOB storage (осторожно с using'ами, тот код для прода тоже надо переписывать).
Файлы мы по несколько дней не ждём, они быстро записываются на какой-нибудь диск. Обычно такие операции (для отправки) через fire-and-forget делаются. Для приёма косяк может быть только если соединение плохое.
По 10+ часов можно ждать внутренних процессов, типа анализа миллиарда записей в БД (и вообще анализ данных, неважно из каких источников они приходят), создание ресурсов в каком-нибудь cloud сервисе, копирование данных с одного сервера на другой.
Такие долгие операции асинхронно и через всякие очереди делаются (RabbitMQ, NServiceBus. etc.). Иногда сервис периодически опрашивает процесс, иногда процесс может отправить сигнал на сервис о success/failure.
Hangfire - прикольная штука. Много где вижу.
Нет.
Продукт был выпущен для медицинского использования и публичный доступ был запрещен. Госпитали в разных странах готовят телефон специально под пациента со всеми настройками и он обязан им пользоваться на время исследований.
Если очень хочется что-то пощупать, то вот публично доступный сайт: https://www.shopcarsnow.com там процентов 20 моей работы на фронте и 80 на бэке
Интерфейсы были введены для обеспечения Trait design-pattern, потому что у МС не было времени думать как правильно заимплементить множественное наследование и они просто скопипиздили дизайн из Джавы.
Но с C# 8 появились нормальные Traits. Это те же интерфейсы, но они теперь позволяют добавлять имплементацию методам. Абстрактные классы (на собеседованиях о них только старички вспоминают, в проде я их уже лет 5 не видел) больше не нужны.
А вообще на интервью на вопрос "what's an interface?" в 99% случаев ожидают услышать "interface is a contract". Потом начинают копать в сторону DI, IoC и SOLID principles.
>Но с C# 8 появились нормальные Traits.
Может сперва почитаешь, что такое трейты, прежде чем высирать свое важное мнение?
>Но с C# 8 появились нормальные Traits. Это те же интерфейсы, но они теперь позволяют добавлять имплементацию методам.
Угадай откуда это скопипиздили.
Что тут гадать, там же уже написано - Джава. А потом их в Скале так и обозвали вместо интерфейсов.
Приятно подискутировать с экспертом в своей области, который умеет четко и доступно донести свои мысли и предоставить аргументы с проверяемыми фактами.
Я всегда допускаю что не знаю/плохо понимаю какую-то тему и готов узнать что-то новое.
Вам про
- traits in Java, Scala, Python, Rust, C#, <вставь пропущенное>
- traits как design-pattern
- трейты у пацанов на районе?
надеюсь обойдёмся без мамок, ёбли и говна
Не, там написано про обычные интерфейсы, которые из-за нехватки времени взяли. А в C# 8 шарп уже стоял на ногах и было время подумать над "новым".
Как бы сам паттерн уже давным давно существует и с разной степенью корявости существует практически во всех мэйнстримовых языках. Разные языки с разной скоростью адаптируют/заимствуют новые и старые идеи. Никто этого не скрывает и никакие срывания покровов не нужны. В чём смысл твоего тыкания пальцем?
C++ сравнения надо отправлять к Rust'у.
Мне в том посте показалось некое противопоставление старых интерфейсов и трейтов. Якобы вон новые красивые фичи vs старье из джавы. Но возможно только я подумал в таком ключе.
Спасибо за адекватный ответ. Было бы здорово, если бы люди чаще признавались в том, что они пытаются спорить и агриться на то, что сами выдумали, а не на то, что происходит на самом деле.
мне тут запятых подвезли, не знал куда девать
Версия покороче: сам выдумал, сам разозлился/обиделся
Если да, то подскажите лучшую практику их использования.
Так когда автоматическое завезут?
Стрим нужно из браузера на сервер, а там разбить по блокам и записать на диск. Идеально было бы если файл на клиенте разбивать на архивы и их на сервер отправлять, но это пока мечты
>Traits
так они же были псевдо типажами и делались костыльно через расширение. Или что-то поменялось?
Нет.
Да, в случае если результат использования метода не очевиден, подписываю что он делает
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/recommended-tags-for-documentation-comments
Документировать всё подряд - бред.
Обычно доку добавляют для публичных классов/методов:
- АПИ методы у контроллеров, которые потом автоматом в OpenAPI (Swagger) доку превращаются;
- АПИ у либы, которую ты пишешь для других.
Там дофига тегов, которые позволяют добавить сильную типизацию в твои комменты, избежать магических строк и уменьшить кол-во печатаемого текста.
Не я выбираю, увы, библиотеки, которые мы изучаем и должны использовать в лабораторных работах.
ааа, студенты! для вас книги и онлайн курсы есть.
Никто нынче голый коннект к БД не делает, только извращенцы и у кого много свободного времени.
EF Core вам в руки.
По существу вопроса. Reader предназначен читать данные один раз и в одном направлении. Соединение с БД - оно должно переиспользоваться. Reader - дёшево. Connection - дорого.
Не хочешь читать данные кучу раз - схорони в объект/кэш.
>EF Core
Не знаю про Core, то тот EF что я видел 6 лет назад был таким тормозным, что писать на нём могли только сайты для школьников и студенческие лабы.
Ты или программист-любитель или в айти по какой-то другой специальности. В программировании мир каждые пол года сильно изменяется. 6 лет - это вообще эра динозавров.
> В программировании мир каждые пол года сильно изменяется.
В программировании ничего не меняется уже лет 20. Клепание говнофреймворков различными дебилами десятками в год, которые живут по полгода пока ими увлекаются другие дебилы и не понимают что это то же говно в новой обертке, это не изменения.
Алсо, у меня нет никаких сомнений что EF Core такое же тормозное говно как сам EF.
lol
Ты не путай хипстеро программистов, которые клепают свои ноды и реакты, и нормальный прогресс.
А то так можно сказать что нихуя не менялось со времен Чарлза Бэббиджа и булевой алегбры - математика та же, принципы тоже.
>различными дебилами | у меня нет никаких сомнений
У "дебилов" сомнениям браться неоткуда.
Уже неделю пытаюсь найти способ получать данные из графического планшета. Нашёл какой-то WintabDN api, но сколько не копался в примере, так и не понял как выводить значение pressure.
Может кто добрый посмотрит и мне-дураку подскажет: https://github.com/vvvv/WintabDN
>Ты не путай хипстеро программистов, которые клепают свои ноды и реакты, и нормальный прогресс.
Где ты видишь нормальный прогресс, расскажи мне?
Бля реакту уже лет 5 или больше и что-то он до сих пор в топе.
Этими рассказами про миллион жс-фреймворков в год программистов пугают как бабайкой.
>Никто нынче голый коннект к БД не делает, только извращенцы и у кого много свободного времени.
Делают в высоконагруженных местах. ORM тормознее нативных запросов.
Тащемта EF позволяет и простой sql код исполнить. А ещё есть даппер.
Вручную контролировать конекшн на низком уровне это я хуй знает зачем может понадобиться.
А что его контролировать? Подключился и плюйся запросами, и результаты забирай.
ручками
хз кто нынче визуальные редакторы использует
>>33192
И простой sql и sprocs и функции можно через EF запускать. И уже как 2-3 года можно LINQ to SQL компилировать. И работает оно в высоконагруженных системах без проблем.
Писать код гораздо быстрее, скорость исполнения практически та же, что и стандартные SqlCommand и SqlReader, а иногда и быстрее из-за встроенных кешей и пре-компиляции. Главное при работе с инструментами - знать как они работают. А то можно и Hello World написать, что он 200 лет обрабатываться будет.
В плюсах если ты хочешь, чтобы AVX инструкции нормально сработали нельзя надеяться на компилятор. Тебе придется использовать интринсики ну и там впринципе много подводных камней с AVX.
>Подключился и плюйся
Ага, и ты будешь на каждый запрос открывать соединение?
Или ты на одном конекшне все свои 100к рпс обрабатывать будешь?
Или напишешь свой пул соединений?
Ор
Есть следующий метод разбиения стрима на n кол-во байт и запись в memoryStream:
int numBytesToRead = 10485760
var countIterations = file.Data.Length / numBytesToRead
int numBytesRead = 0;
byte[] bytes = new byte[file.Data.Length];
Все норм работает, но как только я хочу каждый раз в массив новую порцию считанныйх байтов записать и получается следующее:
....
int numBytesRead = 0;
byte[] bytes = new byte[numBytesToRead ];
Выдает ошибку что массив слишком длинный, хотя file.Data.Length еще больше чем numBytesToRead, но ошибку не выдает. В чем прикол?
Спасибо, уже разобрался. Я думал что надо самому сдвигать в Stream.Read, вот и получался гиганский массив.
Так теперь новая проблема, как правильно разбивать большой файл? Возьмем 55МБ, как его правильно разбить по 10МБ?
По началу нормально, но под конец, где 5МБ остается, я же не могу отправить 10. Как быть?*
Есть вот такая хрень:
Но ведь она будет считать по 10МБ, не учитывая остаток, как ее правильно переписать?
int numBytesToRead = 10485760;
byte[] result;
MemoryStream ms;
long numBytesRead = file.Data.Length;
int n = 0;
while (numBytesRead > 0)
{
var content = new MultipartFormDataContent();
result = new byte[numBytesToRead];
n = await file.Data.ReadAsync(result, 0, numBytesToRead);
numBytesRead -= n;
await Task.Delay(200);
}
Так ты уже ведь считаешь остаток в numBytesRead.
Поэтому вместо numBytesToRead напиши Math.Min(numBytesToRead, numBytesRead)
Бля, точно, а то я уже 3 день сижу этого говно пишу, мозги совсем поплыли. Спасибо еще раз большое
Чуваки, помогите. Как запустить скомпиленный с помощью .Net Core 3 экзешник в Linux? Я в курсе, что можно юзать dotnet CLI, создавать проект, потом его публиковать, и т.п. Но мне это неудобно каждый раз делать. Я просто тренирую синтаксис. Создаю файлик, пишу что-то, компилирую, и дальше запускаю, правда с помощью Mono. Но мне хочется запускать с помощью .Net Core. Вот только не знаю как это сделать, а нагуглить неполучается. Если запускать как линуксовый бинарник, то пишет, что отказано в доступе.
Должен же быть интерфейс командной строки для виртуальной машины. Компилятор же есть, это csc. В доке почему то про это ничего не сказано.
Такое дело есть контроша по шарпам, но ловлю какой то дикий затуп по ней. Может кому совсем нехуй делать и он сможет подсказать какие классы сделать и что в них должно быть реализацию запилю сам.
Какой вообще базовый стак требуемых технологий на стажировку по С#?
Ну там есть непонятки. Но я как человек (не тот) уже имеющий опыт работы на шарпе - по метаниту разобрал asp.net core, http/css/js и jquery. (всё это мне для своего веб приложения понадобилось, ранее с этим практически не общался)
№1 Import React from 'react'; etc...
А вижу и такой синтаксис:
№ 2 class App extends React.Component {
Чем они отличаются? Проблема у меня состоит в следующем: Проект на ASp.NET Core 3.0, на версии 2.2 я использовал webpackmiddleware, но судя по MSDN - его выпилили из ASp.NET Core. Теперь идет подключение jsEngineSwitcher - V8+ChakraCore, где используется не привычный и не удобный синтаксис 2. Как его измнить на 1?
>Книги читай, курсовод.
Те, что в шапке, пойдут?
И что плохого в курсах? Там хотя бы есть задачи, которые надо решать, а в книгах скорей всего такого не будет. А самому себе придумать что-то такое, что требовало бы подумать без опыта работы почти невозможно.
>>34224
>Сочувствую потраченному зря времени.
А что не так с метанитом? Там вроде основные моменты все изложены, разве нет?
Фундаментально не верный подход. Бэк должен быть своим собственным проектом. Фронт с Реактом/Ангуларом/жквери лол - в другом проекте и билдиться/запускаться через всякие npm'ы/yarn'ы.
Тогда и дурацких вопросов о том как сделать франкенштейна и почему он внезнапно не работает - не возникнет.
возможно ты прав, а возможно ты идешь нахуй. Еще не решил. Но мне Женька Впопопов (всеми любимый мутанит) сказал добавлять библиотечку в проект, вместо этих важих ярнов и NPM. Правда дышать как то хуево с этими Class extends, дефолтный синтаксис react js получше будет. Короче спасибо
я пока ходил писять подумал над такой штукой - ведь когда запускается Core проект - то вместе с ним и IIS, и если идет компиляция всех этих свестелок-перелок React-a, то по сути и Node не нужен. А если Front будет отдельно - то это будет запущено 2 сервера - IIS и Node.js. А нужно ли это?
Для компиляции всего этот реактовского барахла нод по прежнему нужен, твои плагины в VS делают всю эту магию подальше от твоих глаз. Проблемы начинаются, когда эта магия делает что-то не понятное и тогда тебе пизда и никакой нормальной доки по этому делу нет и вообще в этих плагинах гора багов и несовместимости с очередной версией реактов.
В проде никаких двух серверов нет. React - статичный сайт (просто горстка файлов), которые могут отдаваться по любому http запросу. В зависимости от твоего хостинга надо будет по разному отдачу этих файлов конфигурить.
нихуя не понял, но очень интересно. У меня ASP.NET Core 3.0 application - он запускается на IIS или Kestrel (если Linux). По сути он как приемник REST Api. В случае, если Front - это обособленная часть, ничего не имеющая с asp.net core апликухой - она должна в чем то собираться и на чем то хоститься. Вот и дальше пошли вопросы - что тогда будет деплоиться, если react - это обособленный проект, который собирается webpack-ом на Node.JS? Блять сложно это все
Видимо долог еще твой путь.
Естесственно твой бэкенд на dotnet core представляет из себя кучу REST эндпоинтов. Принял HTTP request, обработал, отправил HTTP response. Ему вообще по барабану кто там эти запросы составляет и кто и как его ответы читать будет.
React app - это набор статичных файлов и хостить их можно как static website (помнишь в 90е и начале 00х такие были?). JS делает ajax request over HTTP и потом читает HTTP response. Ему также плевать кто там и как принимает его запрос и выдаёт назад ответ. Оба приложения живут в 100% изолированных друг от друга мирах.
Ты начинаешь добавлять всякий синтаксический сахар, плагины/библиотеки для того чтобы эти две технологии выглядели, как будто они живут в одной коробке (а оно нифига не так). Ты и так до конца не понял как эта вся хрень работает, а тут тебя еще больше запутали.
Вообще не важно webpack, хуяк, любой другой сборщик. В итоге у тебя будет index.html, в котором будет root div и подключение нужных js и css. Всё, нифига там больше нет. Ты эти файлы вообще можешь через один из своих REST endpoints клиенту отдать, можешь уложить в папку и дать своему веб серверу (пососать Kestrel там или IIS (который нынче для кора тоже может и даже должен Kestrel вызывать) или твой самодельный http listener) read-only доступ к папке с published www files и он их отдаст клиенту по http(s)://my_awesome_websites.hui/index.html
Всякие gRPC, хуярписи, вэб сокеты и прочие плюшки, которые грозятся стать реальностью с разработкой HTTP 3 (еще 2 не допилили, а уже 3 грозят, лол) тоже живут и функционируют по подобной схеме. Два приложения, каждый в своём мире и между ними - бездна сеть.
По умолчанию csc в линуксе компилирует в exe. При вызове dotnet file.exe говорит
A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/home/user/src/csharp/snippets/'.
Failed to run as a self-contained app. If this should be a framework-dependent app, add the /home/user/src/csharp/snippets/Program.runtimeconfig.json file specifying the appropriate framework.
В винде конечно экзешник можно запустить даже без sotnet, но линуксе пока не получается.
При компиляции в линуксе в dll и попытке запуска, выдает ту же ошибку. Но это компиляция в таргет лайбрари. Возможно если скомпилить в отладочную dll, то заработает. Сейчас попробую.
анонсы что не так? есть 2 POCO объекта родитель и наследник.
наследник наследует от родителя 4 параметра. Когда я кастую наследника к родителю все норм, но когда я делаю вылетает ошибка. Почему так?
Запустить в нём таймер? Что б он периодически проверял некую переменную. Как только её значение изменится (введутся данные из консоли) - то продолжит работу.
я другой анон, появился вопросик, правильно ли я делаю что мой rest API почти всегда отвечает булами с ok в котором true - 200 кодом, 500 при ошибке сервера , в котором false и 404 так же с false. Это про get, put и post у меня в основном с нормальным телом запрашиваемого объекта.
И ещё как быть в таком случае. Мне надо в апи отправить путь до файла, и в апи я его применяю с post и телом, в котором стринг пути.
И последний. Мне нужно изменить состояние бэка, к примеру поменять текущую директорию на дочернюю папку, я беру и принимаю в апи get у которого в заголовке имя папки. Типа такого: "Folders/{name}/change". Так нормально делать? ведь это get и он меняет состояние бэка.
Заранее спасибо.
да я это все и так знаю, я просто думал, что можно обойтись одним IIS. Нахуя тогда все эти либы V8, ChakraCore и т.д. в ASP.NET Core? Если и так все раздельно работает
да и еще, ряд вопросов, которые не оставляют меня в покое. На какой части проходят такие процессы (имею ввиду бэк или фронт):
1. Аутентификация;
2. Логирование (имо бэк, но все же);
3. Кукисы
Спасибо за ответы
Я погуглил-погуглил о остановился на том что тут нужны не таски, а полноценные треды, в случае тредов общаться между собой намного проще
>ChakraCore
Мой ответ - ради изврата. Ну прикольно же - сделали целый js движок, который можно из кучи языков вызывать.
Why use ChakraCore?
ChakraCore allows you to use the React Native framework on Universal Windows Platform. This is incredibly useful for web developers that want to develop Universal Windows Platform apps.
Вы, как я понял, пилите стандартный Реакт апп для обычных браузеров?
Аутентификация и авторизация работают точно также, как если бы ты всё компилировал и хостил все файлы в одном проекте. ЖС запускает запрос к серваку с данными о пользователе, тот проверяет данные и возвращает 200 вместе со всякими токенами/401/403.
Всё, дальше сам выдумывай как эти токены хранить и приклеивать к твоим запросам.
Для логирования есть вагон и маленькая тележка всяких сервисов, которые умеют принимать запросы хоть из консоли. Можешь и свой эндпоинт запилить чтобы логи в файл/бд складывать.
Куки - это часть HTTP request (точнее его headers). Ты запрос можешь хоть в консоли составить и сохранять/считывать данные в какой-нить файлик, обозвать его "кукис", сохранять в него токены, user data, и добавлять эти параметры в свои headers при запросе.
Гугли про AutoResetEvent и его друзей
Вообще чет смотрю мало тредов было по этому языку. По тому же JS уже 150 и по пайтону больше 80, да и на с++ около сотки. Такое чувство, что с# только для игр на юнити используют, лол
Серьезно? Слава Богу, что я этого не застал, иначе бы моя жопа сгорела. Пиздец ненавижу слет нумерации треда. УУУУУХ
По умолчанию он компилирует в платформонезависимый бинарник, а то что ты делаешь - это publish, который собирает под конкретную платформу. О чём тебе и пишут, что ты собрал под не ту платформу.
if(wnd.Focus()) //если удалось получить фокус, значит модалок нет
Вообще это для драгэнддропа файлов в окно, может есть идеи как игнорировать дроп, если есть модальные окна?
вм. он же отвечает за код вью. вью толко, в основном, за гуи и бинд значений
например
фор ( если итератор цикла > количество елементов в списке )
{
если ( итератор цикла == индекс елемента в списке )
return итератор цикла;
в противном случае продолжить цикл
}
рофлишь?
да так должно быть, проблема в том что так сделать не дает потому что мне пишет что ретурн должен быть во всех ветках кода, а мне нужно только в одной! так как на примере, а если елс тогда пусть идет дальше, а он мне говорит что в елсе тоже дожен быть ретурн, а не это не подходит
Я как пользователь твоего чудо кода пишу:
int myVar = YourMethod();
А тут бац! Отрабатывает ветка без рутурна, и что должно быть у меня в переменной?
бросай исключение
суть в том что внутри фор и он ищет из списка елемент с этим интом такого варианта что елемента нет, нет! он есть его нужно только по фору найти а для этого нужно что бы в случае если не нашло фор продолжил выполнятся а этого сейчас не происходит
.NET Framework - всё.
.NET Core - настоящее.
.NET 5 - будет в конце года.
Вся инфа тут - https://docs.microsoft.com/en-us/dotnet/core/
Задолбаешься читать, но там есть все объяснения и ссылки на нужные ресурсы.
Для более лёгкого чтива - https://visualstudiomagazine.com
Чьи ваши? Чёт ты агрессивный какой-то.
Я тебе о том что ChakraCore для UWP (вы его зачем-то для браузера используете, где уже свой JS движок есть). А ты мне что тебе на него поебать.
я кажется писал выше, что это Евгешка Мутанитович Попов посоветовал такую глину месить. Мне даже лучше сборщиком за пределами сборки .NET-а это компилить
нет не выпялюсь, ведь у меня лапки
Будешь тогда работу по переписыванию и говно поддержке legacy искать. MS прекратили поддержку, всякие сервисы и облака больше не будут с ним работать, всякие гейм фреймворки будут тебе не доступны, документашку будет искать всё сложнее, нужно будет танцевать с бубном в новых версиях ОС, IDE (VS, VS Code, Rider), не будет доступна работа из под всяких линухов и аймаков.
В плане использования core и framework СИЛЬНО отличаются, надо будет переучиваться потом.
Какой язык для тебя родной? По-русски у тебя не получается излагать.
>варианта что елемента нет, нет!
>если не нашло
Ты уж определись как нибудь.
>В плане использования core и framework СИЛЬНО отличаются, надо будет переучиваться потом.
А чем отличаются в основном?
если не нашло в конкретной этой итерации, пошло дальше к следующей, и так пока не найдет, а родной для меня Литовский, но причем тут это?
>причем тут это?
Сложно понять, что тебе нужно. Дай лучше код на шарпе и пример данных и ожидаемый результат.
ахуеть вопрос, там тыщи страниц исписали в доках и во всяких новых книгах, а тебе тут в два предложения объясни.
https://github.com/dotnet/core - сиди сравнивай старое АПИ с новым.
P.S. Я тебе уже писал, бросай исключение после цикла. Это ты думаешь, что элемент обязательно будет, а кто-то может передать коллекцию без элемента.
>.NET Framework - всё.
Нихуя не всё. Остальную парашу копирастическую - просто портируем, делов-то.
>>36347
а так я уже сделать через list.Contains https://www.dotnetperls.com/list-contains
просто не понимаю почему меня троллить начали, вроде нормально же спросил, и даже псевдокод написал, злые вы...
>>36347
а так я уже сделать через list.Contains и break https://www.dotnetperls.com/list-contains
просто не понимаю почему меня троллить начали, вроде нормально же спросил, и даже псевдокод написал, злые вы...
>>35850
>for(int i = 0; i<element.Count; i++){
> if(i == needed_element_iterator){return i;}
>}//.................
Блядь, блядь, ну вот нахуй тебе возвращать итератор цикла, если тебе заведомо известен индекс элемента в списке, и тот факт, что он должен быть равен итератору цикла? Верни его, рофл сукаблядь...
но мне итератор не известен заведомо, в списке элементы расположены в случайном порядке, и мне нужен индекс того элемента у которого айди равно итератору адйи елемента не равно индекс елемента
тоесть должно быть так
for (iterator < lements.count){
if(iterator == elements.id){
return elements index ( в нашем случае итератор}
else{ все хуйня давай сначало но с следуйщим итератором}
}
elements[index] быстрофикс
Блядь, напиши свой код в https://rextester.com
и пока его пишешь, прежде чем отправлять его на борду,
хотя-бы посмотри его внимательно. Может быть сам додуплишь.
елсе айди - пиздец как нечитабельно, ты бы ещё про инкапсуляцию интерфейсов асинхронных тут позаливал, на русском, и без кода.
У тебя return блочит дальнейший код в цикле.
Чтобы этого не было, сделай:
>for(бла-бла)//твой маня-ёба-цикл
> if(бла-бла){return что_надо;}
> else{continue;}//блядь
>}//конец твоего мозго-ебучьего цикла
Ещё один сверхразум
При чем тут континью лол
Пиздец уровень шарпотреда 2020, вы же все троллите тут так, да?
Лучше метки юзать.
>hui:
>for(бла-бла)//твой маня-ёба-цикл
> if(бла-бла){return что_надо;}
> else{continue hui;}//блядь
>}//конец твоего мозго-ебучьего цикла
блять да я просто код написал на шарповском, для примера, ты тролишь или серйозно?
и проблема у меня была именно там где ты показал, типа если так то возвращай а если нет, вот и компилятор ругается, он не дает сделать что-то типа если нет продожить фор, он хочит что бы и там и там был какой-то ретурн
Компилятор хочет ретурн int,
просто потому что метод с типом int должен возвращать int,
и без return -1, он не возвращает ничего, в некоторых ветвях,
в частности, в случае выхода из цикла, по его завершению,
и/или не наличия ни одного элемента из условия for.
Поэтому, компилятор и ругается.
Индекса -1 не существует у массива, значит можно использовать его как крайний вариант.
И многие функции возвращают -1, например:
string.IndexOf(char) == -1//если char не найден.
stream.Peek() == -1 // если данные в потоке нельзя уже прочесть, и так далее.
Чтобы излагаться хотя-бы заебато.
Да я так и понял, что его доебало писать. Хохол, походу, ещё и с Харькова. Я был в Харькове - весь Харьков обхаркал.
Анон, Я прозрел! он не просил второй ритурн в елсе, он просил второй ретурн где угодно, в том силе вне фора! да это именно то что мне надо было! СПАСИБО АНОН!
https://rextester.com/edit/OWJ57140
да, метод либо не возвращает ничего, либо обязан вернуть значения из всех возможных путей исполнения метода.
по ссылке рабочий код, но я так и не понял кому такая херня может понадобиться.
Сьььь-ссьььь-сёрб. Шустренько выпил энергетик Monster...
Хрысь! Разорвал банку.
Бам-ба-бабабам-м-м. Выкинул её...
Немного подумал... И запилил из неё - усилитель wi-fi, лол. Пикрил.
Сука, как же у меня от вас бомбит! Кто вас блядь на работу принимает! Откуда у вас такая страсть к индусскому коду? Что за ёбтвоюмать у пидоров, пишущих и проверяющих такой код! Или это перекатившиеся пхпэшники, у которых норма обмазываться дерьмом и радоваться этому?
да что не так то, если что я работаю на себя, пилю себе свою игру, а если есть предложения как улучшить код так я буду рад услишать адекватный совет, ты только это... не бомби, вот выпей пива лучше (безалкогольного)
сделай сортировку просто https://stackoverflow.com/questions/289/how-do-you-sort-a-dictionary-by-value
и возьми самый первый
Взял пива (алкогольного). Я испугался, что это код компании. Хотя чего там, в компаниях всё еще хуже потому что чуваки такие - ДЕАДЛААААЙН БЛЯАААДЬ и начинают пилить говно. Сохраняют себе n времени сейчас и увеличивают время разработки на n*n в ближайшем будущем.
Для себя можно как угодно пилить.
но ты это, если все таки есть действительно совет какой-то то я правда рад услишать, я ньюфег в программировании, вот учусь понемногу, любой совет мне в помощь будет
Ясен красен глубоко копать ни времени ни формата двача не хватит. На тебе несколько общих советов.
0. Теория разбитых окон. Не оставляй после себя мусора, увидел - убрал. https://ru.wikipedia.org/wiki/Теория_разбитых_окон
1. SOLID - код должен следовать этим принципам. Особенно никаких new SomeExternalTool() посреди класса не должно быть (Dependency Injection). Нужные инструменты должны передаваться в конструктор и конфигуриться во время стартапа. https://en.wikipedia.org/wiki/SOLID
2. Никаких дубликатов кода (кроме особых случаев)
3. Метод не должен отнимать у тебя более 5 сек чтобы понять что он делает. Именуй всё граммотно, выдерживай общий стиль кода (добавь уже линтеров, в дотнете они называются Analyzers). Выгребай логически завершённые куски кода в свои классы/методы.
Класс не должен отнимать у тебя более минуты чтобы понять нафига он нужен и что он делает. Проект не должен отнимать у тебя более 5 минут чтобы понять как он устроен, что он делает и как он это делает.
4. Если ты изменил код в одном классе и это повлекло за собой изменения в куче других классов - ты настряпал какой-то херни. Если ты изменил код в одном слое и это повлекло за собой изменение всех других слоёв - выбрасывай этот проект в мусорку и начинай сначала.
5. Избегай повторных итераций, выгребай все нужные данные во время первого прогона, используй кэш, посмотри какие из существующих базовых дата структур могли бы облегчить твою задачу (решай задачки на сайтах типа leetcode.com). Для частого быстрого доступа используются HashSet и HashTable/HashMap (это базовые общие структуры, доступные в любом языке под своими именами).
Ты знаешь что такое итератор?
Прекрати называть функции, методы, Аллаха не по конвенту, если несколько слов то каждоеСледующееСБольшойБуквы, а_не_ебучими_нижними_подчеркиваниями. Методы и свойства классов начинаются с большой буквы, локальные переменные с маленькой, единственное место где приветствуются нижние подчеркивания это в начале имени приватных полей классов, типо как private int _foo.
Что за "contex"? Презики что-ли? Ты имел ввиду "context"?
сорри, немного сгорел от увиденного, добра тебе. На работе за такое будут пиздить ссаными тряпками, так что не обижайся.
Ох, вот если бы все так было.
Ты перестанешь записывать в темп первый элемент при каждой итерации.
Я ананас, который выше про SOLID и сломанные стёкла написал. Хоть я пивом и откачивался, но в защиту новиса скажу, что конвент каждая компания/команда для себя сама выбирает. Некоторые любят camelCase, некоторые PascalCase, некоторые snake_case и всякие гибриды, которые настраиваются через линтеры и больше о них голова не болит.
Мы для методов/публичных свойств используем PascalCase. Для приватных переменных _camelCase. Тесты я своих заставляю через snake_case обзывать потому что они имена должны отражать суть того, что тесты делают, из-за чего они становятся длинными и через подчёрк читать удобнее: Given_request_with_expired_token_controller_should_return_401
>Dependency Injection
а если у меня есть какая-нибудь фабрика, я же могу ее статической сделать? что мне мешает?
>повлекло за собой изменения
хорошо. из недавнего случая, был у меня json store, который записывал по ключам данные в json. Ключи у меня enum везде используются, если я захочу рефакторить и поменять имя ключа, это сломает всю систему. Как быть?
Можешь, если весь код, где ты эту фабрику вызываешь, у тебя получится покрыть юнит и интеграционными тестами. Для это всякие статические Properties навешивают lazy loading/Func/Action https://docs.microsoft.com/en-us/dotnet/api/system.lazy-1?view=netcore-3.1.
Надо еще помнить, что статические фиговины должны быть thread-safe на случай, если у тебя есть вероятность вызова куска статик кода 2+ потоками одновременно. Чтение - безопасно (большую часть времени). Изменение - опасно.
Спасибо. а то у меня blazor приложение уже все в DI, штук 10 точно
И если можно ещё вопросик. В чем разница между IoC и DI. DI это же частный случай IoC, не?
10 классов засетаплено в DI? У нас сотни.
Так и быть, погуглю за тебя: https://stackoverflow.com/questions/6550700/inversion-of-control-vs-dependency-injection
Но с тебя пиво.
Придумал enum -> начал везде использовать -> выдуманные названия не подходят -> пришлось названия менять. Хреново в начале над названиями думал (одна из самых сложных задач в программировании - придумать хорошее имя), теперь расплачивайся.
Но вообще имя переменной через Refactor в любой IDE запросто меняется по всему проекту и к изначальному совету плохо относится. Под изменением имелась ввиду логика приложения.
В остальном - надо знать конкретные условия и бизнес задачи, чтобы понять как сделать так, чтобы при изменении имени переменной не рушился весь карточный домик. Нафигачил в Persistence layer непонятных имён и теперь пришло озарение? Расплачивайся и пиши кучу скриптов, чтобы править данные.
спасибо большое ещё раз. не знаю какое ты любишь, но взял оба
рефактор не всегда хорошо работает, даже resharper. Так я обосрался сделав ключи через enum? Так как придумывать хорошие и меня для методов и т.п.? Соглашение о наименовании я уже наизусть знаю и этого вообще не достаточно, где взять инфу как правило давать имена?
Нахуя у тебя итератор если у тебя он никак в цикле не используется? Выполнить N раз код? Но он же ничего не меняет, просто проверка.
Нахуя return arr[-1], любишь аут оф бондс эксепшны ловить?
Пиздец, я уже не говорю про остальной код, до меня обоссали
Ты хоть немного блядь почитай что ты делаешь, а не хуярь не глядя.
Вместо простого прохода по масииву за O(n) делать сортировку в лучшем случае за O(nLogn). Лови класс.
Но если нет особых указаний, то лучше придерживаться общепринятого стандарта. Особенно, если показываешь людям и очешь помощи.
мимокрокодил
>>36685
он до ретурна с -1 никогда не должен дойти, а если дойдет то должен быть ексепшен который я ловлю потому что здесь явно тогда что-то не так, насчет итератора не понимаю почему народ привязался к нему, итератор от слова итерация, а итератор управляет итерацией, является его переменной, новый цыкл фора это новая итерация, потому итератор, потом обычно пишут обычную маленькую i но это просто сокращения от итератора, а то что насчет конвенций меня обоссали так это вообще очень странно, у всех свои конвенции откуда я должен знать как именно в комнпании у анона заведено, я знаю только одну действительно важную конвенцию, это называть переменные с маленькой буквы потому что можно попасть
в лажу иначе и я попадал, а от того что подчёркивания или нет как можно попасть в лужу?
епт, а это разбить ни как? у тебя же четко виднеются 3 не связанных блока, просто перенеси их по разным методам и все
убери get_random_stage. Ты откуда выполз? Просто переименуй RandomStageBy. и так понятно что метод что-то возвращается, параметры так же переименуй в userId. Может ещё что найду
bool параметр переименуй в isTest или подобное
Нет, если кидаешь эксепшен, то ловить его должен код уровнем выше (или не ловить, если нормальная работа дальше невозможна). Какой смысл бросать и сразу ловить? Проще тогда уж логику из кэтч вставить вместо бросания.
>насчет итератора
Под итератором в шарпе обычно имеется ввиду IEnumerator
>насчет конвенций меня обоссали
Да, потому что читая код на каком-то языке люди привыкают к его общепринятому оформлению. И читать код на шарпе, написааный буд-то это жс или вобще солянка, неприятно и трудно.
> откуда я должен знать
пользуйся общепринятой
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions
используй var, при инициализации листов и так понятно что это лист, так что смелой меняй на var
random можно сделать как параметр класса и просто использовать его в классе не создавать каждый раз новый рандом
а это сработает? просто у меня город маленький
связаны тем что берут друг у друга какие либо параметры, объекты? Так в чем сложность перенести здоровый кусок кода в отдельный метод и возвращать нужный объект?
ну вообще да ты прав можно по разным методам разнести, но я не люблю когда многа методов, потом долго искать нужный тебе метод в списке, да и разве имеет это какое либо значение кроме читабельности?
тестирование. да и скорее всего эти методы в одном классе будут, а что бы не искать нажимай shift click на имя метода и vs перейдет к реализации метода.
Читабельность тебе будет нужна самому, через n время, когда твоя программа начнет расти
а вообще листай гит, смотри как реализованы те или иные библиотеки. Сравнивай разные реализации, читай msdn. Самый главный ресурс, если чего-то нет а интернете, есть на msdn. И никогда не копируй код, переписывай в ручную обдумывая каждую строчку, почему зачем и как это работает
по началу ничего не будет понятно, особенно десятки дочерних классов и т.п. Но тебе важнее набить базу, а как назвать метод, а как лучше написать.
Программирование это очень творческий процесс и если у тебя нет чувство прекрасного и внутреннего перфекциониста, то через анальную боль придётся этот навык развивать. И как сейчас через ссаные тряпки слушать недовольствия и плевки в сторону твоего кода.
Ты когда книгу читаешь, тоже любишь, если абзацы по разным страницам разбросаны, и надо туда-сюда листать постоянно?
>рефактор не всегда хорошо работает
Если ты используешь инструмент (не важно какой), ты обязан знать как этот инструмент работает и ты должен проверять его работу, а не слепо доверять ему. Тот же Re# выдаёт диалог со списком изменений, который он сейчас применит.
>Так я обосрался?
Не знаю, я о твоём проекте только из 2х приложений с двача слышал.
>как правильно давать имена?
никто этого не знает, куча проб и ошибок и со временем начинаешь свой стиль именования вырабатывать, который просто работает и команда к нему привыкает. Можно дать имена и небольшие методы сторонним людям почитать и спросить, как они их понимают за первые 10-20 секунд.
Ты же не сказал что у тебя там за хранилище данных, json store ничего не говорит, может там документо-ориентированная ДБ, может ты json в sql хранишь.
А код не книга, но в тех.справочниках часто приходится прыгать со страницы на страницу. Если методы названы нормально, то тебе не надо в него лезть, чтобы понять для чего он нужен. Ты когда в коде видешь File.WriteLine(), ты же не лезешь на referencesource смотреть что там и как по цепочке вызовов.
Не бойся, тут могут понапечатать всякой грязи, тебе от неё ни холодно, ни жарко. Зато кто-нибудь полезные комменты выдаст.
да писали уже ,только я не пойму почему так строго к этому относятся, ну есть кресочка, и что? это ни на что не влияет в данном конкретном случае
если будет нул может не быть ексепшина
Так себе вариант. В большенстве случаев это просто заложить мину, на которой потом стелс-пихотинец подорвется кто-нибудь словит NRE. В новом шарпе даже костыль в виде нотналаблреференстайп завезли.
Меня больше всего ConecxtDB зацепил. Инструменты для работы с внешними (не подконтрольными тебе) ресурсами должны передаваться в класс уже готовыми к использованию - DI.
Проиграл
>строго к этому относятся
Вот если так писать "для себя", то так и привыкнешь писать. И уже тебя будет воротить от имен в проекте. А поверь, зайди на гит, все проекты на шарпе написаны Camel/Pascal case. И ты просто не сможешь воспринимать наименования
Все лучше чем себе в ногу стрелять с гарантированным аутофрейнджем лол
Включаешь nullable reference types и возвращаешь Result? вместо Result.
Одно дело документированный File.WriteLine(), который светлейшие архитекторы придумывали на века, из расчета, что его будут видеть сотни тысяч людей, а другое — какое-то название на отъебись, придуманное за 10 секунд, которое через полгода обросло портянкой аргументов из флажков и уже перестало отражать изначальный смысл.
Целые книги и конференции посвящены этой теме. В мелком проекте с одним девом, который не будет использоваться 1000+ пользователей может и никакой.
Проблемы начинаются, когда кодобаза разрастается, когда для производительности приходится выбирать новые БД, когда твоя БД схема меняется и внезапно придётся вместо одного persistent слоя переписывать всё подряд. Для производительности и разруливания concurrent requests можно один dbContext несколько раз переиспользовать. Плюс new DbContext хреново покрывается тестами.
Примерно как и его код.
ты понимаешь что там должен быть гарантированный аутофрендж, если скрипт доходит до того ретурна он должен вывалить ексепишн такая была идея
двачую
ну тут ты прав. но разве это достаточная причина что бы взять и обоссать? я думаю это немного не адекватно...
что такое интерпрайз?
Есть данный проект: https://github.com/TwoChisel/TeleCloud
Можете сказать что и где не так с проектом? Пилю уже несколько месяцев. Глаз весь глаз замылился, уже просто не вижу проблем.
Если будут какие-либо серьезные предложения, ошибки, прошу кидайте их в issues.
Чтобы запустить сие чудо, клонируете, запускаете сервер, а потом клиент.
Если кратко о приложении. Оно каталогизирует файлы в личных сообщениях в телеге. Там папки, переименовывание файлов и т.п.
Документации нет, но вы держитесь. Пока в процессе, надо еще дописать документацию для свагера
Заранее спасибо.
> какие поля у функции будут, если внутри результат - анонимный тип
Какие поля будут у возвращаемого функцией значения, если внутри результат - анонимный тип
немного ясности вношу
Не не надо пытаться скрыть проблему. Если айтема нет а он точно должен быть, надо сказать, что данные хуйня и сделать харакири.
Но это ж будет тупо. Класс чисто используемый в одном месте и нужный просто чтобы поместить данные из полей другого класса в себя. Неужели нельзя как-то так написать:
IEnumerable<{int: ID, string : username...}>? Ну, т.е. я знаю что нельзя конкретно так, но может быть есть аналог? Просто блин, в JS, который пришлось освоить, такую фигню делать можно и это оооооочень удобно, а тут вроде как есть кортежи, но asp.net core не умеет их нормально из коробки собрать в json чтобы ответ отослать, а тащить что-то откуда-то не хочется, на и пилить свой серелизатор кортежей в json - тоже. Ну да ладно, просто оставлю object'ами, работает же, ну и хуй с ним.
Есть способ, но я тебе его не скажу, потому что он не для этого dynamic
>Но это ж будет тупо
Нет, шарп объектно ориентированный, так что делай очередной объект и не ной.
> тащить что-то откуда-то не хочется
С возрастом пройдет. Наверно еще и приложения в один файл собираешь?
>пилить свой серелизатор кортежей в json - тоже
Обычно два пути: или тащить готовое или пилить свое, привыкай.
>просто оставлю object
Потом рефлексией данные вытягиваешь?
Ньюфагу вообще хорошо бы с сишечки начинать, чтобы понять на кой хуй нужны другие языки. Но если совсем ньюфаг, то лучший путь - блокнот с подсветкой синтаксиса и сборка ручками. Так ты будешь понимать, что ты вообще делаешь. Мне вот было неприятно, когда я осознал, что не знаю как подключить свою же библиотеку без удобных инструментов из-за этого ускоренно на пару месяцев перескочил на описанный выше метод.
Ну и даю у VS Code никаких фреймворков из коробки нет. Изначально просто удобный редактор. То что ты его в IDE можешь превратить - другой вопрос. Фреймворки и прочее в студии. Вот.
Посмотри на DTO pattern. Он нужен для пересылки всяких request/response объектов. Поскольку всё строго типизированно, то кучу ошибок можно отловить во время билда и можно запилить нормальную валидацию принимаемого объекта.
Ты json наверное через контроллер отправляешь? Если будет нормальный тип данных, то всякие Swagger'ы (OpenAPI) смогут разместить документацию о возвращаемых объектах, что облегчает задачу по поглощению твоего АПИ.
>Ньюфагу вообще хорошо бы с сишечки начинать
Разве шарп не сам по себе легкий язык, как говорят многие?
Он кажется легким. На деле там куча подводных камней. И вот сишечка, которая вроде как простая, но имеет миллион и один способ выстрелить в ногу на ровном месте, позволяет потом легко эти камни находить. Ну и опять же, многие вещи что ньюфагу кажутся сложными в шарпе, после сишечки будут казаться вполне тем чего не хватало, если не забъешь после нее на все это дело.
Та можно и без нах. Просто не попробовав хотя бы hex-редактор на сях сделать, решения более высокоуровневых языков будут с большим скрипом доходить. Ну, или я и все мои знакомые шарписты такие тупые, но нам в ВУЗе шарп начали на первом курсе давать и все это казалось жутко непонятным, а на втором как раз си дали и будто озарение почти у всех случилось, после того как понимаешь, на кой вообще все это надо, попробовав сделать рендер и компилятор на чистых сях.
Во всех языках будут переменные, функции, работа с CPU и RAM. Во всех языках будут одни и те же базовые типы данных и дата структуры. Во всех языках будут работать одни и те же алгоритмы. Из всех языков есть доступ к стандартым АПИ (системные, сервисы, библиотеки).
Главное смысл понять, дальше особо не важно какой язык.
Ну, это да. Но когда от тебя куча вещей что под капотом происходит неявно, ты просто не понимаешь как оно все работает. У шарпа, в этом как раз проблема. Ты можешь делать сразу какою-нибудь фигню на формах и даже не понимать, почему оно не работает или работает не так как ты думаешь, а таки сделав что-то не понимать что оно на самом деле делает и, соотетственно, в случае какой-то хуйни не сможешь пофиксить быстро. В этом плане как раз пописать на сях сильно помогает, хотя бы чисто для того чтобы в общем понимать как компьютер работает что что на самом деле делает программист. Опять же, стандартные проблемы больших проектов(ну или хотя бы средних) встретить и понять, на кой вообще это ООП сдалось и почему его сейчас, при всех минусах, остается стандартом для индустрии и т.д.
Тогда для этого нужно явно кинуть ошибку, а не провоцировать ее искуственно
А что тебе не нравится в символе подчеркивания? Ты попробуй там пробел напиши или точку...
Всё-же лучше так:
int lower_index = (list.Any() ? list.IndexOf(list.Min()) : -1);
Вернёт значение даже если список - пустой.
И никаких циклов и методов не надо.
По крайней мере, это лучше чем вызов Contains на каждой итерации.
Представь, что элементов в списке - миллиард, и наименьшее значение 999,999,995, остальные - повторяются находясь в диапазоне от 999,999,996 до миллиарда. Наименьший элемент со значением 999,999,995 - находится в индексе 999,999,999.
И вот тут-то - твой for с Contains интенсивно отсасывает.
Так даже жс-еры не делают. Зачем кому-то там писать пробелы или точки, еслиЕстьОбщепринятыйКэмелКейс. Все таки когда уже прочитал тонну кода, такие инородные для язвыка вещи вызываю дискомфорт и отвлекают на себя внимание.
>>36383
Это какой-то треш завязываться на положение элемета в коллекции. Нужен доступ к элементу по айди, делай словарь у него поиск по ключу O(1).
>>37644
Так там по "итератору" и в Ани и в ИндексОф и Мин. Ты можешь свой поиск вынести в метод и сделать все за один проход.
Contains, Any, Min и indexOf для массивов и списков выполняются за O(n), потому что начинается линейные просмотр всего списка с начала. Отсасывают все методы одинаково.
List и прочие IEnumerable не гарантируют последовательности, в которой сохраняются элементы, поэтому нужный элемент может находиться где угодно.
HashMap/HashSet (в C# есть Dictionary) выполняет Contains за O(1), т.е. сразу, без перебора. Эти структуры данных нужны когда чтение данных происходит намного чаще, чем запись.
>List и прочие IEnumerable не гарантируют последовательности, в которой сохраняются элементы, поэтому нужный элемент может находиться где угодно.
Лист гарантирует, иначе нет смысла в методах Sort, Insert etc. А вот словари, хэш-таблицы по понятным причинам нет.
Я всегда советую придумать проект и его реализовывать. В процессе сам все поймешь без всяких книг. А книги забываются быстро. Но вообще, бери любую, где есть упражнения и вопросы для самопроверки, это лучший способ что-то учить так чтобы оно не выветрелось через 10 минут после прочитанного.
>Если порядок элементов гарантирован, то для этого существует бинарный поиск
Бинарный поиск работает только для отсортированных коллекций.
Мне надо сниффить из нетворка скидку на товар и купить его, если скидка больше 32%, чем можно это сделать?
Просто принимай все это как данность, а не думай. Решай этими инструментами свои задачи и все само понятно станет. Срсли.
Тогда лучше сразу использовать SortedList. Добавление элемента за О(n) и поиск за O(Logn)
Да как мне в принципе кодом зайти в нетворк и найти там чё-то, я просто вообще ламер в проге
Ну, если ты про шарп. То тут вариантов куча. Самый простой для нюфага - https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1.
Для парсинга html есть куча готовых решений. Регулярки - рофл. Но, при желании можно и ими.
Спасибо
Как ваш ебоманный веб апи разобрать, нихуя сука не понятно
Так интересно иногда подобные вопросы слушать. На работе обсуждаешь, и думаешь "какой хуйнёй я занимаюсь, вот есть же у людей нормальные сложные интересные профессии, а мы тут в бирюльки играем". Для нас это всё как 2+2 давно и никаких сложностей нет, коллеги тебя с полуслова понимают, начнёшь объяснять концепцию - посмотрят как на дурака, потому что это давным давно всем известно.
Но потом попадаются люди, которые только начинают влезать в профессию или еще начинающие (1-3 года) и ты с ними пытаешься так же как и с коллегами, а на тебя моргающими глазками смотрят. Думаешь, ну ладно, щас на уровень ниже спущусь, объясню концепт, на котором должен наш разговор строиться, и мы продолжим. А оказывается, что чтобы понять концепт уровнем ниже, надо еще несколько концептов объяснить, на которых строится тот, который уровнем ниже. А потом еще и еще. И можно так целую неделю разговаривать и так до дна и не дойти. И приходится отправлять чувака изучать азы и просить вернуться к разговору эдак через годик.
И ты такой думаёшь: ёба, или люди отупели, или ты реально ко всей этой сложноте за годы так привык, что оно тебе как детский сад кажется.
Тупой тот, кто ты. Дж.Стейтем.
Сап, шарписты. Задали тут домашку на карантин, не получается доделать.
Суть проги проста: с помощью виндовс формочки сделать программу, которая по нажатию кнопки отрисовывает нечто, некоторый элимент, в специально отведенной для этого области.
Дальше прога будет усложняться.
У меня есть кнопка баттон, есть выделенная область, выделил с помощью контейнера panel. В самой панели, при ее инициализации, у меня получилось создать объект и отрисовать его. Но как это сделать не в самой панели при запуске программы, а по щелчку на баттон - вообще не понимаю.
С меня как всегда.
Какой ты вообще объект создаёшь? Нихуя не понятно в твоём тексте, проясняй и тащи свой код.
Вот код Формы: https://pastebin.com/jt0mDTqM
Вот код класса Star, чей экземпляр создается: https://pastebin.com/jRF9PgMe
Пик - так выглядит формочка.
Проблема: Нужно, что бы звезда отрисовывалась по клику на кнопочку "Create sun".
Не знаю, как это сделать.
В конечном виде, программка должна принимать от пользователя характеристики звезды и планет, отрисовывать их макеты в заданном поле и давать возможность посчитать какие-нибудь штуки, например, расстояние от конкретной планеты до солнца, силу притяжения, которая действует на то или иное небесное тело и т.п.
Как-то так: https://pastebin.com/LrH62ggA (из panel1_Paint код надо убрать, разумеется).
Вот только чем тебе это поможет? Судя по твоему коду, ты даже азов не знаешь.
>>38510
>>38567
Ладно, решил забить на детали, подключил базу по статье в документации, все работает.
Где теперь дешево впс арендавать, чтобы в более реальных условиях все затестить? Предложений то куча, и я хз, что мне выбрать, чтобы потом, при возникновении косяков, я знал, что это мои косяки, а не они там за условные 250 рублей мне говно вместо услуг оказывают.
WinForms - всё
Azure на год хостинг бесплатно даёт. Там инструментов, которые в бесплатный пакет входят, более чем достаточно для твоего проекта.
App Service, DB (Sql Server, Postgres, можно вообще In-Memory для тестов), аналитика с логами.
>в более реальных условиях все затестить?
>Год то закончится рано или поздно.
Чё у тебя там за многолетние тесты?
Тесты, разумеется, не многолетние я надеюсь, просто смысл мне все тестировать в облаках, если потом я все равно ими пользоваться не буду (ибо дорого)?
Код и конфигурацию то будешь одну и ту же закидывать. Оттестишь, узнаешь что твой код норм работает, потом точно сможешь хостинг обвинять, когда в дешёвый впс переедешь.
Так там же (на серверах) закидывать тоже нужно уметь, администрировать все это дело штоб работало. Как я смогу хостинг обвинять, если я, может быть, буду неправильно настраивать сервер?
>>39742
>>39705
Это не вопросы. Это ёбаный в рот какой-то.
Причём тут asp.net и домен и локальный хостинг? Как эти 3 вещи вообще зависят друг от друга? Хуёмаё, иди читай как DNS работает! Потом как работает web server. Asp.net тут вообще не причём.
Razor vs API - ты реши чё тебе надо. То ли тебе REST API, то ли тебе UI, то ли тебе и то и то. Причём тут MVC вообще? MVC - это про стукрутур проекта. Может тебе вообще MVC не надо. Я понимаю, что в названии фреймворка эту аббреиватуру используют, но тебе надо от неё абстрагироваться.
Про майнкрафт - выпились плиз.
Этот дебил из Майнкрафта не только этот тред засрал кстати
Вкатывальщики совсем ебанулись. Чем дальше к сингулярности тем охуевшей вкатчики.
Зависит от того, что за программа, разумеется. Одно дело переписать формошлёпский клиент для работы с данными из БД, и совсем другое, например, какой-нибудь рендерер сложной хуйни с дикими матмоделями.
Строкой считается 255 символов, а не перевод строки.
>Причём тут asp.net и домен и локальный хостинг? Как эти 3 вещи вообще зависят друг от друга?
- Проект на чем? На ASP.NET Core
- Где хостим? На локальной тачке
Что тебе блять не понятно? DNS я знаю как работает, как и web server
>Asp.net тут вообще не причём.
понятно, у тебя проекты .NET-та на апаче или на nginx крутяться? Выебщик хуев, тутор лучше скинь какой ни будь, а не выебывайся
ничего другого от такого дауна и не мог ожидать
я думаю стоит. мне в целом нравится этот язык. и это главное. думаю если погонишься за большими деньгами на нелюбимый язык, то тебя остаебёт и ты быстро выгоришь.
если просто нравится кодить - конечно стоит, если хочешь еще копеечку заработать - думаю стоит задуматься
Так а разве на си шарпе нельзя копеечку заработать? Я глянул вакансии, джунов ищут - норм. и притом не как на Java в 99.9% в требованиях знания сахарка из спринга с аннотациями, а вполне так в разные области можно попробовать. даже где-то видел, что формочки шлепать можно.
я бы копеечку на другом зарабатывал, но раз ты видел вакансии, да еще и джунов - то вперед и с песней. Потом поплачешь расскажешь, как все прошло
TS оказался нужнее шарпа. А что, удобно, на реакте с нодой сайтик набросал и готово тестовое. А это учить 2 языка, еще и там фреймворк, и там асп нет.
да, это самописное, но шаблон популярен, и не сложно гуглиться
https://pastebin.com/HXJUXF0Q
Может, с типами данных что-то не так? Вроде в комментариях на сайте все через double делали.
https://ulearn.me/course/basicprogramming/Praktika_Protsenty__6cc09002-9973-4328-a31b-c7343f8c6b5d
Это давно было.
Это не от конвеншена зависит, а от твоих целей. Если нужно использовать новое значение, то ++x, если старое, то x++
>Если нужно использовать новое значение, то ++x, если старое, то x++
У тебя признаки рака мозга, обратись к врачу.
Имел малый опыт по разработке Java приложений под ведроид, ну если это делать на C# по ощущениям будет тоже самое?
Вот допустим приложение под 4 ведроид может работать на 7, есть какая-то совместимость у версий ведроида???
только ойти долбоебы бегают и кричат на каждом шагу, что они 300кк зарабатывают
Я же серьёзно спрашиваю
Подсобите в данном вопросе, господа, хочу дальше по сайту шагать.
>А что, удобно, на реакте с нодой сайтик набросал и готово тестовое.
И миллион школьников, размышляя так же, набрасывают сайтик на реакте с нодой и идут конкурировать за зарплату в 20к. А вот в ASP школьники не могут, поэтому мы по 80к на первых работах получаем.
>double: хранит число с плавающей точкой от ±5.010-324 до ±1.710308 и занимает 8 байта.
Хз, конечно, но вряд ли это может дать погрешность до 3 знака после запятой...
Есть код: https://pastebin.com/6rta9mzT
Есть интерфейсс, пик2. И есть задача с контрольными значениями, пик1. И вот результат "Результат U = -40,6306940893479". Подскажите, что я делаю не так? Где я проебался?
Окей похоже мне не хватает знаний маразматики, я не уверен. Я думал да. Но как это должно выглядеть в коде, если это не так ?
*математики, быстрофикс
Всё я понял, написал
double b = (Math.Asin(z)* Math.Asin(z) - Math.Abs(x - y));
но до сих пор не понимаю в чём разница, с
double b = (Math.Pow(Math.Asin(z), 2.0) - Math.Abs(x - y));
Нет я нихуя не понял, это одно и тоже
Мань, почему еще здесь а не в гугле с запросом отличия префиксного инкремента и постфиксного?
И до первой может. Они в памяти так представлены, тут не в количестве цифр после запятой дело.
Это же ты уже которой пост горишь от незнания этого, ты не спрашивай, ты сразу учи и в следующий раз не обосрешься.
Приятель, у тебя провалы в памяти? Мы вроде с тобой уже установили, что возвращаемое значение мною не используется, соответственно преинкремент и постинкремент функциональной разницы не имеют. На что ты заявил, что использовать инкремент и не считывать возвращаемое значение — признак говнокода. Я такому заявлению несказанно удивился, ведь я могу накидать тебе подобных примеров использования инкремента хоть из кода самого дотнета.
И тут у тебя случился откат и ты снова взялся повторять про эту разницу, и что никто здесь кроме тебя якобы этого не знает. Так вот, что с тобой не так, в чём твоя проблема? Зачем ты продолжаешь как одержимый повторять одно и то же, что никто здесь даже не обсуждает?
>ведь я могу накидать тебе подобных примеров использования инкремента хоть из кода самого дотнета.
Сычуш, когда-нибудь ты вырастешь, возможно поумнеешь, и поймёшь, что идеального кода не бывает, потому что не бывает идеальных компиляторов, идеальных IDE и идеальных языков программирования. Да-да, сычуш, постарайся не сильно травмироваться с осознанием этого, а то я смотрю у тебя там манямирок полностью реальность затмил.
Твой пример это не подтверждает, там разница в миллиардных долях, а то и меньше.
В python такая же чепуха с float, дает допустимую точность все равно.
Где я называл код дотнета идеальным?
Я утверждал, что там используется инкремент без считывания возвращаемого значения.
Ты утверждал, что это признак говнокода.
Я правильно понимаю, что код .NET Core — это говнокод, а твой код — это не говнокод? И на чём именно основано такое убеждение, можно поинтересоваться?
Ты всё сам поймёшь, ровно после того, как перестанешь додумывать чушь вида "а твой код — это не говнокод"на основе утверждений о каком-либо коде. Если человек что-то называет черным, это не значит, что у него всё белое. Понимаешь, сычуш?
Хорошо, эту часть опустим. Код .NET Core — это говнокод? На чём основано это убеждение?
Тогда в чём был смысл утверждения
>Если просто использовать, значит у тебя говнокод.
если оно не несёт никакой информации? Или всё же в простом инкременте есть какая-то своя особая говнистость, отличающая такой код от всех прочих говнокодов? В чём же она заключается?
Смысл в том, что нужно всегда понимать что ты делаешь и предназначение инструментов, которыми ты пользуешься. По твоему самому первому вопросу, можно понять, что ты этого не понимаешь.
С чего же ты взял, что я не понимаю, что делаю и чем пользуюсь? Разработчики .NET тоже не понимают, что делают и чем пользуются? Они ведь точно так же используют инкремент. Не хотел, но боюсь, что стоит повторить, а то вдруг у тебя опять случится провал в памяти и ты начнёшь задвигать про разницу пре- и постинкрементов: ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ НЕ СЧИТЫВАЕТСЯ. ВСЯ ИНСТРУКЦИЯ ПРЕДСТАВЛЯЕТ СОБОЙ ЛИШЬ ИНКРЕМЕНТ ПЕРЕМЕННОЙ. ОТ ПЛЮСОВ СПЕРЕДИ ИЛИ СЗАДИ ЛОГИКА ПРОГРАММЫ НЕ ИЗМЕНЯЕТСЯ.
И что там? Ты не понимаешь, что разницы в логике программы между
var++;
и
++var;
нет никакой совершенно? Или ты считаешь, что она есть? Какая же?
Так стоит задача на сайте, я так понимаю, что если требуют результат вывести в double, то и расчеты стоит вести в нем, с decimal уже нужно использовать всякие хитровыебанные методы для возведения в степень, деления и т.д.
Ну и мне простительно, я машиностроитель по образованию.
Уже вижу челика который солюшен на core с 20+ проектами в сублайме редачит, ага
Или это такой троллинг, а я не выкупил
Ты еблан какой-то, в почти любом цикле есть инкремент, который просто вызывается в конце итерации и его значение никуда не присваивается. И там абсолютно до пизды i++ или ++i кроме конвенции.
мимо
В голос, блять, еще один дегенерат. Какой нахуй конвенции, тупоголовая скотина? Вот написано у тебя в конвенции ++x и ты хуячишь ++x там где нужно x++? Так ты себе это представляешь, хуесосина?
У меня кошка.
>Вот написано у тебя в конвенции ++x и ты хуячишь ++x там где нужно x++?
Вкатывальщик порвался, несите нового.
>Вот написано у тебя в конвенции ++x
Не написано. ВСЕГДА используется x++;
>ты хуячишь ++x там где нужно x++?
Тебе руки нахуй оторвут, если ты будешь в коде использовать возвращаемое значение инкремента.
В голос с долбоеба.
>Вот написано у тебя в конвенции ++x и ты хуячишь ++x там где нужно x++?
И ты хуячишь ++x там, где не имеет значения, ++x или x++. Почему ты настолько тугой?
>в почти любом цикле есть инкремент, который просто вызывается в конце итерации и его значение никуда не присваивается. И там абсолютно до пизды i++ или ++i кроме конвенции.
>Вот написано у тебя в конвенции ++x и ты хуячишь ++x там где нужно x++?
Тебе родителей не жалко? Им же приходится до сих пор тебе жопу вытирать.
типичный # вкатывальщик. Вам не зашквартно с такими в одном комьюнити сидеть? Даже JS макаки такой хуйни не пишут
Сап, шарпач.
КАК ЖЕ ЗАЕБАЛ ЭТО ЕБАНЫЙ ДЕБИЛЬНЫЙ МУДАЦКИЙ АБОРТИРОВАННЫЙ НИГИЛЛИСТИЧЕСКИЙ ПИДОРАСТИЧЕСКИЙ ВЫПЕРДЫШ ТУПОГОЛОВЫХ НИЗКОЦЕФАЛЬНЫХ ПРОФНЕПРИГОДНЫХ УБЛЮДОЧНЫХ ОБСОСНЫХ СРАНЫХ ДЕВЕЛОПЕРОВ - ТУПОЕ ГОВНО ТУПОГО ГОВНА, NuGet
Как ебаный прокси с доменным юзером на нугу накинуть? Я уже три часа пытаюсь скачать ссаный индекс. Пробовал и в урл прописываться, и через CLI - все хуйня, 407.
asp.net core 3.0 бэк, react js - фронт. Хостим на сервере, IIS. Какая еще информация нужна?
Нужно создать зубчатый массив и запилить в него всякие свойства и методы. Застрял на моменте ввода значений в массив с клавиатуры подскажите в чем соль может быть где проебался вот скрины кода.
>зубчатый массив
>запилить в него всякие свойства и методы
>Застрял на моменте ввода значений в массив с клавиатуры
У тебя все ок? Не болен?
>может быть где проебался
за тебя IDE все делает - читай exception
Все хуйня, давай по-новой.
Во-первых, нэйминг. m, n - ни о чем не говорит, doubleArray - запутывает, SteppedArray - это называется Jagged/Ragged array, GetArrayToConsole - абракадабра и т.д.
Во-вторых, подсчет элементов неверный, это для матрицы так можно, а ступенчатый массив может быть таким
a, b, c
d
e,f,g,h,i,j,k,l
По поводу исключения, смотри что вводишь в консоль, на вход ожидается целое число
Твоя мамка.
1) Ты проебался с изучением предметной области. Читай про IEnumerable<>.
2) Ты читаешь всю строку с консоли. Если я напишу дичь а-ля
0.293,211 14188ПИЗДЕЦ^w
, то стандартный метод спарсит тебе Exception, который ты не ловишь.
Поэтому, как минимум TryParse(), а лучше регексы+валидатор. Есть еще вариант с try..catch, но это полная хуйня.
3) Если лезть совсем в залупу, то ты проебался с тестированием. Вместо автоматизированного теста у тебя долбежка в консоль. Но ты совсем зеленый, забей на тесты до первого проекта с хотя бы 10-ю классами.
УРОК 1
@
ПЕРЕМЕННЫЕ, ТИПЫ, УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ
@
УРОК 2
@
ФУНКЦИИ, МАССИВЫ, СТРУКТУРЫ
@
УРОК 3
@
КЛАССЫ
@
УРОК 4. ПРАКТИЧЕСКОЕ ЗАНЯТИЕ
@
РЕАЛИЗОВАТЬ С НУЛЯ ПОТОКОБЕЗОПАСНУЮ OBSERVABLE BTREE COLLECTION С ПАРАЛЛЕЛИЗМОМ
>урок 4 практическое занятие
>считать данные из консоли и добавить в многоуровневый массив
>пук среньк маам скажи им пачиму так сложно ряяя двааач памахай!!
Существует ли способ
определить кодировку bytearray,
прежде чем сделать convert bytearray -> to string?
Существует ли универсальная кодировка, которая могла бы представлять байты в виде читабельного текста?
Я знаю, что можно в base64 закодировать,
но это не совсем уж читабельный текст,
русских букв там нет, и его надо раскодировать.
Для английских букв подойдёт и ascii,
кириллица же, есть в utf8,
но почему-то при попытке кодирования произвольного байтового массива в utf8,
назад из строки, этот bytearray уже не раскодировать...
В общем-то, задача в следующем. "data" (text or binary) -> text1 -> bytearray -> text2; (text1 === text2)
Тут не про сложность и не про отсутствие практических занятий.
С самого начала втирают императивку, которой можно выделить 2 часа, а потом удивляются почему в профессии кругом сплошные быдлокодеры, не пригодные даже в экселе таблички сводить. НЕТ, ПОЛГОДА ЗАДАНИЙ НА ДРОЧКУ БАЙТОВ ИЗ МАССИВА В МАССИВ - ЭТО ЗАЕБИСЬ, ТРУЪ НА ЭТОМ ВЫРАБОТАЕТ НУЖНОЕ МЫШЛЕНИЕ ПИЗДИТЬ КОД НА STACKOVERFLOW, А НЕ-ТРУЪ РАЗОЧАРУЕТСЯ И СТАНЕТ ПОВАРОМ.
Человеку, который пишет int arrayElements и при этом не смущается тому, что у него массив назван doubleArray, который не смог вбить в гугл-переводчик "зазубренный массив", который не может понять смысла предложения исключения выданого IDE, такому человеку никакая программа не поможет и всё ему будет плохо и не так.
Ага, или другая крайность:
> Я тут сижу и вместо дельных советов кукарекаю про названия переменных, хотя по всем признакам человек только начинает осваивать программирование.
Бамп реквесту.
>определить кодировку bytearray
Надежного способа нет. StreamReader попытается определить, или в ручную через анализ BOMa.
>универсальная кодировка, которая могла бы представлять байты в виде читабельного текста
Чего, блять?
>произвольного байтового массива в utf8
А utf8 это не произвольный набор байт. Прочитай хотяб на вики как оно кодируется.
text1 -> bytearray -> text2; (text1 === text2)
var bytes = Encoding.UTF8.GetBytes(text1);
var text2 = Encoding.UTF8.GetString(bytes);
.
Этот вопрос закрыт, решение найдено - это SBCS.
Она кодирует все 256 байт одним символом,
и есть ещё DBCS - она по два байта кодирует, в символе, то есть все 65536 байт.
Разумеется - реверсивно, и текст читабелен, вроде, если байты англ букв.
>>43507
Я уже пробовал, но UTF8 - не реверсивен. Пруф: https://rextester.com/IOUGY24132
Я, правда, так и не понял, как его вызывать, кроме как используя System.Text.Encoding.Default
>System.Text.Encoding.SBCSCodePageEncoding
не работает
>System.Text.SBCSCodePageEncoding.GetString()
тоже
И если это Character Set, наверняка можно произвольные символы ему задать, в этот set, чтобы там кириллица была?
Или есть что-нибудь с кириллицей уже? BlockCopy методы, хоть и реверсивны, но выдают китайские кракозяблики в строке.
То есть, если в байтовом массиве байты текста "page/?строка1=one&строка2=two"
- будет хуй пойми чего, по китайски, а не текст.
Если тебе достаточно одного байта, для кодирования символа,
то гугли 8-ми битные кириллические кодировки.
Их там несколько: Windows-1251, CP866, KOI8-R и ISO 8859-5
Они - как расширение 7-ми битного ASCII идут и кодируют оставшиеся символы вплоть до байта со значением 255.
Но, что если кириллический символ будет закодирован двумя байтами?
Например, буква "Б" в Unicode: https://unicode-table.com/ru/0411/"
Unicode, говоришь не реверсивен, хуй знает тогда, как. Может аноны подскажут?
Пруф того, что ты так и не прочитал пару статей на вики? Ну продолжай кодить наугад, как обезьяны, пишущие Гамлета.
https://rextester.com/IHJMZ44209
>Encoding.GetEncoding(437);
>cp437
Там же нет кириллицы.
Нашёл кучу кодов, вот здесь: https://docs.microsoft.com/en-us/dotnet/api/system.text.encodinginfo.getencoding?view=netframework-4.8
Заменил "437" на:
"1251" (windows-1251) - GOOD.
"866" (cp866) - GOOD.
utf-8, по коду 65001 - ВAD.
В общем, вот: https://rextester.com/MCE69037
Половина из них реверсивны, половина - нет, блядь.
И да, что это за кодировка такая? SBCSCodePageEncoding??
Даже кодовой таблицы в гугле нет. Как её включить, чтобы юзать принудительно, а не по default'у? Вдруг Default будет UTF8 или ещё чё, и надо будет SBCS.GetBytes() и SBCSCodePageEncoding.GetString() вызывать?
>Там же нет кириллицы.
А она нужна? KOI-8r глянь, может подойдет, может нет.
>SBCSCodePageEncoding
Google, motherfucker, can you use it? Single Byte Character Set, т.е. это не какая-то конкретная кодировка. И по сути оно будет хранится в таком же byte[] как и до конвертации в строку. Ты же понимаешь, что строка это такой же набор битов, а кодировка это способ их интерпретации. И если пользоваться SBCS, то массив {10,20,30} будет тем же массивом {10,20,30} и только при выводе на экран в зависимости от кодировки это будет "хуй" или "huy".
Ты лучше скажи, что ты делаешь, тогда есть шанс, что тебе подскажут адекватное решение, а не гонять байты в строки и обратно.
бамп
>>Там же нет кириллицы.
>А она нужна?
Очень желательно, но не обязательно.
>KOI-8r глянь, может подойдет, может нет.
Он для .NET Framework только, поэтому, наверное, лучше
>"iso-8859-1", с кодом 28591 (Western European (ISO))
как правильно подметил этот >>43603 анон, она заведётся и на .NET Core.
>Google, motherfucker, can you use it? Single Byte Character Set
Я уже столько вкладок с английскими буквами про эту хуйню, позакрывал нафиг...
Там же ни кода, ни кодовой таблицы - нифига, сухое бла-бла, так и непонятно как его вызывать, без Default.
Тем не менее, с System.Text.Encoding.Default.GetString() и System.Text.Encoding.Default.GetBytes() работают с ним.
>И по сути оно будет хранится в таком же byte[] как и до конвертации в строку.
>Ты же понимаешь, что строка это такой же набор битов,
>а кодировка это способ их интерпретации.
>И если пользоваться SBCS, то массив {10,20,30} будет тем же массивом {10,20,30}
>и только при выводе на экран в зависимости от кодировки это будет "хуй" или "huy".
Ну так, на выходе же строка. А можно как-то символы эти задать, и сделать из него, тот же windows-1251??
>Ты лучше скажи, что ты делаешь,
>тогда есть шанс, что тебе подскажут адекватное решение,
>а не гонять байты в строки и обратно.
Ладно... Начну свою кулстори...
Есть значит, некий HTTP-сервер, в onion...
Он принимает очевиднейший HyperTEXT,
который поступает на методы в виде
>string
но внезапно, юзер заливает PNG-картинку с фракталом,
а она с JavaScript'a грузится, отправляется POST-заросом как blob или ArrayBuffer,
и ещё и шифруется, при помощи HSalsa20, ассиметричной криптографией x25519-xsalsa20-poly1305,
при помощи библиотеки TweetNaCl.js v1.0.3,
и этот шифр гонится на сервак в виде raw-data,
которая в string хуёво конвертится, из-за этих кодировок ебучьих, что и нахуй не нужно.
Ну да ладно...
Есть отдельный метод, принимающий request в виде byte[] в качестве параметра,
там он дешифрует, и обрабатывает пикчу, кароче, ну или JSON дешифрованный.
Туда, на этот метод, инфа может и должна заливаться,
только если она рили бинари, а не текст,
потому что в тексте могут быть get-запросы,
вида "page/?строка1=one&строка2=two" или даже: "?oh_shi={JSON_с_кириллицей, ебать}"
Весь прикол в том, что и текст, этот, ебучий, может слаться в бинарном виде,
например POST-запросом, в виде ArrayBuffer'a.
Собственно, стоит задача - попытаться декодировать байтовый массив в текст,
извлечь оттуда не только латинницу, но и кириллицу - в string,
и отправить результат - на метод, принимающий string,
там эту string проверить, и если это не текст, читабельный,
а говно какое-то неведомое - значит это криптошифр,
его надо декриптовать, но не в виде текста, а в виде байт.
Поэтому строку, эту, ебучую, фейлово сконверченную, надо реверсивно, сконвертить в байты,
а байты уже присунуть методу, принимающему bytes[], для декрипта этих байт,
и выдачи строки декриптнутой - опять на метод.
Ещё один прикол, в том, что кириллица в декриптнутой строке, может содержать четырехбайтный Unicode,
в то время как сами байты криптошифра может быть представлен однобайтными символами.
То есть, вопрос ещё и состоит в том, какая же кодировка у всей этой хуйни...
>>Там же нет кириллицы.
>А она нужна?
Очень желательно, но не обязательно.
>KOI-8r глянь, может подойдет, может нет.
Он для .NET Framework только, поэтому, наверное, лучше
>"iso-8859-1", с кодом 28591 (Western European (ISO))
как правильно подметил этот >>43603 анон, она заведётся и на .NET Core.
>Google, motherfucker, can you use it? Single Byte Character Set
Я уже столько вкладок с английскими буквами про эту хуйню, позакрывал нафиг...
Там же ни кода, ни кодовой таблицы - нифига, сухое бла-бла, так и непонятно как его вызывать, без Default.
Тем не менее, с System.Text.Encoding.Default.GetString() и System.Text.Encoding.Default.GetBytes() работают с ним.
>И по сути оно будет хранится в таком же byte[] как и до конвертации в строку.
>Ты же понимаешь, что строка это такой же набор битов,
>а кодировка это способ их интерпретации.
>И если пользоваться SBCS, то массив {10,20,30} будет тем же массивом {10,20,30}
>и только при выводе на экран в зависимости от кодировки это будет "хуй" или "huy".
Ну так, на выходе же строка. А можно как-то символы эти задать, и сделать из него, тот же windows-1251??
>Ты лучше скажи, что ты делаешь,
>тогда есть шанс, что тебе подскажут адекватное решение,
>а не гонять байты в строки и обратно.
Ладно... Начну свою кулстори...
Есть значит, некий HTTP-сервер, в onion...
Он принимает очевиднейший HyperTEXT,
который поступает на методы в виде
>string
но внезапно, юзер заливает PNG-картинку с фракталом,
а она с JavaScript'a грузится, отправляется POST-заросом как blob или ArrayBuffer,
и ещё и шифруется, при помощи HSalsa20, ассиметричной криптографией x25519-xsalsa20-poly1305,
при помощи библиотеки TweetNaCl.js v1.0.3,
и этот шифр гонится на сервак в виде raw-data,
которая в string хуёво конвертится, из-за этих кодировок ебучьих, что и нахуй не нужно.
Ну да ладно...
Есть отдельный метод, принимающий request в виде byte[] в качестве параметра,
там он дешифрует, и обрабатывает пикчу, кароче, ну или JSON дешифрованный.
Туда, на этот метод, инфа может и должна заливаться,
только если она рили бинари, а не текст,
потому что в тексте могут быть get-запросы,
вида "page/?строка1=one&строка2=two" или даже: "?oh_shi={JSON_с_кириллицей, ебать}"
Весь прикол в том, что и текст, этот, ебучий, может слаться в бинарном виде,
например POST-запросом, в виде ArrayBuffer'a.
Собственно, стоит задача - попытаться декодировать байтовый массив в текст,
извлечь оттуда не только латинницу, но и кириллицу - в string,
и отправить результат - на метод, принимающий string,
там эту string проверить, и если это не текст, читабельный,
а говно какое-то неведомое - значит это криптошифр,
его надо декриптовать, но не в виде текста, а в виде байт.
Поэтому строку, эту, ебучую, фейлово сконверченную, надо реверсивно, сконвертить в байты,
а байты уже присунуть методу, принимающему bytes[], для декрипта этих байт,
и выдачи строки декриптнутой - опять на метод.
Ещё один прикол, в том, что кириллица в декриптнутой строке, может содержать четырехбайтный Unicode,
в то время как сами байты криптошифра может быть представлен однобайтными символами.
То есть, вопрос ещё и состоит в том, какая же кодировка у всей этой хуйни...
Забыл добавить один немаловажный аспект, для наглядности того, что асимметричное шифрование,
которое на стороне клиента, реализовано вот таким вот образом:
https://github.com/username1565/nanoboard-javascript-captcha/blob/44f7fed434de3941d4c83fad7f9501a464ac0452/index.html#L276
Дешифруется на стороне сервера, вот так:
https://github.com/username1565/Chaos.NaCl_in_one_CS/blob/633405df3709b33190d5557f52aaf6958c2f30ff/Chaos.NaCl.cs#L788
Разумеется, после вычисления общего ключа симметричного шифрования, на эллиптической кривой Монтгомери:
https://github.com/username1565/Chaos.NaCl_in_one_CS/blob/633405df3709b33190d5557f52aaf6958c2f30ff/Chaos.NaCl.cs#L476
Дальше, производится симметричный энкрипт-декрипт данных в обе стороны - абсолютно-криптостойким
шифром Вернама, на базе XOR-шифрования.
Очевидно, что оба метода - принимают на вход byte[], а не string,
поэтому HTTP-request должен содержать content в виде binary-data.
Впрочем я ранее и представить себе не мог, как можно было бы, в виде текста, отправить сырые данные.
Однако можно! И реверсивные кодировки тому подтверждение.
Но всё-же, зашифрованные данные приёмопередаются в бинарном виде,
а частности, JSON, с данными, в размере около 30 гигабайт,
при загрузке с клиента на сервер, должен бы быть зашифрован и передан в бинарном виде.
Расшифровка же, на стороне клиента, автоматизирована, при помощи асинхронных функций,
с использованием promise и таймаутов.
Всё это - вместе слаженная криптосистема, которая может работать децентрализированно,
как онлайн, так и оффлайн, поскольку изначально, наличие серверов у неё - не планировалось.
Iamtimcorey
Да.
Но если ты с мутанита начал знакомство с шарпом, то тебе придётся читать её полностью, а не только часть c MVVM
бамп тварыны
я читал ее, но не полностью. В любом случае спасибо чекну что Троелсен говорит
Нужна программа которая подсчитает число повторяющихся символов в строке.
Как сделать чтобы он не выводил уже выведенные символы и игнорировал пробелы?
listBox1.Items.Clear();
string text = textBox1.Text;
foreach (char ch in text)
{
int i=0;
for (int l = 0; l < text.Length; l++)
{
if (ch == text[l]) i++;
}
listBox1.Items.Add(ch + " - " + i.ToString() + " раз ");
}
Одной строкой.
> listBox1.Items.Clear();
> string text = textBox1.Text;
text.Where(c => char.IsLetter(c)).Distinct().Select(c => $"{c} - {text.Count(cc => cc == c)} раз").ToList().ForEach(c => listBox1.Items.Add(c));
> Нужна программа которая подсчитает число повторяющихся символов в строке
Какой вопрос, такой и ответ.
Понимаешь, анон, это решение, оно вряд ли тебе подойдёт. Ты ведь наверняка делаешь эту херню для учёбы, лаба какая-нибудь, или ещё что. 95% вероятности, что от тебя хотят, чтоб ты сам верно составил алгоритм, а не вызвал по цепочке несколько функций языка, которые за тебя всё сделают сами.
Поэтому пиши алгоритм. Ты начал верно, там должен быть цикл. Но хватит и одного цикла, второй не нужен. Тебе нужно где-то вне цикла сохранять уже найденные символы и их количество, чтоб когда один и тот же символ встретится второй (и т.д.) раз, ты мог бы просто прибавить единицу к счётчику.
Думай, там всё просто на самом деле.
И да, в классе char ты сможешь найти некоторые методы, которые тебе помогут определить, чем является символ - буквой, цифрой, знаком и т.д.
>но оно работает
Как надо? А то ты считаешь все символы, включая пробел, а тот анон только буквы.
Можно еще
listBox1.Items.Clear();
listBox1.Items.AddRange(textBox1.Text.GroupBy(c => c).Select(g => $"{g.Key} - {g.Count()}").ToArray());
listBox1.Items.Clear();
string text = textBox1.Text;
Dictionary<char, int> chars = new Dictionary<char, int>();
foreach (var ch in text)
{
if (Char.IsLetterOrDigit(ch))
chars[ch] = chars.ContainsKey(ch) ? chars[ch] + 1 : 1;
}
foreach (var item in chars)
{
listBox1.Items.Add($"{item.Key} - {item.Value} раз(а)");
}
проскролил ленту, ни одного вопроса, которые могут касаться реальных проектов. Какие то блять формочки, алгоритмические задачи. Пиздец, товарисчи. Я попутно в JS треде сижу, там хоть что то годное можно найти. Тут же - болото блять
Привет. Полтора года в c# комерческом ентерпайзе. Полет - номра, благо софт пишу в нише которая всегда в топе.
А как у вас на галерах? Урезают зп?
>комерческом ентерпайзе
интерпрайз бывает не комерческий? Насчет галеры - часть проектов закрылась и сидят на бенче гребцы, все ремоут. Насчет урезки - есть галеры, где 50/75% от ЗП платят, у нас такого благо нет
Тот кто вкатился, тот должен был научится гуглить. На 99% вопросов ответы уже есть, а чтобы спросить оставшиеся есть места поинтереснее борды со школьниками.
я если спрашиваю, то вопросы типо "best practice" или архитектурные заморочки. Но тут же блять, просто зашквар. То строчки подвинь, то алгоритм забей в метод. Пиздец короче. Вчера поскролил этот тред, не успел до половины дойти, как понял, что все безнадежно
Так что-то сложнее хеллоуворлда в треде все равно не помогут. Да и ответа ждать пару дней, лучше уж на стаковерфлоу англоязычном спросить или нагуглить готовое решение.
Анон, нормально ли будет начать изучать с Шилтда полному новичку?
Или он сильно устарел?
.card {
margin = 5px;
}
.fruit_card { //как унаследовать маржин от card?
background: red;
}
.berry_card {
background: blue;
}
у меня были проблемы на проекте с миграцией с 2.2, где ебучий движок начал отваливаться при работе с Rest Api, т.к. Middleware выпилили из ASP.NET Core. В итоге сам нагуглил и прикрутили на обычный SPA, ответа так борде так и дождался :) Не знаю, какой идиот ввел программу # в образовательную систему, чем им пайтон, ++ и Java не угодили...
На самом деле инфа по твоему вопросу в треде есть, просто ты из-за не знания предметной области не понимаешь как эти вещи связаны. Вообще твой вопрос возник из-за того что ты в принципе не понимаешь клиент-серверную архитектуру, REST API и где проходит грань между бэкендом и фронтендом.
Я прохожу на ulearn.me, в принципе норм, но упор на разработку алгоритмов сложноват для новичка. Зато много заданий с написанным тест-софтом внутри, что облегчает дебаггинг.
вот, да, вроде это. лучший.
гараж деда Макара по производству болванок тоже можно назвать интерпрайзом. На .NET проект посмотришь, сознание потеряешь после своего говна 1С с рузкоязычным синтаксисом и 90% написанным шаблоном базовой сборки
>На .NET проект посмотришь, сознание потеряешь после своего говна 1С с рузкоязычным синтаксисом и 90% написанным шаблоном базовой сборки
Ну вот такого я и боюсь больше всего. Но в любом же случае, джуна сходу не будут макать так жестко, п-правильно?
Я не понимаю как Serilog может не подходить. Он же может в любой стрим записывать.
Вообще вот всё что нужно для начала знать: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1
В Azure используется AppInsights telemetry.
Elmah часто вне облак используют - https://elmah.github.io
Хорошая статья со сравнением разных библиотек - https://michaelscodingspot.com/logging-in-dotnet/
> Я не понимаю как Serilog может не подходить
Ну, просто в целях совместимости с софтом, который пилился в начале нулевых и у которого программисты придумали что общепринятых уровней - мало, надо сделать 15 своих(при этом по факту большая часть этих дополнительных уровней никогда не используется), мне нужны кастомные уровни логгирования, а в серилоге уровни намертво прописаны и чтобы обеспечить такую вот совместимость придется костылить, а я хочу избежать этого, по возможности. Вот и подумал просто, что может быть есть какое-то популярное решение, в котором можно все настроить под себя и просто пользоваться.
Чувак, не бойся тратить время на уборку мусора (tech debt elimination). Начинай выпиливать говно мамонта потихоньку. Переписывай старую нужную логику в отдельные АПИ: библиотеки, REST, что угодно из доступного.
Постепенно нужда в старом отпадёт.
трипл хуйни не скажет. Обычно случается 2.
На вопрос тебе ответили, а ты грубить начал. Ну и мразь же ты.
Че тебе не нравится?
насчет процветания это ты загнул, но покой скоро наступит
На их docs сайте и есть монументальный труд и как раз в оригинале (ру-ру убери). Там куча вводных статей и потом погружение в дебри с кучей деталей, примеров и даже Try It прямо в браузере + ссылки на гитхаб с примерами и кодом.
Какие книги по программированию в 2020? Ваще ебанулись?
Открой уже для себя HashMap (Dictionary - стандартная реализация этой структуры данных в дотнете) и не еби людям голову по группировке данных. И вообще выучи основные алгоритмы в работе с ним. Одна из самых используемых структур и на собеседованиях часто всплывает.
При подсчёте символов можешь добавить обычный
if(ch == ' ') continue;
Для лабы прокатит.
Передай своему преподу что он пидор (ну или просто бедный чувак, работающий за 10к в вашей шаражке) и что он застрял в начале нулевых.
>Это применимо к любому языку и тому, что вокруг них обросло.
Охуеть, хочешь сказать, что в делфе не было этого пиздеца со строками?
Char.IsWhiteSpace()
значениеИзмодели1...значеиеИзМодели2
если я пишу так @model.a...@model.b, то разумеется он матерится на точки если добавлю пробелы @model.a ... @model.b, то пробелы будут и в хтмл, а мне они ненужны. Пока писал понял, что можно использовать стринг.формат. Это нормальное решение или есть еще что?
В общем, я хочу попробовать использовать этот самый F# в реальном проекте для API. Но не уверен надо ли и вообще, получу ли я от этого какой-то профит. Потому, если кому не лень, может быть поделитесь опытом использования F#: В каких задачах он полезен, какие лучше на обычном шарпе решать и вообще, здравая ли это идея выносить API на F#, когда все остальное на обычном C# написано и нормально работает?
Это че, код который считает сколько раз каждая буква встречается в строке?
Это ж на linq можно в одну строчку написать.
Не важно на какую тему и как ты поставишь вопрос всегда выползут вот эти вот. У чувака же явно лаба, ему самому надо алгоритм составить. Эту фигню можно за O(n) легко решить. Я более чем уверен что твоё решение на LINQ будет как минимум n log n. На линке можно тоже за О(n) решить, но не с твоими знаниями.
За сколько это выполняется? Просто я вот бака-прикладник, нас вот учили именно инструментами пользоваться, а какое там время выполнение и прочее - не важно, говорили что важно решать прикладную задачу в срок. Вот.
мимо
Я такого ответа и ждал. Странно только почему все удивляются что вокруг вечно всё лагает и падает. Да потому что большая часть представителей нашей профессии решает задачи здесь и сейчас со взором, устремленным в одну точку, и не желанием охватывать всю картину целиком.
Код можно писать красиво и достаточно оптимально (для большинства случаев подойдут стандартные дата структуры и алгиритмы) за такое же время, что и говнокод, который наша индустрия лепит как сумасшедшая. А со временем нормальный код поддерживать становится даже проще и быстрее, потому что всё по полочкам и странные баги не начинают атаковать тебя из всех щелей.
В твоём (спасибо хоть оформлен красиво) примере произойдёт следующее:
- Where создаст новый объект с коллекцией равной в худшем случае O(n) space complexity и выполнит операцию за один проход O(n) time complexity;
- GroupBy создаст еще одну коллекцию и пройдётся по массиву еще раз + вызовет операцию по созданию hash на каждый символ + операцию сравнения хэша + выполнит операцию ToLower n раз;
- Select пройдётся по конечной коллекции (которая на самом деле HashMap с самими значениями + хэш этих значений) и создаст еще одну её копию;
- Count пройдётся один раз по каждой категории в HashMap что в сумме даст еще один полный прогон.
Это грубая оценка, там еще зависит от того, какой компилятор и какие параметры для оптимизации используются. Но в любом случае твой пример насоздаёт кучу новых объектов и сделает дохрена доп операций, которых можно избежать, написав такой же по компактности код и потратив ничуть не больше времени на это. Если входной текст будет 1мб, то твоя программа займёт как минимум 3мб памяти. В случае с приложениями, которые грузят очень много ресурсов (например игры) или high load, где вызов этого метода будет происходит 1к+ раз в минуту, то ты засрёшь память и cpu очень быстро.
Твой ответ прокатит как разминочный раунд на интервью, но потом начнутся углубления и просьбы об оптимизации.
Нужно конечно осознавать природу своего приложения и среды, в которой оно будет крутится. Где-то и такой код можно в прод выкатывать, а где-то тебя уволят за это нахрен.
Я такого ответа и ждал. Странно только почему все удивляются что вокруг вечно всё лагает и падает. Да потому что большая часть представителей нашей профессии решает задачи здесь и сейчас со взором, устремленным в одну точку, и не желанием охватывать всю картину целиком.
Код можно писать красиво и достаточно оптимально (для большинства случаев подойдут стандартные дата структуры и алгиритмы) за такое же время, что и говнокод, который наша индустрия лепит как сумасшедшая. А со временем нормальный код поддерживать становится даже проще и быстрее, потому что всё по полочкам и странные баги не начинают атаковать тебя из всех щелей.
В твоём (спасибо хоть оформлен красиво) примере произойдёт следующее:
- Where создаст новый объект с коллекцией равной в худшем случае O(n) space complexity и выполнит операцию за один проход O(n) time complexity;
- GroupBy создаст еще одну коллекцию и пройдётся по массиву еще раз + вызовет операцию по созданию hash на каждый символ + операцию сравнения хэша + выполнит операцию ToLower n раз;
- Select пройдётся по конечной коллекции (которая на самом деле HashMap с самими значениями + хэш этих значений) и создаст еще одну её копию;
- Count пройдётся один раз по каждой категории в HashMap что в сумме даст еще один полный прогон.
Это грубая оценка, там еще зависит от того, какой компилятор и какие параметры для оптимизации используются. Но в любом случае твой пример насоздаёт кучу новых объектов и сделает дохрена доп операций, которых можно избежать, написав такой же по компактности код и потратив ничуть не больше времени на это. Если входной текст будет 1мб, то твоя программа займёт как минимум 3мб памяти. В случае с приложениями, которые грузят очень много ресурсов (например игры) или high load, где вызов этого метода будет происходит 1к+ раз в минуту, то ты засрёшь память и cpu очень быстро.
Твой ответ прокатит как разминочный раунд на интервью, но потом начнутся углубления и просьбы об оптимизации.
Нужно конечно осознавать природу своего приложения и среды, в которой оно будет крутится. Где-то и такой код можно в прод выкатывать, а где-то тебя уволят за это нахрен.
быстрее
Да, так тоже работает.
>Where создаст новый объект с коллекцией равной в худшем случае O(n) space complexity...
Нет, линк, не создает каждый раз коллекции физически, только при использовании результата. Память только на итератор выделяется, т.е. O(1).
Легче зону обойти, чем ее найти. Спасибо, сталкер.
Сноб мамкин байтоеб понавысрал стену текста с обсиранием всех вокруг и обосрался сам. Впрочем ничего нового.
>Код можно писать красиво и достаточно оптимально (для большинства случаев подойдут стандартные дата структуры и алгиритмы) за такое же время, что и говнокод, который наша индустрия лепит как сумасшедшая.
Ну-ка напиши в 4-5 строк свою реализацию CountCharsInStr возвращающую словарь вхождений, чтобы 1000 запусков на строках по 10к символов выполнялось значительно быстрее чем на скрине. Кидай сюда, прогоню твоё решени.
https://pastebin.com/eQ9ifLLc
PS пикрил конечно выполняется где-то на 20% быстрее, но читается хуже, занимает больше пространства и пишется раза в 1.5-2 дольше. Так что под твои фантазии не подходит.
>>48300
https://pastebin.com/br2Hu060
Вот будет работать раз в 20 быстрее.
Но можно написать чуть лучше используя stackalloc и константы, меньше выделения памяти будет.
Смотрите, я писал приложение. Оно нормально работало, но получилось очень громоздким. Я решил его разбить на несколько приложений поменьше, которые бы могли работать независимо. Большую часть таки разбил - все ок. Но вот беда, есть места, где нужно было бы получить информацию которая теперь лежит отдельно в отдельном приложении. Как это лучше всего реализовать? Чтобы было понятно: В общем приложение задумано как сервис(не тот что микросервис, а тот что виндовый сервис, ака демон), этот сервис делает запросы к хедхантеру и смотрит новые места стажировки в моем регионе, сохраняет их в файлик, чтобы я потом посмотрел, так же, раньше, я прикрутил веб-интерфейс, чтобы удобно это смотреть в браузере. Теперь эти штуки разделены на несколько сущностей. Сервис который смотрит инфу хедхантера работает нормально и все так же сохраняет в файлик, но раньше я имел возможность из контроллера просто обратиться к запущенному синглтону этого сервиса и просто получить нужные данные, а теперь - не могу(думаю понятно почему). Конечно, можно захардкодить и просто читать из файла, но это не так интересно, я думал как-то передавать сообщения от сервиса в веб-приложение, но ума не приложу как это сделать.
>передавать сообщения от сервиса
Message Queue (RabbitMQ например).
Твой сервис сохраняет инфу в файл и отправляет сообщение через сервис сообщений всем подписчикам. В принимателе ты подписываешься на очередь и сидишь ждёшь когда тебе придёт сообщение. На их сайте куча удобоувариваемых примеров.
Ребят не подскажет кто, в гейм дев перекатится со знанием .net слишком сложно будет?
нет, .net лучше, по многим параметрам, я думаю он медленно но упорно будет подтеснять джвку, синтаксис в .net просто сказка, рай для первекциониста
Ты пишешь игру? Unity
Ты пишешь фото/видео редактор? нахрена??
Ты пишешь редактор музыки? прекращай фигачить велосипеды!
Кому сдался десктоп в 2020?
> Кому сдался десктоп в 2020?
Любому, кто пишет нормальное приложение, а не тормозное дерьмо, работающее внутри отдельного экземпляра хромиума, потому что бородатый смузихлёб не учил другого языка, кроме парашного жаваскрипта.
Причём тут хипстеры? Мы в дотнет треде. Тут всякие повыраставшие из плюсов и жавы отписываются.
Твои десктопные приложения нафиг не сдались, кроме тех, что на полную катушку с GPU работают. И даже там уже появляются решения для удалённого запуска игр и другого тяжёлого софта.
Еще не забывай что WebAssembly начнёт себя с каждым годом всё больше проявлять. Это считай как Докер контейнер, который может запускать что угодно на твоей машине. Можешь хоть тонкий, хоть толстый клиент делать. И писать ты под этот контейнер на любом языке можешь.
1. Делаю пет для обучения, сталкиваюсь с тем что естественно нужно придумывать БД. MySQL запросы я поглядел, что-то запомнил, хотя хз нахуя если у меня smss, но кажется я делаю не очень хорошую БД. По каким ключевым словам гуглить чисто поверхностные знания по проектированию БД, вот чисто чтобы петы делать хотя бы несложные и видящим пет не было кринжово?
2. Как понять что мой запрос к БД в сервисе с LINQ говно медленное (entity фреймворк)? Какие нибудь хорошие ресурсы по тому как стоит и не стоит делать есть?
Например вот у меня есть таблица тредов и таблица постов. И чтобы мне получить посты этого треда у меня LINQ получается проходит по всей таблице постов и ищет посты с тредом соответствующим. Это же хуйня какая-то медленная, вот о чем я. Где почитать как стоит это дело делать по нормальному?
Почитай про нормализацию БД - https://en.wikipedia.org/wiki/Third_normal_form (тут сложно, но можно нагуглить что-то попроще).
1. Смысл в том что у тебя в БД
- не должно быть дупликатов инфы. Для этого разбивают инфу, с которой надо будет в приложении работать, на логически завершённые объекты (User, Order, Request, Response, и т.д.). Между ними создают отношения (relationship - у нас же relational DB). Дальше соединяют обекты через ключи (Id).
Student -> Student.SchoolId -> School
- запросы делать только по индексированным полям и желательно никогда по строчным (string) значениям.
- отношения между таблицами должны быть только через Id.
- по возможности не должно быть сложно составных ключей.
- если нет репликации, то желательно Id держать в int, а то и чём-нибудь поменьше, если знаешь сколько у тебя максимально возможное кол-во записей в таблице будет.
2. Вот хороший ресурс -https://www.entityframeworktutorial.net/efcore/one-to-many-conventions-entity-framework-core.aspx
EF Core (забудь про EF).
Вообще при использовании ef ты должен использовать миграции - https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli
Тебе нужно создать свои классы в C# и он сам за тебя создаст БД и может даже туда начальные данные запихать (Seed via HasData()).
Ручного обновления БД вообще не должно быть.
Используй DbContext через DI и желательно Scoped lifetime. Можно Transient. Но никогда как Singleton.
Таблицы, которые будут редко меняться, можно закэшировать (можешь кучу примеров найти через repository pattern).
Неплохое видео на тему репозиториев - https://www.youtube.com/watch?v=rtXpYpZdOzM&t=1163s
У нас EF core таблички с миллиардом записей довольно шустро каждый день перебирает. Не инструмент плохой, а метод, которым его используют.
https://dotnetfiddle.net/0mbCK5 тут накидал примерную упрощенную структуру одного из модулей моей программы.
Вопрос: как можно избавиться от TStruct в GenericBase?
Не встречал такого формата (но я в гейдеве не разбираюсь, может у них известный какой). Какое разрешение у файла? Если это какой-то кастомный формат, то писать свой парсер.
Обычный txt. Меня интересует, есть ли готовые элементы в стандартной библиотеке, которые позволят это распарсить проще и распихать по структурам данных. Подозреваю, что напрямую переносить код с обычной Сишки (включая свою пародию на map) - не лучшая идея.
Ну в стандартных либах такого нет, но если узнать что за формат, то наверняка кто-то уже написал либу для него.
Есть же вроде генераторы парсеров. Например, https://kaitai.io для бинарных данных очень хорош, должно быть и что-то такое для текстовых.
Дайте кто-нить короткий RegExp, чтобы определить является ли string iso-8859-1 encoded либо же utf8-encoded?
Ну, или методы...
>Console.WriteLine("str: \""+str+"\", Is ISO-8859-1? "+( System.Text.Encoding.UTF8.GetByteCount(str) == str.Length ) ); //is Latin-1? true/false
https://rextester.com/DRX53947
Тогда - так:
>Console.WriteLine("str: \""+str+"\", Is ISO-8859-1? "+(System.Text.Encoding.GetEncoding("iso-8859-1").GetString(System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(str))==str));//is iso? true/false
https://rextester.com/WCEBB12585
Заебись, теперь бинарные данные на HTTP-сервер можно отправлять на сервер,
и работать с ними как с iso-8859-1 encoded строкой,
и различать бинарный контент тела запроса от текстовых параметров в GET-запросе,
которые могут содержать не только ASCII-символы, но и кириллический текст.
Падажи, у того анона проводится сравнение с оригиналом после цикла вбайты/избайтов. Если у тебя на сервере есть с чем сравнивать, т.е. исхдные данные, то зачем тебе что-то вобще передавать?
Дело в том, что на сервер может прийти от клиента как текст, так и бинарные данные. И сервер их - не знает.
Поэтому, надо бы их отличить от текста, и вовсе не по заголову "Content-Type", который может быть и не указан.
Поясню: в изначальном исходнике наноборды: https://github.com/nanoboard/nanoboard/releases
в коде школьника, примерно вот в этом месте:
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Server/TcpServer.cs#L511
данные поблочно декодируются в UTF8 строку,
затем передаются как string на различные Handlers из HttpServerBuilder.cs:
https://github.com/username1565/nanoboard/blob/master/nanodb.exe-source/Server/HttpServerBuilder.cs
В частности на /api/ которое расписано в DbApiHandler.cs:
https://github.com/username1565/nanoboard/blob/master/nanodb.exe-source/Server/DbApiHandler.cs
Из кода этого файла, очевидно, что методы, возвращающие HttpResponse, принимают на вход две СТРОКИ,
одна из которых - данные.
Поскольку данные, в TcpServer.cs, из NetworkStream декодируются как UTF8-текст,
они обязаны быть байтами utf-8, и если отправить туда бинарные данные - получается хуйня.
Всё потому, что кодировка UTF-8 не является реверсивной: >>43613
А вот iso-8859-1 - является.
Ею можно закодировать все 256 значений всевозможных значений байт, в виде строки, и декодировать их назад.
Значит, можно отправить байты, декодировать их не как utf-8, а как iso-8859-1,
и подать эту строчку - на вход методов из DbApiHandler.cs,
при необходимости, получив из этих строк данные.
Но что делать, если строка utf-8 encoded? Обрабатывать Latin-1 кракозябры? Нет!
Ведь это может быть не только параметр GET-запроса, но и utf-8 encoded текст, переданный как второй параметр.
И надо было чем-то отличить utf-8 текст от iso-8859-1.
Следовательно, появился сей вот - вышеуказанный вопрос.
И решение найдено, оно работает.
Теперь, можно слать на сервер - какой-нибудь шифр x25519-xsalsa20-poly1305
или вообще абсолютно-криптостойкий шифр Вернама,
слать в виде бинарных данных, асинхронным XHR-запросом,
криптуя - всё это дело client-side, и дешифровать на сервере, при помощи библиотеки Chaos.NaCl,
а потом и принимать байты от сервера с другим шифром, как responseType = 'arrayBuffer',
с последующим дешифрованием на стороне клиента, при помощи JavaScript,
используя функции портативной библиотеки TweetNaCl.js v1.0.3. Хы-хы!
Дело в том, что на сервер может прийти от клиента как текст, так и бинарные данные. И сервер их - не знает.
Поэтому, надо бы их отличить от текста, и вовсе не по заголову "Content-Type", который может быть и не указан.
Поясню: в изначальном исходнике наноборды: https://github.com/nanoboard/nanoboard/releases
в коде школьника, примерно вот в этом месте:
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Server/TcpServer.cs#L511
данные поблочно декодируются в UTF8 строку,
затем передаются как string на различные Handlers из HttpServerBuilder.cs:
https://github.com/username1565/nanoboard/blob/master/nanodb.exe-source/Server/HttpServerBuilder.cs
В частности на /api/ которое расписано в DbApiHandler.cs:
https://github.com/username1565/nanoboard/blob/master/nanodb.exe-source/Server/DbApiHandler.cs
Из кода этого файла, очевидно, что методы, возвращающие HttpResponse, принимают на вход две СТРОКИ,
одна из которых - данные.
Поскольку данные, в TcpServer.cs, из NetworkStream декодируются как UTF8-текст,
они обязаны быть байтами utf-8, и если отправить туда бинарные данные - получается хуйня.
Всё потому, что кодировка UTF-8 не является реверсивной: >>43613
А вот iso-8859-1 - является.
Ею можно закодировать все 256 значений всевозможных значений байт, в виде строки, и декодировать их назад.
Значит, можно отправить байты, декодировать их не как utf-8, а как iso-8859-1,
и подать эту строчку - на вход методов из DbApiHandler.cs,
при необходимости, получив из этих строк данные.
Но что делать, если строка utf-8 encoded? Обрабатывать Latin-1 кракозябры? Нет!
Ведь это может быть не только параметр GET-запроса, но и utf-8 encoded текст, переданный как второй параметр.
И надо было чем-то отличить utf-8 текст от iso-8859-1.
Следовательно, появился сей вот - вышеуказанный вопрос.
И решение найдено, оно работает.
Теперь, можно слать на сервер - какой-нибудь шифр x25519-xsalsa20-poly1305
или вообще абсолютно-криптостойкий шифр Вернама,
слать в виде бинарных данных, асинхронным XHR-запросом,
криптуя - всё это дело client-side, и дешифровать на сервере, при помощи библиотеки Chaos.NaCl,
а потом и принимать байты от сервера с другим шифром, как responseType = 'arrayBuffer',
с последующим дешифрованием на стороне клиента, при помощи JavaScript,
используя функции портативной библиотеки TweetNaCl.js v1.0.3. Хы-хы!
Разве оно не входит в диапазон float?
Да я ещё не понимаю, что за суффиксы, я только начал книгу читать. Я уже понял, что флоат надо описывать как целое число с F в конце, просто хуита какая-то, в книге было написано пикрил, я попробовал, и не прокнуло. Вот тут вопрос - книга от 19 года по сишарп 17.1 вроде. Это раньше так можно было, а сейчас нельзя? Или в книге изначально неправильно написано?
Что за книга? В доках у майкрософта написано с суффиксом сразу.
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types
>float f = 3_000.5F;
>f = 5.4f;
Похоже на обычное ast tree, парсеров которых на гитхабе хоть жопой жуй.
>>50705
В книгах могут быть ошибки, опечатки, а так же совсем вранье если автор дурак.
Так насколько я помню было всегда, так как потеря точности во многих алгоритмах может сыграть злую шутку которую затем хуй отдебажишь так как разница будет в 20+ знаке и ты тупо ее не заметишь на глаз.
>сишарп 17.1
Недавно с#8 релизнулся, завязывай с путешествиями во времени.
>раньше так можно было, а сейчас нельзя
никогда нельзя было
>изначально неправильно написано
Что за книга? Может автор проебался, но скорее всего обосрались переводчики.
>Недавно с#8 релизнулся, завязывай с путешествиями во времени.
Дальше что? Книги по C#8 сами по себе материализуются вот так сразу, вместе с переводом?
>>50881
>Что за книга? Может автор проебался, но скорее всего обосрались переводчики.
>>50815
>Что за книга?
Да самая простейшая, C# для чайников. Мне надо быстро понять что из себя C# представляет, с середины апреля на курсы поступаю, чтоб там не тупить.
>Дальше что? Книги по C#8 сами по себе материализуются вот так сразу, вместе с переводом?
Чего? Я тебе говорю, что последняя версия шарпа на данный момент 8, до 17 еще далеко.
>самая простейшая
Написанная неизвестным автором?
>Чего? Я тебе говорю, что последняя версия шарпа на данный момент 8, до 17 еще далеко.
А, ну речь о 7.1 очевидно же.
>Написанная неизвестным автором?
Джон Пол Мюллер - C# для чайников
Ну, самое простое что я нашёл по сишарпу. Мне по-сути на курсах всё будут объяснять, мне сейчас просто ознакомиться - думаю данная книженция пойдет...
Ладно, всем спасибо.
Книги по программированию читать можно только как развлекалово/художественную литературу если тебе такое в кайф конечно.
Учиться прграммировать надо по официальным докам (выше выложили основной сайт >>50815) и по исходникам, которые нынче на гитхабе лежат вместе с кучей примеров и обратной связью от самих разработчиков.
Причина, по которой нынче с числами так сложно работать, скорее всего в том, что в прошлом была куча ошибок со всякими подсчётами (финансовые, научные, инженерные). И теперь поставили кучу защит от выстрела себе в ногу. Если хочешь использовать именно этот тип - укажи что нужен именно этот тип, иначе делай явный каст из одного типа в другой. И если ты натупил с выбором типов - то это будет явная ошибка программиста, а не языка и среды в которой твоё приложение крутится.
>Книги по программированию читать можно только как развлекалово/художественную литературу если тебе такое в кайф конечно.
>Учиться прграммировать надо по официальным докам (выше выложили основной сайт >>50815) и по исходникам, которые нынче на гитхабе лежат вместе с кучей примеров и обратной связью от самих разработчиков.
Анон, я с тобой несогласен. До этого я учил пайтон по той же схеме - сначала прочитал крайне простую книженцию, укус питона по-моему, понял примерно что это за язык. Потом перешел к более серьёзной книге по пайтон, разбору примеров, написанию собственных софтин, в результате, как я считаю, имею достаточно неплохие знания. По пайтон тоже документация кайфовая - но это всё на инглише. Я конечно могу читать по английски - но для меня на именно на чтение иностранной литературы тратится слишком много ресурсов, а у меня цель стоит освоить в кратчайшие сроки. Чтобы сейчас свободно читать на инглише - надо было заниматься этим перед тем как начинать учить язык. Это раз. Два - книга предосавляет тебе программу, порядок - это банально удобно
Я понимаю твои аргументы о структурированной инфе и тоже пытался вкатываться по книгам. Перечитал много глав из многих книг (в начале 00х еще). Нифига не понимал, пока работать не начал. И потом как понял!
Книги может отчасти и помогли, но основные знания приходили с опытом написания говнокода, наступанием на кучу граблей и курением доков и со временем стэковерфлоу и гитхаб.
Сейчас вся инфа up to date имеется на оф сайтах и в публичных репо. Она очень часто хорошо упорядочена и с работающими примерами и докой о том, как эти примеры запускать. Плюс есть много всяких платных и бесплатных сайтов с базами для вката (типа этого https://www.learncs.org) и с углублённым изучением.
Я против книг и тогда был, когда в них больше инфы, чем в нете было. А сейчас и подавно.
>Я понимаю твои аргументы о структурированной инфе и тоже пытался вкатываться по книгам. Перечитал много глав из многих книг (в начале 00х еще). Нифига не понимал, пока работать не начал. И потом как понял!
Ну, у меня пока положительный опыт только...
>Плюс есть много всяких платных и бесплатных сайтов с базами для вката
Мне вот книги нравятся ещё в том плане, что у меня неплохо развито ссылочное мышление. Если надо что-то срочно вспомнить, допустим видел какой-то конкретный пример в книге - то я обычно знаю где его искать.
Кстати, прошу прощения, в доках по ссылке выше всё на русском.
>Кстати, прошу прощения, в доках по ссылке выше всё на русском.
Вот тут? https://docs.microsoft.com/ru-ru/dotnet/csharp
Просто убираешь руру и будет нэйтив - https://docs.microsoft.com/dotnet/csharp
Кстати, по этим ссылкам куча ввходных статей с примерами и всё структурировано и со ссылками, которые можно запоминать :)
Кстати2, классное видео по продвинутым техникам и знаниям что там под капотом в Питоне (сорян, перевода на русский не видел) - https://www.youtube.com/watch?v=7lmCu8wz8ro
ASP.NET Core MVC - https://docs.microsoft.com/en-us/aspnet/core/mvc/overview?view=aspnetcore-3.1
Ты ж не сказал ограничили вам вывод инфы формочками или консолью или нет. Если нет, то бери веб не думая и учи RazorPages - https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-3.1.
Там можно всё на русский переключить.
ВинФормс - c зомби технологией ты точно профита в будущем не поимеешь. Тогда UWP/WPF c Xamarin.
Ты на Xamarin создаёшь solution. Распихиваешь всю логику по всяким Domain, Persistence (DB, File, хз что еще), Application. Выделяешь отдельный проект под UWP/WPF, в котором будет твой Presentation layer.
С таким подходом можно будет разные Presentation проекты под Андроид, iOS, PWA, винду добавлять.
Будет у тебя и нужный для рынка опыт, и задачу выполнишь.
https://docs.microsoft.com/en-us/windows/apps/desktop/choose-your-platform
https://www.exceptionnotfound.net/the-asp-net-web-api-exception-handling-pipeline-a-guided-tour/
Но не суть, в общем то проблема сводится к тому что когда я бросаю throw new HttpResponseException(resp); где в resp что-то мне нужное с моим кодом сообщением итд в постман приходит не этот ответ, а
System.Web.Http.HttpResponseException: Processing of the HTTP request resulted in an exception. Please see the HTTP response returned by the 'Response' property of this exception for details.
В гугле какое-то говно. Помоги, анон, с меня тысяча нефти.
Твоя статья уже слишком древняя.
Начни отсюда https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-3.1
Мы через Middleware хватаем любое исключение в одном месте. Там даётся Invoke метод, в который передаётся ссылка на функцию твоего метода в контроллере. Оборачиваешь вызов этого метода в try/catch и ни одно исключение, которое произошло из-за вызова твоих endpoints (controller/action) не пройдёт. Там же можно задать нужные статус коды и объекты, которые назад вернёшь.
Сорян, не совсем туда ссылку дал.
Вот https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
Потом тяжело будет с убогим синтаксисом жавы работать
Ну подумай. Сейчас ты ездишь на жигулях, хочешь попробовать сесть на ауди последней модели. Если думаешь, что после ауди сможешь возиться с жигулями, то дерзай.
Сахарок самый сладкий из всех мейнстрим строго типизированных языков, слезть тяжело будет, как выше отмечено
С другой стороны нормальной работы нет, .НЕТер это почти всегда фуллстек программист. Так что если это важный для тебя момент, то страдать будешь вдвойне.
Может лучше попробовать Котлин? Насколько я знаю он довольно сильно шарп напоминает и явно для тебя полезней будет.
Вкатился в мертворожденное дерьмо и других заманиваешь? Нет, спасибо
двачую за котлин. .NET уже делает предсмертный выдох с open-source, вкатышам интепрайза я бы советовал делал ставку на kotlin - свежую Java
в том то и дело, что Java уже настолько переполнена сахаром, что читать код невозможно. А котлин - это как релоад уже старой, доброй и главное - рабочей Java, которой рынок доверяет, а не присматривается к мелкософту, где он еще может руку в карман просунуть.
Задание:написать программу, которая считывает английский текст из файла и выводит его на экран, заменив прописной каждую первую букву слов, начинающихся с гласной буквы.
using System;
using System.IO;
class Program
{
static void Main()
{
string path = @"D:\text.txt";
try
{
using (StreamReader sr = new StreamReader(path))
{
string str = sr.ReadToEnd();
string alf = "aeiou";
string[] split = str.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < split.Length; i++)
for (int j = 0; j < alf.Length; j++)
if (split.StartsWith(alf[j].ToString(), StringComparison.InvariantCultureIgnoreCase))
{
Console.WriteLine(split);
break;
}
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
Console.ReadKey();
}
Console.ReadKey();
}
}
Задание:написать программу, которая считывает английский текст из файла и выводит его на экран, заменив прописной каждую первую букву слов, начинающихся с гласной буквы.
using System;
using System.IO;
class Program
{
static void Main()
{
string path = @"D:\text.txt";
try
{
using (StreamReader sr = new StreamReader(path))
{
string str = sr.ReadToEnd();
string alf = "aeiou";
string[] split = str.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < split.Length; i++)
for (int j = 0; j < alf.Length; j++)
if (split.StartsWith(alf[j].ToString(), StringComparison.InvariantCultureIgnoreCase))
{
Console.WriteLine(split);
break;
}
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
Console.ReadKey();
}
Console.ReadKey();
}
}
>Почему пикрелейтед код работает так медленно?
Тому чо ты его в дебаге запускаешь, тестируй в релизе. И что делать будешь если попка тебе инвалидоператионэксепшен выкатит при пустом стэке?
Запустил в релизе, разница максимум в пару секунд. Все равно секунды три-четыре обрабатывает. Вот Сишный аналог (я переписываю свою прогу на шарп, так как на нем проще окошки рисовать), консольное окно появляется уже с текстом об окончании работы, лол. И это всего-лишь 25 килобайт.
>И что делать будешь если попка тебе инвалидоператионэксепшен выкатит при пустом стэке?
Ну, воткнуть проверку на количество перед pop, делов-то.
так пиздуй на своих C писать, тут CLR, тут другие ребята. Тут тебе не шутки блять. Пока ты свои байты дрочишь, тут говно жрут деньгу зарабатывают. Съебал короче
Да я уже разобрался, лол. Надо было использовать не .Count(), а .Length. Вызов функции тормозит, конечно, знатно. Знвю, тупой.
Ты работу с консолью то вынеси в другой метод. Этот метод должен только всё разобрать, а вывод на экран должен происходить в другом месте.
Ну тогда не удивляйся, че так тормозит.
Стандартные алгоритмы могут за 1мс отрабатывать, но как только добавляешь вывод в консоль, могут пройти секунды, пока ты ответ увидишь.
Хм, ну ладно. Это все равно на пока переношу и проверяю алгоритм. Как вынести-то в отдельный метод? Не очень представляю, мне видимо придется сохранять, где скобки не совпадают, сбалансированы ли они, и под конец выполнения функции дергать другую, куда это и передавать?
Ууу, чувак, тебе походу алгоритмы еще доучивать надо.
В нормальном приложении логика и вывод информации должны быть не то что в разных методах, а вообще в разных классах. А еще желательно в разных проектах/библиотеках.
Ладно, спасибо, пойду тогда книги из шапки читать. Все равно проект для души, торопиться некуда. Да и душонка байтоебская
> Вызов функции тормозит
Просто компилятор не могкт оптимизировать случай с Каунт, и на каждой итерации будет происодить чек на оутофбаунд и прочее непотребство. Сам метод Каунт по-возможноти вызовет свойство Каунт от ICollection (для массивов и, наверное, строк Каунт вернет Ленгтх), и не будет перебирать коллекцию. Даже если компилятор не заинайнит это, там оферхэд несколько нс.
И кстати, прочитай про PInvoke, может тебе и не надо переписыать сишную либу, а будешь тягать ее методы из шарпа.
По дате у статьи (там она прописана).
По версии фреймворка (часто её вписывают)
Не читать какие-то левые статьи на базовые темы, а идти сразу на оф сайт.
string str = "english, mothetrfucker! do you speak it? govno ebanoe ya tvoi rot ebal.";
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
bool nextUppercase = true;
StringBuilder builder = new StringBuilder();
foreach (var ch in str)
{
builder.Append((nextUppercase && vowels.Contains(ch)) ? char.ToUpper(ch) : ch);
nextUppercase = ch == ' ';
}
Console.WriteLine(builder);
есть лаба
Создать абстрактный класс Prog с методами, позволяющими вывести на экран информацию о программном обеспечении,
а также определить соответствие возможности использования(на момент текущей даты).
2.Создать производные классы: Свободное(название, производитель), Условно - бесплатное(название,
производитель, дата установки, срок бесплатного использования), Коммерческое(название, производитель, цена, дата установки, срок использования) со своими методами вывода информации на экран, и определения возможности использования на текущую дату.
3.Создать базу(массив) из n видов программного обеспечения, вывести полную информацию из базы на экран, а также организовать поиск программного обеспечения, которое допустимо использовать на текущую дату.
Вопрос в следующем когда унаследовал класс Free от Prog
и начал переопределять метод вывода инфы на консоль чет как то нихера не выходит в чем соль может подскажете?
И вопрос еще в процессе возник что бы результат работы одного метода передать в другой это надо создавать отдельную переменную и присваивать ей метод результат работы которого нужен ? Или есть варианты 7
Не Free а Shareware, не Prog, а Software.
Не перезаписывает потому что в абстрактном классе у тебя метод не принимает параметров, а в потомке ты два параметра вхуячил, которые в самом объекте есть.
В общем, читать теорию надо было, а не хуи пинать. Где вас только рожают таких? Потом еще ноете, что работу найти не можете, потому что государство хуевое, а вы хорошие.
Я получаю responsebody как строку, мне надо от туда вытащить дискаунт как-то 30% и выше, как это можно сделать?
Программа должна будет покупать вещи со скидкой 30+ %.
Да я вообще не ною)) мне до поиска работы еще ой как долго.
Но за помощь в любом случае балгодарю
Очень плохой вопрос.
Ответ от АПИ приходит в каком-то формате. Ты не поделился этими данными.
Скорее всего у тебя вызов к REST API и значит ответ в JSON формате. Надо подключать JSON библиотеку и десериализировать строку в какой-то объект на твоей стороне.
Если ты не понял, что я щас тут написал и это по работе - я в шоке, кто за таких спецов деньги платит.
Если по учёбе - иди читай про сериализацию в целом и про JSON в частности.
Публичные АПИ обычно имеют документацию по формату и типу объектов, которые они принимают и возвращают.
>Если ты не понял, что я щас тут написал и это по работе
Не волнуйся, я пока новичок, с апи второй день разбираюсь.
Спасибо за ответ
Смотри, на бирже нет документации к апи можно ли в данном случае сказать что у бирже вообще апи нет? , значит мне надо как-то самому найти нужный http запрос, чтобы мне вышел json где только нужная информация. Как это можно сделать?
Всё, это последний глупый вопрос >_<
Берёшь Postman, открываешь сайт, откуда ты инфу собрался тянуть, и начинаешь пробовать разные endpoints (urls). Смотри какую инфу они возвращают. Там же будет указан тип и формат ответа.
Еще не факт, что они json возвращают.
Обычно если нет документации, то они не хотят чтобы кто-то левый их АПИ использовал и скорее всего они защищены аутентификацией.
Вот пример норм документации: https://docs.microsoft.com/ru-ru/rest/api/resources/subscriptions/list
Нет, уже давно не актуален.
Всем ещё раз привет, теперь возник вопрос, нормально ли создать Thread.Sleep(1000) и ещё раз вызывать этот форич для показа актуальной информации? Просто мне кажется это очень на костылях будет выглядеть. Постоянный while true хуёво будет из-за нагрузки постоянной ( я так себе представляю) .
foreach будет всегда одно и то же показывать, тебе надо заново запрос делать.
Иди на hangfire.io, оформляй свой функционал в функцию и добавляй её в scheduler с помощью Hangifre. Он тебе будет вытягивать инфу с каким-то интервалом.
Для консольной приложухи, писаной на коленке и крутящейся на твоей машине, while(true) { Task.Delay(Time.OneSecond); } более чем достаточно. Можешь еще CancellationToken прикрутить и добавить логику по выходу из этого цикла, если кто-то послал команду на завешрение операции.
>foreach будет всегда одно и то же показывать, тебе надо заново запрос делать
Да, я это понял как только отправил.
Хорошо, спасибо
Как же всё-таки приятно сделать было бота, только сейчас опять на полгода заброшу всё, потому что кодить нечего.
Добавил нугет для SQLite.
Создал модельку.
Создал контекст в котором просто указал использовать SQLite.
Сгенерировал миграцию
Апдейтнул ее.
Пытаюсь потестить и ошибка: Нет такой таблицы.
Но вот другой вопрос. Я установил что ID - автогенерируемый, но почему-то при сохранении ошибка, дескать нужно установить первичный ключ, если вбить его ручками и он уникальный, то все нормально работает.
Злой ты. Я разве виноват, что информация из книг не усваивается у меня в голове и я могу учиться только диалогом?
Ты виноват только в том, что пытаешься скрыть свою лень, выдумывая себе несуществующие недуги.
Ну, допустим, лень. Что в этом плохого-то? Вот ты поленился и вместо того чтобы пойти на гитхаб и прочесть исходники .net core, ef core и других популярных хреновин, открыл книгу, где посвященный дядька тебе на блюдечки все принес. Я вот поленился открыть книгу и решил спросить у тех, кто ее открывал. Разница довольно незначительна. Потому не будь таким токсичным.
Плохо то, что ты срёшь в тред. И для того чтобы "спросить у тех кто читал", нужно сформулировать вопрос, но ты ведь этого сделать не в состоянии, потому что тебе лень учиться. Ты сюда пришел поманяфантазировать и утешить себя, вроде как не чмо, а что-то пытаешься, но на деле ты чмо, которое еще и другим мешает.
Ну ты и токс. Вот серьезно. Откуда в тебе столько желчи-то? Я бы еще понял, если бы ты ответ на вопрос дал, так ведь нет, ты просто пришел и начал плеваться кислотой. Фу таким быть. Такие как ты портят комьюнити и мешают начинающим развиваться.
Migrations создают все таблички за тебя и перевичные данные (Seed и только если ты засетапил HasData). Если этого не случилось, то ты неправильно создал DbContext и Entities, которыми он оперирует. Тут в треде дофига ссылок на все базы и примеры по этому делу.
Автогенерируемый айди обычно значит что у тебя поле Identity. Если этот constraint (они так называются) не присвоился твоему ID, то он и не будет само устанавливаться. Это в случае, если у тебя поле int. Для GUID надо из кода в своей модели самому new Guid() делать.
Спасибо.
Как убрать автонабор в Visual Studio?
Постоянно мешает мне. Например, хочу написать "i", ставлю пробел, а программа сама ставит "if"
> Например, хочу написать "i", ставлю пробел, а программа сама ставит "if"
Интеллисенс в студии умный, он не предложит тебе написать "if" там, где этого нельзя сделать, или если в зоне видимости уже есть переменная с более подходящим именем ("i"). Так что либо это ты сам что-то не так делаешь, либо студия у тебя поломалась.
Например есть массив 9х9, как из него получить массив от x,y до x,y?
> как из него получить массив от x,y до x,y?
Пройтись двойным циклом и выбрать то, что тебе нужно?
Мне нужно было что-то такое:
Enumerable.Range(0, 9).SelectMany(i => CellsInRow(board, (box - box % 3) + i / 3).Skip(3 * (box % 3)).Take(3));
А не проще всё же пройтись? Да и быстрее будет, если честно.
Спасибо, но уже не надо.
Чому в последних шарпах можно так:
var arr = new int[] {1,2,3,4,5};
var x = arr[1..3];
Опять же, можно сделать как-то так:
var arr = new int[][]{...};
var x = arr[..][1..2];
Но нельзя так же с n-мерными массивами? В чем принципиальная сложность добавить возможность чтобы сделать как-то так:
var x = arr[1..2,3..4,5..6]?
Ну, я конечно понимаю что на практику оно особо и не надо, но все равно факт того что тут можно, а там - нельзя, выглядит как-то непродуманно.
Разве ты только что не писал что:
> Но нельзя так же с n-мерными массивами? В чем принципиальная сложность добавить возможность чтобы сделать как-то так:
> var x = arr[1..2,3..4,5..6]?
> "Тут" это там где можно использовать Range
> Приведи примеры "тут"
> https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/ranges
> Ну так ведь нельзя.
Что, простите?
Что тебе блин мешает запустить студию и проверить то о чем я говорю?
Бля, иди тролль кого-то другого, или мозги включай и следи за последовательностью того что пишешь.
Я вообще не понимаю о чем ты.
Вот тут https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/ranges-indexes написано, что многомерные массивы не поддерживают такой синтаксис. Только непонятно почему нельзя в принципе было сделать их поддержку. Из-за этого в голове путаница.
И ничего я не троллю. Просто хочу разобраться с новой штукой языка, потому что сама по себе она выглядит удобно.
>что многомерные массивы не поддерживают такой синтаксис.
У тебя же студия запущена, ты сначала проверь в ней, поддерживают ли одномерные массивы такой синтаксис.
Вроде как.
Это же просто сахар, который компилятор разворачивает в метод GetSubArray(Range). Ты можешь сам написать такие методы для нужных тебе размерностей, только так как компилятор под твои методы не натренерован, то тебе придется их вызывать не как индексатор, а как метод расширения.
В языках программирования любой синтаксис это сахар. Не сахар это определенная последовательность нулей и единиц.
Дат.
Обязательно ли нужна лицензионная винда? И какой версии?
есть label
хочу обращаться к большому количеству label'ов по их номеру (label1, label2, ....)
можно как то коротко реализовать нечто вроде - label + number.Text = ""; ?
обращатся по label1.Text к каждому из элементов в моем случае будет слишком громоздко (элементов свыше 40 шт)
> Говорят, что на этой ОС либо невозможно кодить на C#,
Консольную фигню и веб(95% шарпоработы), можно без особых проблем и на линуксе кодить.
> Обязательно ли нужна лицензионная винда? И какой версии?
Не обязательно.
Ну, можно как-то так сделать, например. Обращаться будешь по ключу из словаря.
Заведи себе словарь объектов, в нём сможешь через текст элемент находить.
Я знаю, что это сахар, я знаю что могу сам написать для скольки угодно размерностей. Другое дело вот я наделаю своих методов, потом кто-то посмотрит на мой код и ему нужно будет время, чтобы понять что это за ебаная хуйня там и что она делает. Это, на мой взгляд, не есть хорошо, и нужно стараться избегать такого.
А синтаксис, который закреплен в стандарте, вроде как, подразумевает, что любой шарпан должен знать, следовательно если его введет в ступор arr[1..], то это не я мудак, который усложняет код, а он, потому что не следит за новыми штуками, которые в языке появляются. Ну, по крайней мере я так считаю.
Манюнь, проснись. Твой 4.8 фреймворк со всеми новинками никому нахуй не уперся, кроме вкатывальщиков-долбоебов, которые учат САМАЕНОВАЕ САМАЕКРУТОЕ. Всё потому, что 99% работы это старые фреймворки, если ты нашёл программу работающую на 4.5 версии, то считай, что тебе повезло.
Ничего не нужно. Читай книги по шарпу, начни с Троелсена. Остальное само приложиться по мере изучения языка и необходимости.
Ну не знаю. Я вот пишу сейчас на core 3.1. Старшие коллеги сказали, что с выходом .Net 5 будем переносить все что можно переносить на него. Как-то так.
>все что можно переносить
Ну вот. Теперь посмотри на тех, кто поддерживает непереписываемый код и узнай, что их гораздо больше чем таких счастливчиков как ты. Новинки языка это прерогатива смузи-стартапов.
Не слушай этого из деревни, он там сидит и думает что "проснулся".
Любой код переписываемый. Зависит от твоей квалификации. Судя по всему у тебя она не очень и ты очередной 9-5 рак. Поувольняли вас не мало таких.
Мы перетаскали кучу продуктов 10-15 летней давности на новые платформы и при этом эффективность компании не то что не проседает, а наоборот. На поддержку старого кода уходит времени в N раз больше, чем нового. И с каждым годом этот N увеличивается. На переписывание уходит от 1 недели до нескольких месяцев, но в итоге ты сохраняешь себе годы работы. Бизнес с тобой быстро соглашается, как только ты ему объяснишь бенефиты в удобоувариваемом для него виде. Особенно если приведёшь пример Васяна, который только что потратил 2 месяца на новую фичу, и покажешь что ты то же самое за два часа сделал, применяя голову. Васяна на свалку, код мигрирует на новую платформу.
Не будь Васяном.
Мань, перестань фантазировать и открой рынок труда, а потом покажи мне вакансии в которых требуется что-то более чем 4.5 фреймворк.
Чувак, зачем мне фантазировать, если я с этим уже много лет работаю в компаниях с 1к+ работников?
Ты свой мухосранск на весь мир то не натягивай.
Конечно, яндекс и гугл своё дерьмо не переписывают десятилетиями, а у долбоеба прям каждая вторая крупная компания этим занимается. Ты сам то хоть в это веришь?
У тебя нет сокрытия имен, ундерскор демонстрирует, что это член класса, зачем ты this пишешь? Вам за такое (и за цену в double) баллы не снижают?
Я понимаю, что ты за годы сросся с этой мыслью, поэтому любой, кто будет пытаться её опровергнуть, сразу станет долбоёбом в твоих глазах. Это нормально. Отрыв от своих убеждений - очень медленный процесс. Пройдёт какое-то время и долбоёбы перерастут в идиотов, а там глядишь и до нормальных обращений доберёмся.
К слову у каждой из FAANG компаний сотни подразделений и каждое из них существует как своя обособленная компания со своими директорами, менеджментом и бюджетом. Я в них работал. В индусо подразделении действительно десятилетями стряпают (скорее стряпали, поуволняли старых говнокодеров и взрастили новых, с мозгами) костыли. И есть куча проектов, которые на радар не особо попадают или до них еще не добрались (как со Скайпом для бизнеса и Линком, которые 20ти летний груз костылей тащили, и большую часть из них наконец-то разрулили имеется ввиду внутренняя тяжеловесная каша, а не сам клиент).
Но вот только у меня не мысли, а аргументированное мнение, которое подтверждено вакансиями на hh.ru
От тебя только и слышен пустой пиздежь, который противоречит реальности.
Рэнжи это фишка компилятора, а не фреймворка. >>54205
>чтобы понять что это за ебаная
Давай нормальные имена и пиши комментарии, и тогда всем будет насрать как оно внутри, если работает>>54205
>синтаксис, который закреплен в стандарте
тебе доступен. Если твой метод принимает ренж, компилятор сам сконвертит запись 2...^3 в класс.
Ну ок, написали бы в майкросовте еще метод для двумерного массива, а какому-то анону понадобится для 3-х, 4-х мерного. Где остановиться? Так, что сделали для самого распространенного юзеркейса и правильно.
Ну я также могу заявить что моё мнение подтверждено вакансиями на linkedin и indeed: https://www.linkedin.com/jobs/search/?keywords=c#
Мне первая же вакансия от Теслы выпала, в которой написано: Experience in .NET Framework and .NET Core
Только прикол в том, что в неизвестные конторы вакансии пишут кто под руку попался (HR всякие), которые лепят ключевые слова, найденные в интернете. И скорее всего в вакансиях на дотнет программиста просто C# написано будет без привязки к фреймворку.
Реальность твоя реальна только для тебя. Я с .Net Framework в последний раз в 2016 работал. Остальное время проекты на нём приходилось открывать только для того чтобы какой-то функционал в dotnet core или jvm на какой-нибудь скале перетащить.
>Мне первая же вакансия от Теслы выпала, в которой написано: Experience in .NET Framework and .NET Core
Охуеть, ну всё теперь, 100% у них там всё на коре, который вышел в 2019, написано, да? Я где-то писал, что новые технологии нигде не используются? Нет, я писал, что найти работу легче зная старый фреймворк, чем новый, потому что новые используют в очень малом количестве.
Ты конечно дальше можешь якать и приводить в пример свой личный опыт, вот только на реальность это никак не повлияет. Даже сложно представить насколько нужно быть умственно отсталым, чтобы говорить о том, что на технологии 2019 года пишут больше, чем на технологиях 2002 - 2014
Ага)))
Коре вышел в 2016. В 2017 выкатили коре 2, который уже был допилен до приличного состояния, и тогда было ясно, что за ним будущее а фв - ебаное легаси. В общем после выхода второго кора новые проекты на фв начинали толко слоукпоки. Из 5 собесов, что были в этом году, нужен был кор.
Ты из тех, которые хватаются за первое попавшееся непонравившееся слово и на него отвечают, не читая дальше.
Первая стабильная версия кора в 2016 была зарелизена. Компании, перекатывающие свои продукты с личных дата центров в облака (ибо дешевле, чем содержать свою ферму серверов), отдают предпочтение кору, потому что у Майкрософта на него поддержка на облачной платформе лучше.
Рекрутёры кидают по несколько писем в день и спрашивают об опыте работы с кором, потому что их клиент об этом просит, и в вакансии об этом не всегда указано. Даже 2 письма в день (на самом деле больше) - это 44 письма за месяц (без учёта выходных, хотя и на выходных прилетает). Сколько в месяц открывается новых дотнет вакансий в отдельно взятом городе? Не думаю, что на много больше чем 40.
Каджый раз как созваниваешься с рекрутёром, они в первую очередь спрашивают, сколько лет опыта с шарпом и потом - сколько с дотнет кором. Новым клиентам интересен твой опыт конвертирования старого фреймворка в новый. Многие, как ты и заявил, еще используют легаси, но перекатиться уже хочется.
Если не брать всякий машин лернинг и датасайнс - то математика программисту не нужна, школьного курса будет достаточно. Нужна лишь способность эту математику осваивать.
Задача такова. Чел ходит по этажам и выключает свет в кабинетах, у него есть две лестницы - правая и левая.
Нужно посчитать минимальное количество времени затраченное на проход всех
этажей
входные данные
2 2
0010
0100
выходные данные
5
входные данные
3 4
001000
000010
000010
выходные данные
12
входные данные
4 3
01110
01110
01110
01110
выходные данные
18
https://pastebin.com/R6BDg9sc - код моей программы не идеален и выводит ошибку на 9 тесте
5 93
00000000000000000000000000000000000000000000000000000000100000000000000000000000000000000001010
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000
00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000
Вывод участника
240
Ответ жюри
265
Вопрос: Где я допустил ошибку, и какие алгоритмы необходимо использовать для эффетивного решения данной задачи
Задача такова. Чел ходит по этажам и выключает свет в кабинетах, у него есть две лестницы - правая и левая.
Нужно посчитать минимальное количество времени затраченное на проход всех
этажей
входные данные
2 2
0010
0100
выходные данные
5
входные данные
3 4
001000
000010
000010
выходные данные
12
входные данные
4 3
01110
01110
01110
01110
выходные данные
18
https://pastebin.com/R6BDg9sc - код моей программы не идеален и выводит ошибку на 9 тесте
5 93
00000000000000000000000000000000000000000000000000000000100000000000000000000000000000000001010
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000
00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000
Вывод участника
240
Ответ жюри
265
Вопрос: Где я допустил ошибку, и какие алгоритмы необходимо использовать для эффетивного решения данной задачи
Нужно понимать как работают функции
f(x) = x + 1
У функции есть сигнатура f(x)
Функция может принимать параметры f(x,y) = x + y
Функция может принимать функцию как параметр f(g(x)) = g(x) + 1
Функция может возвращать значение f(x) -> y
Нужно хорошо понимать Булеву алгебру.
Также нужно уметь въезжать в разные формулы и матрицы при работе со всякими массивами, будь то игры (даже шахматы), карты и маршруты, picture/video/audio processing. При работе с бухгалтерией и финансами тоже много счетоводства и формул. Многие компании строют всякие внутренние инструменты с графиками и отчётами.
Но это не мешает программистам забивать куй на математику полностью и писать индусский код, когда 2+2 записывается в тыщу строк и исполняется это творчество по несколько секунд вместе нескольких наносекунд и отжирает по 500 мб, которые еще и не всегда выгружаются, потому что индусский код любит всякие статики и глобальные объекты.
Можно изучать матан параллельно с языком или лучше стоит его выучить перед изучением программирования?
Скорее всего задача коммивояжера. Из того что ты написал ничего не понятно, давай всё условие.
Почему ты такой тупой? Ну вот как можно дать ответ на твой вопрос "Стоит ли вкатываться в геймдев?", если никто не способен прочитать твои мысли и понять, что для тебя важно. Может зарплата, может стабильность, может перспективы карьерного роста, может развитие как программиста и т. д.
Некоторые люди не выключают свет, когда уходят из помещения, что ведет к бесполезной растрате энергии. Будучи охранником в университете, Сахир ждет, пока все студенты и профессора покинут здание, а затем идет и выключает везде свет.
В здании n этажей и две лестницы слева и справа. На каждом этаже есть m комнат вдоль коридора, который соединяет левую и правую лестницы. Другими словами, здание можно представить как прямоугольник из n строк и m + 2 столбцов, где первый и последний столбец — лестницы, а m столбцов посередине — комнаты.
Сахир сейчас стоит на первом этаже на левой лестнице. Он хочет выключить везде свет, при этом, он не хочет подниматься на этаж выше до того, как выключит весь свет на текущем этаже. Конечно, Сахир должен побывать в комнате, чтобы выключить в ней свет. Сахир тратит одну минуту на то, чтобы подняться по лестнице на один этаж или перейти в соседнюю команату/на лестницу из соседней комнаты или с лестницы на том же этаже. Выключение света в комнате, в которой Сахир находится, не отнимает у него времени. Помогите Сахиру найти минимальное время для выключения всего света в здании.
Заметьте, что Сахир не должен возвращаться на исходную позицию, а также то, что он не обязан посещать комнаты, в которых свет и так выключен.
Входные данные
Первая строка содержит два целых числа n и m (1 ≤ n ≤ 15, 1 ≤ m ≤ 100) — количество этажей и количество комнат на каждом этаже, соответственно.
Следующие n строк содержат описание здания. Каждая строка содержит строку из нулей и единиц длины m + 2, описывающую один этаж (левую лестницу, затем m комнат, затем правую лестницу), где 0 означает, что свет выключен, а 1 означает, что свет включен. Этажи даны в порядке сверху вниз, в частности, последняя строка описывает первый этаж.
Первые и последние символы каждой строки описывают лестницы, поэтому они всегда равны 0.
Выходные данные
Выведите одно число — минимально возможное время, необходимое для того, чтобы выключить весь свет.
Примеры
входные данные
2 2
0010
0100
выходные данные
5
входные данные
3 4
001000
000010
000010
выходные данные
12
входные данные
4 3
01110
01110
01110
01110
выходные данные
18
Примечание
В первом примере Сахир сначала пойдет в комнату 1 на первом этаже, а затем — в комнату 2 на втором этаже, используя любую лестницу.
Во втором примере он пойдет сначала в четвертую комнату на первом этаже, поднимется на один этаж по правой лестнице, зайдет в четвертую комнату на втором этаже, опять поднимется по правой лестнице, пойдет во вторую комнату на последнем этаже.
В третьем примере он будет проходить по всему коридору на каждом этаже, чередуя лестницы
Да, задача правда похожа на коммивояжера, но только частного случая, где не надо возвращаться в исходное положение и у каждого города только 2 пути в другой
Некоторые люди не выключают свет, когда уходят из помещения, что ведет к бесполезной растрате энергии. Будучи охранником в университете, Сахир ждет, пока все студенты и профессора покинут здание, а затем идет и выключает везде свет.
В здании n этажей и две лестницы слева и справа. На каждом этаже есть m комнат вдоль коридора, который соединяет левую и правую лестницы. Другими словами, здание можно представить как прямоугольник из n строк и m + 2 столбцов, где первый и последний столбец — лестницы, а m столбцов посередине — комнаты.
Сахир сейчас стоит на первом этаже на левой лестнице. Он хочет выключить везде свет, при этом, он не хочет подниматься на этаж выше до того, как выключит весь свет на текущем этаже. Конечно, Сахир должен побывать в комнате, чтобы выключить в ней свет. Сахир тратит одну минуту на то, чтобы подняться по лестнице на один этаж или перейти в соседнюю команату/на лестницу из соседней комнаты или с лестницы на том же этаже. Выключение света в комнате, в которой Сахир находится, не отнимает у него времени. Помогите Сахиру найти минимальное время для выключения всего света в здании.
Заметьте, что Сахир не должен возвращаться на исходную позицию, а также то, что он не обязан посещать комнаты, в которых свет и так выключен.
Входные данные
Первая строка содержит два целых числа n и m (1 ≤ n ≤ 15, 1 ≤ m ≤ 100) — количество этажей и количество комнат на каждом этаже, соответственно.
Следующие n строк содержат описание здания. Каждая строка содержит строку из нулей и единиц длины m + 2, описывающую один этаж (левую лестницу, затем m комнат, затем правую лестницу), где 0 означает, что свет выключен, а 1 означает, что свет включен. Этажи даны в порядке сверху вниз, в частности, последняя строка описывает первый этаж.
Первые и последние символы каждой строки описывают лестницы, поэтому они всегда равны 0.
Выходные данные
Выведите одно число — минимально возможное время, необходимое для того, чтобы выключить весь свет.
Примеры
входные данные
2 2
0010
0100
выходные данные
5
входные данные
3 4
001000
000010
000010
выходные данные
12
входные данные
4 3
01110
01110
01110
01110
выходные данные
18
Примечание
В первом примере Сахир сначала пойдет в комнату 1 на первом этаже, а затем — в комнату 2 на втором этаже, используя любую лестницу.
Во втором примере он пойдет сначала в четвертую комнату на первом этаже, поднимется на один этаж по правой лестнице, зайдет в четвертую комнату на втором этаже, опять поднимется по правой лестнице, пойдет во вторую комнату на последнем этаже.
В третьем примере он будет проходить по всему коридору на каждом этаже, чередуя лестницы
Да, задача правда похожа на коммивояжера, но только частного случая, где не надо возвращаться в исходное положение и у каждого города только 2 пути в другой
Очень даже можно. В программирование можно с нуля вкатываться и по ходу дела осваивать что нужно. Булеву алгебру надо будет быстрее остальных освоить, а то пишут потом
if(isDone == true){}
else if (isDone == false) {}
else {}
Был тут один такой лет 5 назад. Был послан далеко на йух. Такие вопросы задают джуны, которые в принципе не понимают, что спрашивают. Освой для начала хотя бы один язык до хорошего уровня, напили несколько проектов. Выучи как работает CPU, GPU, and memory. Почитай про дизассемблирование. Глядишь дойдёт, что ты подходишь к решению задачи с абсолютно неверной стороны.
Начинать в таком случае нужно с ассемблера. А чем ты память будешь считывать и изменять, вообще не важно, но для этого C++ больше шарпа подходит, хотя и шарп тоже справится.
В Unity на шарпе вроде.
>Да самая простейшая, C# для чайников.
Блять, ну и хуйня. Сижу и ахуеваю. Сначала какое-то говно 100 страниц рассказывали, вроде как переменные объявлять, про типы, а потом сразу "А давайте нахуй создадим свой ИТЕРАТОР, вот тут нахуй наследование вот тут какие-то классы тут ещё что-то". Пиздец. Ни ООП, ни пространства имён, ничего автор не рассмотрел - давайте нахуй итератор запилим. Сижу нихуя не понимаю что происходит
Если захочешь сделать свои массивы с блекджеком и шлюхами и обращаться через [index] к значениям
Сахарок для более простого восприятия кода, который компилятором разворачивается в пару методов.
var a = foo[index] вместо var a = foo.GetValue(index)
foo[index] = a вместо foo.SetValue(index, a)
>>55783
Да блин, я горю с ублюдского стиля написания книги, и с того что я в это говно уже начал. Автор нихуя не объясняет зачем могут пригодится эти индексаторы, конкретных примеров не даёт. Пиздос. Автор вабще имеет привычку сначало выложить код тела программы, описать его, и только лишь потом вкидывать код пользовательских методов, которые там присутствуют. Вот сижу, перепечатываю код program main, и ахуеваю с того что просто не могу его понять, потому что этот ублюдок не дал кода его злоебучих самописных методов заранее. Какое-же говно
Вкинь пример описания из книги, пару страниц. Интересно стало, что же там такого.
Ну вот, он дал код программы, пикрил, и потом уже начинает вкидывать пользовательские методы. Нахуй ты этот обоссаный код дал, если без знания того, чем занимается метод, этот код бесполезен. Ну и классическое "ПОКА ЧТО ВАМ ПРОСТО ДОСТАТОЧНО ЗНАТЬ. А ВОТ В СЛЕЕЕЕЕЕДУЮЩИХ ГЛАВАХ МЫ ВСЁ РАССМОТРИМ" ДА ПОШЁЛ ТЫ НАХУЙ ПИДРИЛА
>>55798
И да, извините аноны, я просто внезапно сгорел. Главное до того как перешли к обоссаным интераторам более-менее нормально материал подавался, хотя такое говно уже встречалось. А тут просто пиздец, сижу и ахуеваю с того что мне дают код какими-то непонятными кусками которые я не могу проанализировать, постоянно всплывают темы которые вабще никак не рассматривались. Перегрузку методов этот пидор как то так рассмотрел сразу после строковых методов - ни наследование, ничего ещё не рассматривалось, вот вам тут способы работать со строками - а потом сразу перегрузочку посмотрим. Кайф. И так же код кусками вкидывал.
Конкретных примеров ни в одной книге не дают, проснись.
Двачую мудреца, если сразу всю инфу вываливать то так можно один пример полкниги разбирать
Дать что-то потыкать самому а уже потом объяснять как это работает это нормальный и распространенный подход
>>While I only cover the Display data annotation, there are many additional annotations that can be used
>in the same manner. Please consult the .NET Framework documentation to learn more.
В этой книженции этого тоже хватает. Просто я с этого так горю.
на самом деле по пайтон больше френдли-литературы для новичков, учить было проще. Да и сам язык там проще и приятнее, возможно, поэтому.
Зачем? Тебе дали концепцию и показали пример, дали где смотреть остальные. Сам со временем встретишься с другими или почитаешь ссылки. А учебники для того и нужны чтобы базовое представление о технологии составить.
Боюсь представить как такие вкатыши бы читали книги чуть серьезней, ХОТЯ БЫ уровня пикрила, они целиком из такого и это норма, там вообще после каждой главы страницы перечислений ссылок на подробности.
Дурачок, но ведь в серьезных книгах это приемлемо, потому что они пишутся для опытных людей, которым действительно нужно больше ссылок на подробности, чем затрагивание самого популярного и используемого, потому что они и так много знают.
А вот если тебя тычат каждый раз в слова "обратитесь к документации" в книге для новичка, то это хуево.
Так все правильно, книга для новичка, новичку рассказывают про базовые понятия языка и синтаксис.
Рассказали про атрибуты, зачем они, как применяются. Дали пример. Что ещё надо?
Это же учебник по языку а не по атрибутам и не по конкретным библиотекам. Перейдет новичок с изучения языка на изучение фреймворка - там и познакомится с используемыми в нем атрибутами
Так там выше есть список часто используемых методов какого-либо класса и краткое описание. Что мешало с атрибутами сделать также? Хотя бы просто написал, блять, чтобы я по названию примерно понял что к чему и посмотрел в документации те, которые меня интересуют. А так смысла вообще нет в этой поверхностной информации, я бы лучше время это потратил на книгу по этому фреймворку, а не вот этот огрызок.
Какой вообще смысл в этом огрызке? Я сразу побегу своё делать? Нет, потому что у меня нет достаточных знаний. Может быть этой информации нет в книге по этому фреймворку? Нет, она там есть. Т. е. получается избыточное дублирование.
>Какая работа обычно бывает у шарп программистов помимо веба?
Виндовс форм
>Стоит ли вкатываться в геймдев?
Просто загугли количество геймдев вакансий. Нет никакого геймдева в этой нашей России.
> энтерпрайз точенный
this
игрульки - путь в никуда (токсичное комьюнити, токсичные коллеги, 0 рост из-за простоты разработки, однотипная работа, никаких архитектурных и сложных задач).
Можешь сделать что-то на подобии этого https://dotnetfiddle.net/e4FwRC
Добавить оверрайды для ValueContainer`а, добавить метод для сокращения одинаковых физ. величин и т.д.
> банально чтобы даже с каким-нибудь EF ты понимал что своими Linq ты хуйню сделал и либо Linq составлял нормальные либо умел на нативных решениях переписать нормально
Это не джунские знания. Джун должен уметь скомпилить проект и поправить пару багов.
графана+прометеус
Самое простое это обернуть твоё говно в while и внутри хуярить trycatch, если прошло - выходить из вайла, если в кетч ушло - хуярить таймаут. Самое быстрое и даунское решение, если лень делать - ебашь так.
Что ты сделал и с чем тебе помочь? Код тебе написать?
Миша, всё хуйня, давай по новой.
Просто сиранул в штаны от твоего коммента.
Я уверен, что этот говнодел ничего не понял из того, что ты написал.
Не стоит, юзай Visual Studio
IIS
Потом долбоеб столкнется с пикрилом и насрёт себе в штаны от удивления. Я понимаю там количество пробелов в табе определять, но если дело касается разных возвращаемых значений, значит код зависит от ситуации, а не конвеншена.
Потому что я с тобой разговариваю. Иди читать как работает борда, ньюфажек.
Что ж ты такой тупой. Вопрос не про различия в пре/постинкременте. Иногда надо просто увеличить переменную, как например в цикле фор, там это не на что не влияет. В шарпах обычно пишут постинкремент. Хотя некоторые пишут преинкремент, так как они слышали от кулхацкеров, что в сях он может быть быстрее постинкремента.
Долбоеб, речь шла про КОНВЕНШИН, КАК НАДА? КАК ВЫ ДЕЛАИТИ? т. е. то про то, что на код никак не влияет и везде должно быть одинаковым. Можно отказаться от использования инкремента вообще, это будет конвеншином, но если ты сказал, что у тебя постфиксный инкремент это конвеншин, а потом в коде пишешь ++x потому что иначе он будет работать неправильно, то ты долбоеб. Потому что конвеншены на "вот в этой ситуации так пишем, а вот в этой так" никто не создает, это противоречит их предназначению, а именно упрощению работы и предотвращению путаницы. Поэтому перестань срать себе в штаны, в них и без того полно дерьма.
Сочувствую, но я такого не встречал, что б конвеншинами запрещали пользоваться языковыми конструкциями. Конвеншены именоо про стиль и >>56301
>про то, что на код никак не влияет и везде должно быть одинаковым.
Т.е. инкремент в циклах и прочее. А если нужен прединкремент, а конвеншн его запрещает, то ковеншн и контора, которая его придумала говно.
Хотя сейчас вспомнил один случай мне рассказывали, в некой конторе ругались за использование фишек C# 8, хоть иписале на коре 3, а все из за того, что большинство в конторе не осилили чейнджлог. Хотя это еще можно оправдать, но то что ты пишешь это верх маразма.
Не злись, здесь на тебя всем похуй, побереги нервы.
>Т.е. инкремент в циклах и прочее.
>Т.е. инкремент в циклах
Просто нахуй иди. Такое быдло как ты понимает только когда его либо плетью бьют, либо зарплату забирают.
>не отличает инкремента переменной, от присваивания инкрементированного значения другой переменной.
>Инкрементить возвращаемую переменную, которая сразу после возврата пропадет из области видимости
Пиздец просто х2
Уйди из треда не позорься
Для чего?
Но это у тебя за подобный код зарплату заберут и плетью отлупят.
Сап прогромач. Вопрос по WPF. Есть TreeView, к его TreeViewItem'ам надо привязать экземпляры разных классов (по одному на айтем) и получать их по клику мышки. Как сделать эту привязку при учете того что классов будет штук 30(все наследованы от одного родителя),а айтемов - штук 150?
Чё-то я подозреваю что все пары по ООП ты прогулял. при том что ты самоучка
Серьёзно, WPF тут не причём. Это базовая работа с объектами и одинакова она будет и для консоли и для веба и для твоего впф.
>>41261
>>56301
Читал вашу баталию, читал, но так и не понял аргументов. Я даже запутался, кто из вас за какую сторону уже болеет (там походу 3+ анона уже отвечают).
Когда значение инкремента нужно, то во всяких учебниках и статьях пишут i++ (постинкремент). Как тут >>56339 уже показали, внутри цикла значение для ++i и i++ будет одинаковым. Обычно инкремент жить вне цикла не должен, хотя бывают алгоритмы, когда один инкремент продолжают гнать через несколько циклов и/или методов. В этом случае уже будет не до стандартов, а надо будет конкретное решение выбирать.
Если значение инкремента не используется, то надо использовать или foreach, или бесконечный цикл с условием для выхода while(read)/for(;;)
Выглядит так, что ты открыл книгу для тех кто уже знает какой-то ЯП. Таких много. Ищи "переменная это коробочка со значением"-книги. Не насилуй моск себе.
Или же если тебе что-то не понятно ищи по этой же теме другие материалы, а книгу используй как роадмап по темам.
Мыши плакали, кололись, но продолжали жрать кактус.
IClonable для этого и сделан, но, Пестька, есьт нюанс. Он не генерик, что с одной стороны понятно, а с другой приводит к упаковке у структур и можно словить нежданчик (см. пикрил). Решается объявлением Клоне() виртуальным и надеждой, на то, что его переопределят в наследнике. Как по мне лучше бы сделали генерик (хотя никто не мешает завести свой интерфейс).
Конструктор сделать можно, но как-то я не встречал такого (хотя я вобще почти не встречал клонирования). Но и тут есть нюанс (пикрил 2). Надо, что бы вся цепочка наследования имела конструктор копирования.
Есть способ надежный, блять, как швейцарские часы и элегантный как трактор - через бинарную сериализацию в мемористрим и обратно. Единственный недостаток класс должен быть помечен как [Serializable] и иметь конструктор без параметров (но это не точно).
Ну и наконец, есть старая добрая рефликсия, всегда придет на помощь. Вот вариант упонянутый на СО:
https://github.com/Burtsev-Alexey/net-object-deep-copy/blob/master/ObjectExtensions.cs
>>56918
Вроде чувак питон учил до этого, а глохнет на ровном месте.
>>56919
Двачую. Нет и не будет такой книги (если только интернет распечатать), в которой разжевано все. Но к счастью у шарпистов есть MSDN - лучший ресурс по языку и прилегающем технологиям.
Делал игры на яваскрипте под мобилки, захотел пересеть на унити, там С шарп.
Пытаюсь решать базовые задачи, голова начинает болеть.
1)Где гребанный список всех базовых директив и методов, необдходимых для простейших программных манипуляций? В доках смотрел, в референсах, везде какая-то дичь. Я просто хочу из коробки использовать базовые математические операции, операции матрицами, числами и тп. Почему недостаточно просто иногда написать using System? Чтобы выполнить простейшие операции с генериками и прочими листами приходится копаться в каких-нибудь Enumerable<T> и гуглить каждый метод через стаковерфлоу где на такой простой вопрос люди такие простыни катают еще и спорят друг с другом.
2)Перейти от сишарпа с С проще чем от яваскрипта к сишарпу?
3) Почему нет нормального типа строки? Почему один элемент это обязательно char, а не строка? Это же ппц как неудобно, дианмическая типитизация удобнее же в разы.
4)Почему во многих языках какой-то пердолинг с матрицами? Я создаю Очередь, чтобы накидать элементов в ОПРЕДЕЛЕННОМ(??) порядке, и только потом делаю ToArray. Зачем такие сложности/
5)Суммирая выше сказанное, насколько эффективно писать на сишарпе? Насколько быстро? Я так понимаю быстро, кратко и эффективно жонглировать махинациями как в яваскрипте не получится. На питоне в 3-5 раз быстрее пишется код, чем не яве. Какое же место у сишарпа в таком сравнении?
1)Чет слишком абстрактный вопрос. По шарпам справка на мсдн, по юнити, очевидно, на сайте юните.
2)Не думаю.
3)А? Строка может быть из одного символа. Но строка и символ это разные сущности, выбирай что тебе надо. И при чем тут динамическая типизация?
4)Хз зачем ты так сложно делаешь. Массив и так сохранят порядок, если нужен "резиновый" массив, то это List<T>.
5)Эффективно. Быстро. Как в жаваскрипте не получится, это не жава скрипт. Но зато можно как в шарпе.
Шарп и жс разные языки во многом, и чем раньше ты пеерстанешь пытаться писать на шарпе, как будто-то ты пишешь на жс, тем проще и быстрее будет освоение шарпов.
Что?
>>57084
>справка мдсн
Вот это?
https://docs.microsoft.com/en-us/dotnet/api/system?view=netframework-4.8
Я во всем этом шарить должен?, int32-64 T_T
>выбирай что надо
Я задачки на сайте просто перерешиваю. То что решалось за 2 секунды на яваскрипте вызывает у меня боль в голове на сишарпе.
Дан аргумент char, его надо использовать в манипуляциях, добавляю строку к чар-ошибка, нет автоматической конвертации, то бишь динамической типитизации.
>хз зачем
Array в сишарпе создается как есть и его изменять нельзя. Нету Push метода элементарного, так? Мне же нужно прогонять-cоздавать сборку элементов, менять их, манипулировать ими. Но вернуть функция должна именно Array, а не List или Queue.
>быстро
Да. я понимаю, я пытался что-то там писать на крестах сколько-то лет назад, когда не было возможности на жс, директивы, поинтеры какие-то, ооп. книжки вумные читал. 'Полноценные' языки, с интерфейсами, абстракцией, доступом к функциями и так далее. Надо осваивать.
Спасибо за ответ.
Слышал о реактнайтиве, но не трогал. пытался изучать реакт, госпади такая пердольная бессмысленная скотина, и вечные срачи вокруг этих фрейморков нифига не мотивируют их как-то изучать.
Компиляторы, бандлы всякие. Ты можешь писать на одном языке, а потом конвертировать на платформу другого. Например у андроида есть ndk bundle с помощью которого можно конвертировать написанный c++ код на понятный яве машине.
Учитывая популярность жс, на нем скоро, если не уже, будет писаться все.
Я занимался cocos2d, он раньше был только на крестах и луа, сейчас жс добавили.
>вызывает у меня боль в голове на сишарпе.
Ну так возьми учебник по шарпу. Да, тут будет не так как в жс, хз что тебя удивляет.
>автоматической конвертации, то бишь динамической типитизации.
Хм.. ты писал на жс, но так и не понял, что такое динамическая типизация... подозрительно.
>изменять нельзя
можно
>Нету Push метода элементарного
Еще возьми книжку по компутер саенс и структурам данных, у массива и не должно быть пуша.
>Мне же нужно
Бери необходимую структуру данных, благо в стандартной реализации все основные есть.
>вернуть функция должна именно Array
К счастью разработчики фреймворка запилили ToArray, и любой IEnumerable можно перегнать в массив одной командой.
>решалось за 2 секунды на яваскрипте вызывает у меня боль в голове на сишарпе.
Не парень, учить тебе азы еще и учить. Базовые типы во всех языках одни (в твоём жсе они тоже есть, но спрятаны, и если ты не понимаешь что ты делаешь, то можешь огрести). Алгоритмы работы с ними одинаковые. Основы работы с памятью и ЦПУ везде одинаковые. Как только ты это для себя откроешь, то у тебя таких вопросов больше возникать не будет. Ты сможешь решить те задачи хоть на шарпе, хоть на руби, хоть на питоне, хоть на кложе, хоть на <дофига языков> с примерно одинаковой эффективностью без всякой боли.
В шарпе тоже можно сделать Queue и потом ToArray().
Библиотеки для работы с математикой есть везде и легко гуглятся.
Матрицы - это массивы. В некоторых языках есть доп сахар для работы с ними (Питон). В шарпе можно добавить сахар самому или подключить готовую библиотеку.
>Нету Push метода элементарного
Потому что в жс массивы на самом деле не совсем массивы. Они выполнены в виде стэке, поэтому у тебя появляются пуш и поп.
В памяти же массив - это жёстко выделенный участок. Твой жс просто всё это от тебя прячет за слоем динамической магии. И ты можешь огрести по самые помидоры, не зная как работают внутреннсти твоей виртуальной машины.
Шарп предотвращает множественные выстрелы себе в ногу (жс позволяет выстрелит себе в пах и в голову одновременно). Поэтому если тебе нужна какая-то хитровыебанная структура, то пили её сам и не вини потом язык/фреймворк/аллаха в твоих проблемах.
>не понял
И что же это?
>не должно быть пуша
в жс есть...но в жс вещи не вещи, да-да
>к счастью
Еще бы они не запилили ><
>>57251
>спрятаны
Так про это я и говорю. ЖС проще тк это более абстрактный язык, чем с-семейство и прочие явы. Надеюсь после изучения шарпа будет со всем проще как ты сказал.
>в шарпе также
Я про него и говорил.
>>57253
Спасибо ребята.
Как сделать чтобы тест из текстбокса я мог определить в классе?
Ну-ка покажи еще пару строчек сверху
Вот я говно на винформах делаю.
В геймдеве платить будут меньше, делать и знать придется больше.
Зато работа интереснее.
За время своего существования шарп медленно, но верно сокращает разрыв в популярности с джавой. Если 15 лет назад Джава была в 6+ раз популярнее шарпа, то сейчас всего в 2 раза. Думаю лет за 3-5 обгоним окончательно.
Одно и то же. Они же не равномерно теряют в популярности, джава скоро так дотеряется что шарп станет популярнее.
Build
|
---Dependencies
| |
| ---тут все дллки зависимостей
|
|
---тут дллка самого проекта
Сборка в один исполняемый файл не подходит.
Я вроде бы гуглил, но толком ничего не нашел. Буду благодарен за объяснение или тычок где об этом у майков можно почитать.
На нем даже конченные имбецилы типа меня могут клепать программки, эффективность в разы больше.
Я не уверен что есть конкретно такая опция при билде: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet#dotnet-commands
--output - сюда будет укладываться всё.
Но для таких кастомных решений есть post-script в самой вижуал студии. Если используется CI/CD, то там еще проще скрипт запихать, который разложит файлы куда надо.
Естественно придётся ссылки на зависимости в твоём основном проекте с точкой входа править.
> Естественно придётся ссылки на зависимости в твоём основном проекте с точкой входа править.
А как это можно сделать, не подскажешь?
Если у тебя файл улетает больше одной тысячи строк на мобилке то ты что-то делаешь не так.
Строки кода в проекте считают по всем файлам, а не по одному. Ни в одном проекте не должно быть вручную набитых файлов с 1к+ строк кода.
Еще вопрос - как запускать именно билд сборки в wwwroot? В чем загон - пишу фронт на React, запуск в дебаге - npm start. Когда делаю билд с помощью serve, то запуск билда происходит только с serve -s build. Но блять в asp.net core только npmScript.
Помогай анон, заебался уже тыкаться. И главное туториалов - нет. Даже ебучий MSDN не может расписать, как с WebApi работать.
Ну, во-первых, тебе к жс чуханам в тред надо. У тебя 2, на 100% отличающиеся и живущие друг от друга в полной изоляции, приложения. Дотнет запускается как делать нефиг. Теперь тебе надо понять как отдавать кучу статик файлов (js, css, media) через хттп запрос клиенту.
Во-вторых, Не пользуйтесь блять костылями, которые делают вид, что весь твой код живёт в одной коробке и даёт некую абстракцию, через которую можно очень лимитированно настраивать твоё клиентское (Реакт) приложение.
>asp.net core только npmScript
нет ни в дотнете ни в коре никаких нпм, нод и прочей клиентской чухни! Это просто доп абстракция через плагины, которая сегодня работает, а завтра нет.
Сам не работал, но если допилят (хотя уже и сейчас есть проекты на нем), будет как минимум интересно. Жс точчно не убьет.
>тебе к жс чуханам в тред надо
я через Debug запускаю Node.js, мне нужна релизная версия. Чем мне JS-сники помогут, если у меня запуск приложения должен тригерить запуск Node.js сервера? У меня они должны подниматься и ложиться синхронно.
>Не пользуйтесь блять костылями
какими именно? Все, что я написал - это практика web api
>нет ни в дотнете ни в коре никаких нпм, нод и прочей клиентской чухни! Это просто доп абстракция через плагины, которая сегодня работает, а завтра нет.
Как нет, если есть. У них же все равно связь должна быть. Как минимум билд реакта должен лежать в wwwroot в виде staticfiles. Разве нет?
Кто работал с WebApi - дайте совет
Так кто так клонирует как на первом пике? Если сделать так:
Type x = this.GetType();
Assembly y = Assembly.GetAssembly(x);
return y.CreateInstance(x.ToString());
То всё нормально работать будет.
1) На msdn, просто так сходу не получится, для этого нужно хотя бы один нормальный язык знать, а не динамикопарашу, которая создана для того чтобы плодить говнокод о работе которого ты ни малейшего представления не имеешь.
2) Конечно, потому что C низкоуровневый язык и входит в одно семейство языков с Шарпом, а жопаскрипт это динамика, которая создавалась как дополнение к языку разметки, а не полноценный язык.
3) Во-первых, он есть и это тип String, во-вторых, любая строка это массив символов. Даже "a" это массив из одного элемента char 'a', об этом помнить нужно.
>дианмическая типитизация удобнее же в разы.
Она делает много той работы, которую ты мог бы сделать и определить на момент написания кода. Это пустая трата ресурсов и времени.
4) Потому что так работает строгая типизация. Программа должна четко знать что и откуда должно вернуться. Это удобно, потому что в случае ошибки компилятор тебе даже запустить такую программу не даст. В твоём JS ты можешь нахуячить 1к строк кода, а потом проебаться несколько часов, пытаясь понять что же с ним не так, а всё потому что JS'у похуй на то что принимать и возвращать.
5) Шарп создан для того чтобы писать качественный, легко поддерживаемый и переиспользуемый код в больших количествах. Он быстрее и ресурсоемок в сравнении с Жабой, у него больший ООП функционал в сравнении с Жабой. С динамикопарашей можно не сравнивать, потому что у неё другие предназначения (быстрее нахуячить код и запустить его, либо нахуячить костыль). Как только ты дойдешь до создания крупных проектов, начнёшь изучать паттерны проектирования, так сразу поймёшь все плюсы ООП языков.
>>58216
https://www.amazon.com/Building-Applications-NET-Core-JavaScript/dp/1484253515
Вот эту книгу тебе прочитать надо. На торрентах должна быть, если не хочешь отдавать 35 долларов. Всего 615 страниц.
спасибо за сорс. Очень странно, что никто не знаком с этим, ведь это обыденная практика для разработки проектов. Правду писали, что тут одни вкатыши сидят
По этому отдельные книги создают, а ты хочешь чтобы тебе всё в одном посте описали и при этом относительно твоего поделия, которое никто даже не видел. Как ты себе это представляешь? Совсем тупенький?
>в одном посте
ты хотя бы другие мои посты почитал, о чем я писал, прежде чем царапать свою хуйню
Почему у вас так много вариантов явного преобразования/приведения типов? Скобочки, Сonvert,.Parse/TryParse. Нахуя их больше одного?
Видно, что ты умный, но я не спрашивал, в чём разница, а почему способов сделать одно и то же действие больше одного(а как минимум 3).
разные задачи, не? Хочешь 0 - ToInt, хочешь Exception - Parse. Или ты думал просто так будут методы оставлять?
Почему всё это в разных местах находится? Будто разобрали лего-конструктор и его части распихали по разным наборам.
тупое ты уебище, я про свои посты говорю. Смотри, что я в предыдущих постах пишу про React+Core
Не буду.
Скобочки нужны для приведения типов, ты не сможешь привести тип string к типу int, поэтому компилятор будет ругаться если ты напишешь (int) "23423"
>Сonvert
У него большое количество перегрузок для всех методов, т. е. его можно использовать там где у тебя может быть не только строка, как у Parse и TryParse, но и другое число, символ, объект и т. д.
>Parse
Используется там где ты точно знаешь, что операция не вызовет эксепшена. Или там где для тебя важна производительность, потому что TryParse медленнее.
>TryParse
Удобно использовать в условиях и там где ты не уверен, что тебе точно придёт строка, которая парсится в число.
сяп
Мы несколько проектов в прод запустили, часть на старом knockout, остальные на Angular и React.
>Разве нет?
Нет, это всё "официальные" костыли, плагины, которые за тебя триггерят npm команды и скрывают настоящую конфигурацию ноды и реакта.
WebApi крутится сам по себе на бэкенде не зная ничего о природе клиента. Билдиться вся эта клиентская муть должна отдельно. Хостить в проде надо через реальный сервер, а не дев сервак от ноды, который только для разработки можно использовать. Ты можешь свои статик файлы через тот же Kestrel или IIS отдавать, настроив его отдельным приложением или сделать еще один endpoint в твоём WebApi для возврата Реакт файлов.
Ты можешь свои скрипты навесить на билд процесс либо в самой студии и потом dotnet build/publish будет их подцеплять, либо делать отдельный билд скрипт и хранить его вместе с репо.
Бойся Strong Coupling как огня https://en.wikipedia.org/wiki/Coupling_(computer_programming).
С твоим подходом ты tight coupling в самые корни запускаешь. И судя по твоим постам ваши абстракции всё мясо напрочь скрыли, потому что ты не понимаешь как твоё собственное творение внутри работает.
Потому что делать швейцарский нож в программировании не есть хорошо. Оно станет тормозным, будет тяжело поддерживать и оно начнём вести себя магическим образом в особых ситуациях.
Вшитый способ - через скобочки. Но он не всегда будет давать нужный результат. Например string to enum, у которого есть какой-нибудь Display аттрибут. Откуда рантайм должен знать, надо тебе по аттрибуту или по имени enum конвертацию делать? Case in/sensitive?
А еще есть всякие дженерики и их in и out типы: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/in-generic-modifier
И еще мильён нюансов.
В мвс юзал fluentscheduler в свое время, в коре вроде из коробки есть что-то такое, гугли
Любой в котором требуется выполнения долго выполняющихся задач. Как пример - парсер новостных сайтов, который в несколько потоков собирает нужную информацию из списка сайтов и сразу соединяет всё в единый массив.
Поглядел пару книг, там тупо справка, на метаните полтора упражнения, большинство это вопросы на самопроверку. Не хотелось бы оказаться в ситуации, когда вроде все понимаешь, а написать ничего не можешь.
https://www.learncs.org
Я бы начал с примеров на гитхабе от самого дотнета https://github.com/dotnet/samples
Заодно с git'ом подружишься.
С гитом уже знаком, а за ссылки спасибо.
спасибо, я тоже задумался над тем, что это полностью сепарированные сервера должны быть и вообще не имеют никакого отношения друг к другу. Мануалов просто не нашел, не знаю где покопаться, сейчас буду книжки рыть, где можно найти такое. У меня на самом деле еще много вопросов:
1. services AddSpaStaticFiles и весь остальной треш нужно пихать?
2. Компоузы только для облачных серверов идут? Нужен ли он вообще?
3. Как установить связь между реакт проектом и core приложением? Ловить/отправлять реквесты между портами?
А то хочу книгу, но про Шилда встречаю негатив.
Ранее мне советовали Троесена - мне совсем не понравилась, автор тупо навалил все в кашу - почему до классов, и ооп еще не дошло, а у него уже в первых главах про наследование от object и методы?
Еще проблема что он выливает тонну материала без практики, я на второй день забыл больше половины прочитанного. Короче, тяжело читать
Что еще можно? нужна толстая книга, но с более продуманной структурой
>Троесена - мне совсем не понравилась, автор тупо навалил все в кашу - почему до классов, и ооп еще не дошло
Вот выдержка из третьей главы:
C# demands that all program logic be contained within a type definition (recall from Chapter 1 that type is
a general term referring to a member of the set {class, interface, structure, enumeration, delegate}).
>recall from Chapter 1
Т. е. о классах и типах тебе в первых главах рассказали то, что должно интересовать новичка. Более подробно ты будешь со всем этим знакомиться в следующих главах.
>он выливает тонну материала без практики
Что ты под практикой подразумеваешь? Если тебе задачи нужны, то для этого есть leetcode и другие codewars, либо идеи для пет-проектов. При этом всё это не нужно, так как у него весь материал сопровождается примерами, смотри на них и понимай.
И если для тебя Троелсен это тонна, то попробуй открыть Альбахари и его C# in a nutshell и посмотри сколько материала у него. Там один класс String и его методы это несколько глав.
>почему не рекомендуют Шилда для изучения шарпа?
Знаю только, что Шилда в ВУЗах рекомендую и что у него по плюсам и джаве еще книги есть. Открой и почитай, но если тебе Троелсен не зашел, то вряд ли проблема в авторе.
>Т. е. о классах и типах тебе в первых главах рассказали то, что должно интересовать новичка
вот эта первая глава в итоге - одна сплошная каша.
да и ничего он там не рассказал
>>59250
>Что ты под практикой подразумеваешь
материал надо как-то закреплять, дело не в задачах, надо начинать с малого и возвращаться к этому когда читатель набьет руку. Опять же - нахрена в первых главах выливать поток методов Object/Array? Я еще даже самими классами не пользовался, а уже должен запомнить все их методы.
С# не первый мой язык. Я изучал С++ - там в книгах хорошо все структурировано. И с PHP тоже пришлось познакомится - там тоже в книгах все нормально упорядочено.
Короче, тут проблема именно в самом авторе - он пишет какую-то кашу, не понимаю почему его советуют первой книгой. это я уже знаю что такое классы, наследование, интерфейсы, передача по ссылке/значению - новички этого вообще не знают.
(ну а конкретно моя проблема, что я не хочу изучить поверхностно (иначе бы просто посмотрел лекции в ютубе, да и так уже сам пишу код), я хочу сразу детально изучить этот ЯП - но из-за такого авторского стиля, оно просто из головы вылаливается, да и тяжело читать тягучую теорию
Рихтера тогда навернуть попробуй
2 пик открепился
Объявлять его на уровне выше, чем твои методы.
> используется массив, но его надо автоматически сгенерировать от 1 до n, как это можно сделать?
var mas = System.Linq.Enumerable.Range(1, 5);
Вот создал я проект установщика. Мне в нём нужны свои формы. Жмякаю на нём ПКМ -> Вид -> пользовательский интерфейс -> добавить диалоговое окно. На выбор только окна с радио баттонами, чек боксами и текстовыми полями. Причём в ограниченном количестве, не больше четырёх. Так, а если мне, га пример, нужна форма с пятью радиоБаттонами, как мне быть?
Даны 5 целых чисел. Вывести сумму положительных.
Начальные данные: 5 целых чисел на одной строке через пробел.
Есть ли способ распарсить стринг и сразу заполнить массив интов, например? Как-то утомляет каждый раз сплитовать на массив строк и парсить каждую руками, а циклы условия задачи не разрешают
выглядит изи, но мои познания знания в сисярпе ещё не позволяют такого вытворять.
я тут про Array.ConvertAll только узнал, а у тебя лямбды и прочее страшное. нихуя не понятно, но очень интересно. спасибо, Анон
В смысле не позволяют. Вот тебе показали что-то новое. Сиди дрочи мануалы, документацию, лабы, пока не поймёшь. И вот, ты уже знаешь это и применишь где-то дальше. Или по крайней мере у тебя в голове будет закладка, что что-то такое возможно и при надобности ты легко нагуглишь/вспомнишь через подсказки в редакторе.
мимо-другой-анон
0. Берем строку.
1. Split разбивает строку на массив, используя пробел ' ' как разделитель элементов.
2. Select как бы говорит: для каждого элемента x примени int.Parse(x, NumberStyles.Any), то есть распарсь число с любым форматированием.
3. Where — это фильтр: возьми только те числа, которые строго больше 0.
4. Ну и наконец Sum — это просуммируй все числа, что дошли до этой точки.
>>60066-кун
консольное приложение на net core 3.1, запущено под win64
надо вызывать функции из рандомной PE дллки
то есть в рантайме задается файл библиотеки, имя функции, количество тип порядок аргументов, тип возвращаемого значения и соглашение о вызове
библиотека может быть написана на любом языке, но собрана под винду
в какую сторону копать? если сигнатура известна на время компиляции, то тут всё просто, extern и так далее
Вопрос по WPF. Стоит задача иметь только одно окно, и менять его содержимое по приказу view model'ей. Вот этот https://stackoverflow.com/a/25399943/7162511 гражданин советует объявить пары viewmodel-user control через data template'ы в App.xaml, а дальше просто биндить контент в <ContentControl>'е в MainWindow.xaml. Всё бы ничего, но у меня все viewmodelы от базового класса принимают в конструктор объект, конструктор которого в свою очередь тоже имеет параметры. Вроде как как то можно было создавать xaml'е объекты с параметрами и я даже почти не против, но я хз как там же в App.xaml в дата темплейты передавать объекты как аргументы конструктора viewmodelов. Или в таком случае только в MainWindow.xaml.cs самому создавать переменные вью моделей, передавать им свой объект? Как в таком случае биндить юзер контролы к дата контексту окна? Мне пока в голову приходило только сделать какой нибудь костыль на событиях, на которые бы подписывался main window.cs и менять юзер контрол контента в обработчиках события
А зачем тебе передавать параметры в App.Xaml и вообще создавать вьюмодели напрямую в xaml? Почитай про ViewModelLocator и DI.
Потому-что это код из разряда "смотри как умею" который не очевиден для понимания и противоречит философии linq, мутировать внешнюю переменную в linq запросе это трешак. Код должен быть максимально простым и очевидным. Гораздо лучше написать какой нибудь GetColumnSum extension метод в котором в цикле for пройтись и получить сумму чем городить вот эти хаки с кастом и т.д.
Я не спорю что колоть жопой орехи - нехорошо, просто стоит условие
>Overlapping intervals should only be counted once
Overlapping intervals это строки в массиве? И как тебе тут linq поможет вместо простого for?
Да я жопочтец ебанутого тз. Вот фулл:
>Write a function called sumIntervals/sum_intervals() that accepts an array of intervals, and returns the sum of all the interval lengths. Overlapping intervals should only be counted once.
>Intervals
>Intervals are represented by a pair of integers in the form of an array. The first value of the interval will always be less than the second value. Interval example: [1, 5] is an interval from 1 to 5. >The length of this interval is 4.
>Overlapping Intervals
>List containing overlapping intervals:
>[
>[1,4],
>[7, 10],
>[3, 5]
>]
>The sum of the lengths of these intervals is 7. Since [1, 4] and [3, 5] overlap, we can treat the interval as [1, 5], which has a length of 4.
До меня только что дошло что я должен что-то сделать с i[0] и i[2].
Мне нужно получить список процессов, которые лезут в интернеты (PID+ локальный адрес/ремоут адрес/порт/состояние). Нарыл оч пожилые статьи, где используются AllocateAndGetTcpExTableFromStack и AllocateAndGetUdpExTableFromStack из iphlpapi. Доки говорят что с виндуз висты эти функции не работают. Так вот, как мне ещё можно получить эти данные? стянуть с нетстата не предлагать. И да, я новичок, поэтому желательно на пальцах, заранее спасибо.
Пробовал, не получилось. Не пойму как привязку целого элемента, а не одного свойства делать
Два чая тебе, анон. Очень помог, ебался с этой проблемой три часа к ряду
>>60457
бери с помощью static extern из kernel32 loadlibrary и getprocaddress. ими можешь из любой библиотеки взять адрес экспортируемой функции. всё остальное у тебя вроде как есть. без loadlibrary и getprocaddr такое нереально сделать за исключением лютого шаманства вуду с какой нибудь эзотерической ручной загрузкой .dll в рантайме
хотя напиздел. тебе ещё надо понять, как вызывать функцию пинвоуком без сигнатуры в C# коде. этого я не знаю
Сейчас по РАБоте плотно сижу на net.core, но до этого около полугода писал пет-проджекты на UWP. С тех пор оно так и не взлетело
Особенно реквестируются аноны из ДС и Германии/Австрии
Можно ли сделать так чтобы разные объекты слушали один и тот же event? Или это только Main может делать?
>джава скоро так дотеряется что шарп станет популярнее
ты идиот, ок? У каждого продукта есть цикл существования. У этого цикла есть пиковая точка в период наибольшей популярности. У Java этот период уже прошел и идет период рецесии. У .net, судя по твоему графику - период пиковой популярности уже прошел, но уровень стагнации не такой резкий, как у Java. Какой можно сделать вывод: .NET-у не доверяли раньше, не доверяют сейчас, рынок - это скорее всего те, кто уже написал свой интерпрайз на C# и пока бизнес не закрылся - они его сапортят. Это так же означает, что если падает Java, то по логике должен подниматься .NET, раз рынок имеет свою емкость. Но т.к. .NET не растет, это означает, что используют другие технологии, которые кажутся им более перспективные.
Итог: .NET как был говном, так и остался. На смену Java прийдет Kotlin или вообще Node.js (who knows), но точно не .NET.
Занавес.
Идиот тут только ты, который забыл, что кроме существующих языков постоянно появляются новые
Чтобы стоять на месте в относительных цифрах надо расти в абсолютных, что шарп и делает успешно. А жава нет.
С# неплохая вещь на самом деле, ха-ха. Основные директивы я уже запомнил и так, они так логично и лаконично устроены, что на жс приходилось писать колесами на много функций, а потом сохранять их до следующего раза в гитхабе, тут просто уже все встроено, столько уже готовых методов из коробки, кайф. И сам код выглядит красивоно это было ожидаемо от си семейства для меня всегда.
Я просто был очень занят и уставший, мне нужно было просто отдохнуть и потратить пару дней на листание основ.
На событие может подписаться любое количество обработчиков, и даже один обработчик можно подписать на событие несколько раз. И при чем тут Мэйн? Поясни, желательно с кодом.
Ну давай, спорим, что C# в Google Trends станет популярнее Джавы в пределах 4 лет?
Ситуация следующая: в apiresources я добавил сам сервер, чтобы получать доступ к его контроллерам через сторонний клиент. Клиента создал, granttype.ClientCredentials.
Запускаю сервер, запускаю клиента, получаю бибу, так как клиенту приходит старница авторизации.
Вопрос: существует ли способ сделать из identityserver апиресурс, к которому можно подключиться о clientcredentials?
Что написано в Startup сервера:
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5001";
options.RequireHttpsMetadata = false;
options.Audience = "identityserver1";
});
Конфиг для клиента:
ClientId = "console",
ClientSecrets = { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.ClientCredentials,
AllowedScopes = new List<string>
{
"identityserver1"
}
Что написано в клиенте:
var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = "console",
ClientSecret = "secret",
Scope = "identityserver1"
});
Что написано в Startup сервера:
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5001";
options.RequireHttpsMetadata = false;
options.Audience = "identityserver1";
});
Конфиг для клиента:
ClientId = "console",
ClientSecrets = { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.ClientCredentials,
AllowedScopes = new List<string>
{
"identityserver1"
}
Что написано в клиенте:
var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = "console",
ClientSecret = "secret",
Scope = "identityserver1"
});
>Я дебил, который не умеет читать
мой пост
>Но т.к. .NET не растет, это означает, что используют другие технологии, которые кажутся им более перспективные.
хотя что с тебя взять, с вкатыша...
>>60885
C# сам по себе хороший язык (пока что), хотя уже начинают пичкать сахара, как в Java. Насчет JS - мелкософты продвигают свой калл в виде Razor pages или Blazor, поэтому и нужны костыли с интеграцией
>>60972
давай поспорим, что когда ты окончишь свою шарагу, то ты будешь учить уже другой стэк?
>>60997
>options.Audience = "identityserver1";
вот твой косяк. По JWT токену есть дока для мелкософтов
Шарпач, помогай. Есть какие-нибудь варианты как хранить данные по типу List<>, только с возможностью добавлять элементы в конкретные индексы, а пустые места сжимать? Что-то вроде варианта с Dictionary<>, чтоб был ключ-индекс и значение. Dictionary<> не устраивает тем что жрет оперативку. Если складывать в него int, а индекс брать как byte, то он сжирает какие-то дикие значения при большом количестве небольших Dictionary<>, что-то в районе 3 раз больше, чем даже массивы интов с пустой памятью между элементами. Что напердолить, только писать свой велосипед?
>ты будешь учить уже другой стэк
Может и буду, только какое отношение это имеет к теме C# vs Java? А ты от спора слился.
>вот твой косяк. По JWT токену есть дока для мелкософтов
Спасибо за ответ, можешь уточнить в чем проблема? Если определять ApiResource любую другою апиху (не сам IdentityServer), то все работает прекрасно, почему в случае с IdentityServer это косяк? Заранее спасибо за ответ.
> по типу List<>, только с возможностью добавлять элементы в конкретные индексы, а пустые места сжимать?
В лист можно вставлять в конкретное место и можно вызвать TrimExcess(). Чем не подходит?
>Что-то вроде варианта с Dictionary<>,
Так по типу List или ключ-значение?
> можно вставлять в конкретное место
Ты про Insert? Он же кидает исключение если за пределами диапазона.
> TrimExcess()
Это же просто очищает лишнюю память в конце, Capacity уменьшает до количества элементов.
> Так по типу List или ключ-значение?
Чтоб я мог по индексам писать/читать, но без пустой памяти между значениями.
А я понял. Ну тогда словарь. Там конечно будет оверхэд на хранение значений + ему надо хранить еще ключи. Но в три раза при использовании <byte, int> - это ты что-то не так делаешь.
> ты что-то не так делаешь
Да я знаю что не так делаю. У меня в них мало элементов, а сами словари в дереве и их много, из-за этого они сжирают память как не в себя. Придётся самому облегченный велосипед делать, мне производительность не критична, а вот памяти мало.
3 года продакшна на шарпе, из них последние полгода на коре втором - это вкатыш? Нихуя ты хуесосина охуел, ну когда нечего пиздануть назови собеседника вкатышем.
Имбецил блядь.
бамп вопросу
И всё? Т.е. если я пишу с большой буквы, то могу не писать this, но если с маленькой, то обязан, потому что иначе он будет думать, что это передаваемый параметр? Это единственное отличие? А как вообще это называется, чтобы я мог гайдлайн почитать, в каких случаях как принято именовать.
Бля, как всегда, только спросил, сразу нашёл ответ.
>Fields are normal variable members of a class. Generally, you should declare your fields as private, then use Properties to get and set their values.
А расскажите ньюфагу, как посмотреть как внутри устроен класс / метод?
Я нашёл вот это, а в самой Студии никак?
https://referencesource.microsoft.com/
я эти сказки про nodejs ещё в 2012 году слышал, nodejs это свинячье дерьмо (who knows)
Забей, я там вообще всё перепутал.
Но вообще я спрашивал про способ. Ведь можно написать num1, а можно Num1. И потом в теле конструктора можно написать num1=n1, а можно this.num1=n1. И я вот не понял, в каких случаях писать this, а в каких не писать.
ни в каких, компилятор сам за тебя всё напишет.
System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(IntPtr, Delegate)
Delegate.DynamicInvoke(object[])
и в нет коре 3 не нужно дергать кернел32, там есть System.Runtime.InteropServices.NativeLibrary. грят, можно сошки линуксовые также вызывать
num1 != Num1, имена переменных case sensitive
если у тебя в скопе есть локальная переменная num1, то надо писать this для обращения к члену класса, а не к ней
Есть сайт без документации апи, надо чтобы мой бот зашёл на этот сайт авторизованный. Начал гуглить про куки, и кажется понял, что для того чтобы авторизоваться, надо правильно отправить post запрос по правилам, которые есть на сервере. Вот на пикче и видосе показано о чём идёт речь, в первом параметре у класса, надо знать правило, по-которому войти можно на сайт, второй параметр - ключ. Где это можно найти? Полазил в настройках хрома, 22 кукиса, не понятно что конкретно брать. Хотя на 2 пикче кукис отличается, но мне не нравится, что там написано не доступно для скрипта, что это вообще значит?
https://youtu.be/hlixpNm8RBg?t=295
Это пиздец, а не вопрос. Ты для начала смешал аутентификацию вместе с авторизацией. И то и другое может миллионом разных путей делаться через миллион разных источников данных. Тебе нужно знать как конкретно там аутентификация настроена. Если они всё настроили через какой-нибудь AD и/или лимитируют аутентификацию для внутренней сети only и у тебя ни туда ни туда доступа нет, то у тебя никаких шансов в принципе нет.
Хм, хорошо, спасибо.
Если что не так, извините.
Как обычно.
Ну или IDE, плагин для нее, етц. А то заебывает ждать по несколько секунд на каждую сраную переменную.
Потому что майкрасофты впервые за десятки лет начали идти в правильном направлении, а именно - кроссплатформенности и опенсорса. .NET Core уже божествененн, даже страшно представить что нас ждёт с выходом .NET 5
Изучи уже Roslyn analyzers - https://docs.microsoft.com/en-us/visualstudio/code-quality/roslyn-analyzers-overview?view=vs-2019
Можешь подключить что-нибудь из этого и больше голова о кодостилях болеть не будет:
http://pihrt.net/Roslynator/Analyzers
https://rules.sonarsource.com/csharp
У этого добра есть версии, которые поддерживают старый .Net Framework.
Это не то, что нужно. Поясняю:
Есть декомпилированные исходники программы, они собираются.
Более новая версия защищена обсфукацией. Ее снял, программу декомпилировал. Теперь надо на основе исходников первой воссоздать исходник второй.
SharpDevelop прекрасно справляется с переименованием всяких gClass_88.decimal_1 в myClass.data, но больно медленно работает.
ASP.NET dev, C#
>к теме C# vs Java?
Я пишу, что # не в тренде, я вообще хз нахуя вы джаву приплетаете. Уже писал выше, что джава идет на спад, но в свое время она была на пике. Сравнили хуй с пальцем.
>>61097
я увидел, что у тебя identityserver1 тянется из конфига, попробуй явно инициализировать. По сабжу - я дрочил когда то через этот Client creditals по тутору - пролетел и не заметил. Там сложного ничего нет.
>>61227
ты аутист, судя по постам. 3 года у тебя могут быть только шараги, а не в продакшине.
Что за х? Я не могу пустую строку-букву сделать? Что за бред. объясните.
Символ не может быть пустым. А строка может, т.к. это массив символов, который может иметь нулевой размер. Всё полностью логично. Хз, что тебе не нравится.
Ну клиент креды это реально легко, я тоже за пару минут сделал, тут сложность с authorization code была.
Я уже решил траблу, если кому интересно, то нужно настроить localapi в identity server и все будет огонь.
Посмотрел код, который я скинул выше, там клиент креды... ясно я даун, просто забей.
Resharper
Я этот ответ уже читал на стаоверлфлоу. ты-вы издеваетесь?
Как я должен алгоритмы писать легко и лаконично если само устройство языка загоняет меня в рамки определенного дизайна и пердолинга. Нету даже Empty метода, ничего нету.
>>63871
Спасибо, но нет, я уже понял что скобочки разные для разных целей.
а для чего собака @ нужна перед Regex? флажок проверок по всей строки или что?
В штатах (можешь глянуть по LinkedIn и Indeed) по шарпу вакансий завались в каждом большом городе. В Канаде тоже хватает. За остальную европу не скажу. Хотя у нас во всяких Ирландиях и Британиях дофига офисов.
>а для чего собака @ нужна перед Regex? флажок проверок по всей строки или что?
1) Собака ставится перед строкой, чтобы не приходилось пердолиться с дублированием обратных слешей если у тебя их много в строках. Но в таких строках не поддерживаются управляющие последовательности.
2) Собака ставиться перед зарезервированными словами, если по какой-то ебанутой причине ты хочешь их использовать в качестве идентификатора.
Например
int class = 5; выдаст ошибку,
а
int @class = 5; сработает, и даст тебе переменную с именем class (символ собаки в этом случае в имя не попадает)
> Как я должен алгоритмы писать легко и лаконично
Поясни, как наличие пустого символа может тебе помочь писать "легко и лаконично"? Вообще я себе не могу представить ситуации, в которой потребуется пустой символ.
Символ ведь это просто число, оно не может быть пустым. Тебя же не удивляет, что ты не можешь написать int a; и потом попытаться взять какое-то значение из этой переменной, не задав его заранее.
Ну ты можешь воспользоваться наллаблом и словить NRE где нибудь
char? ch = null; //нeт символа
или исолзовать налл символ и обрабытывать его по-особому
ch = '\0';
У него там примеры практические есть, ты их не копируй, а пытайся воссоздать по прочитанному. Вот он говорит "создадим класс такой то с такими то свойствами", вот ты и создавай, а потом смотри правильно ты это сделал или нет.
Мерси боку
>>64225
>меня не удивляет
я просто не пробовал)) я думал будет null или undefined
Ну есть слово, я должен проверить начало и конец, и отдельно модифицировать серединку, а затем вернуть новый результат по кусочкам.
В жске я бы просто сделал a = "", b = "" и соответственно в овсновной функции a + str + b и все было бы чики-пуки без всяких ошибок. Тут же я прямо приуныл, такая элементарщина, а я не могу ее сделать за пару секунд как обычно делал.
>>64317
>нет символа
Я писал, мне он что-то ошибку выдавал.
>\0
А это откуда пошло, я уже видел такой ответ. Так и проверять ch == \0 ?
>по шарпу вакансий завались в каждом большом городе. В Канаде тоже хватает
Только кое-что забыл:
- легаси, кора почти нет
- низкие зарплаты, в сравнении с каким-нибудь другим стеком
>каким-нибудь другим
Это каким? Если жаба падает.
Тут выше всякие новые языки расписывали, статей в интернете много про великое будущее Rust, Kotlin, Go и прочих Dart-ов, я для интереса забежал в тредик Rust-a и что я вижу: никого нет, ничего нет, сплошное сектанство, сам создатель уже дропнул свой язык, лол.
Я с кором последние 3 года работаю, легаси видел в 2017 году, так что не надо мне тут.
Что есть низкая зп, интересно? Вкатывай цифры кодомакак, я поржу.
>Я с кором последние 3 года работаю, легаси видел в 2017 году, так что не надо мне тут.
Я крайне сомневаюсь, что ты работаешь в штатах, на коре, учитывая тонные легаси.
Здесь нужно сделать ремарочку: не ваша галера, что-то делает на коре для заказчика, или ты там себе удаленку нашел.
>>64654
>Что есть низкая зп, интересно
До 150к, если у тебя опыта > 3 лет
В СФ нанимают language agnostic. Во всяких НЙ, Остинах, Сиэтлах и прочих айти хабах та же фигня. А там внутри всяких фэйсбуков они чего только не используют. У того же Амазона есть сервисы, которые на коре крутятся. Мне тоже и на жабе и на жс и на тс и на питоне приходилось проекты пилить или с них на кор перетаскивать.
На счёт легаси - да, его много, потому что старый фреймворк с начала нулевых вкатился, а кор стабильный только в 2017 появился. Но все компании, в которых работал, либо начинали новые проекты сразу на коре, либо задача была перетащить 10-15 летний продукт на кор.
>В СФ нанимают language agnostic. Во всяких НЙ, Остинах, Сиэтлах и прочих айти хабах та же фигня. А там внутри всяких фэйсбуков они чего только не используют. У того же Амазона есть сервисы, которые на коре крутятся. Мне тоже и на жабе и на жс и на тс и на питоне приходилось проекты пилить или с них на кор перетаскивать.
Ну, я в целом это больше к тому, что в случае переката, наверное лучше брать что-то более распространенное, аля жса, чтобы можно было найти работу не в таких крупных компаниях, ибо туда еще попасть всё-таки нужно. Хотя, конечно же, наверное можно и на шарпе, даже на коре найти что-то, из мордора такие вещи обсуждать особого смысла нет
Перевожу свой пет-прожект с ASP.NET MVC 4 и у меня не работает фронт с вебпаком.
Если я стартую фронт через
>npm start webpack -d --config webpack/webpack.dev.babel.js --color --progress --watch
, то я иду нахуй и получаю пикрелейтед.
Если же через
npm start react-scripts start
то всё работает как часы.
ЧЯДНТ?
>В жске я бы просто сделал a = "", b = "" и соответственно в овсновной функции a + str + b
А в шарпе что тебе мешает? Также в шарпе можно складывать строки с символами
>Я писал, мне он что-то ошибку выдавал.
Ну тут да, шарп говно. Ошибки выдает сука
>А это откуда пошло
Еще с мезозоя
https://ru.wikipedia.org/wiki/Управляющие_символы
> Так и проверять
Да хуй знает, ты так и объяснил что тебе надо.
>что мешает
Мне пишет постоянно в разных махинациях Can't implicitly convert char to string - или наоборот. Что я только не делал, и при декларации сувал, и так и сяк соединял. can't convert can't convert can't convert.
О погоди, то есть мне для моих махинациях обязательно универсальный var использовать?
>>64889
Сука, как вас таких на работу то нанимают? Вы в эту профессию только ради бабла лезите?
Даже жс макака должна знать системные типы. Твой жс присыпал всё сахаром, а ты и рад жрать. Но сахар - это не отмазка, чтобы основ не знать. Это значит что ты пользуешься готовым, даже не пытаясь понять, как твои инструменты работают. Ты типичный юзер (может даже пауэр юзер), но нифига не программист.
var это не тип. Это ключевое слово, которое любезно просит компилятор вывести тип за тебя.
>и так и сяк соединял
Возьми уже книгу и прочитай хотя бы несколько первых глав, чтоб понимать что ты пишешь а пробовать и так и сяк.
Действительно.
Какую книгу? Мне книги плохо даются, я сразу задачки решаю.
>>64903
Что ты психуешь? Я что тебе байтер-микроконтрольщик какой-нибудь? Ты придумываешь дизайн, концепт, алгоритмы взаимодействий, а потом уже думаешь как это все соединить со своими типами, оптимизацией и костылями которые тебе предлагает твой инструмент. В какую эту профессию, о чем ты вообще?
>должна знать
стринги, аррей, лет, нумбер-интегер, нулл, андефайнед, мап и сет с недавних пор- вот и весь мой набор!
твои чары и инты32 в жисти не видел и уж тем более не юзалвидел в вузике но не суть
>как твои инструменты работают
Они очень и очень сложно работают, нужно быть дураком чтобы считать что ты знаешь свой инструмент идеально.
>юзер
Я всегда считал себя и всех программистов юезрами. Все языки и движки, и как это прогрессирует в будущем-становятся все более и более абстрактными. Слой на слое, и никто не знает что под капотом.
Тебе нужно делать деньги и вести бизнесс, а не копаться в деталях от которых тебе ни горячо ни холодно. Конечно, как профессионал с годамии, если ты развиваешься, ты рано или поздно начнешь расширять свой кругозор, это через сколько десятков лет произойдет. а, милый мой? Если ты программист в смысле настоящий программист, рад за тебя, что ты к макакам-то пристал, а? Хочешь чтобы было меньше макак-делай что-нибудь, а не психуй.
let у него тип, заебись.
нумбер блеать, в системе куча разных числовых типов, жс тоже типы между друг другом приводит, и если программер, который пилит какую-нибудь финансовую систему, не понимает как оно работает, то у него всё развалится к чертям.
hasmap, hastable, hashset, stack, queue - эти вещи надо знать с самого начала, а не >с недавних пор
Ты вот вкурсе что твой мэп и сет - основа работы с индексами в БД?
В твоём любимом жс char тоже имеется и у каждого символа может быть своя кодировка и прочая муть, также как и в любом другом языке, потому что это системные вещи. JS прячет от тебя большую часть из этого за слоем сахара. Но если ты нарвёшься на проблему, то не сможешь её разрулить, потому что не понимаешь, как оно в принципе работает.
>нужно делать деньги
Этот лол от всех уволенных слышу. Нагородят костылей, из-за которых 2+2 по пол минуты откликается, и рады. И потом каждые 2 года кто-то из этих начинает выкрикивать - эта система говно, надо всё заново начинать. В итоге бизнес вместо продолжения разработки и добавления новых фич на радость юзерам должен тратить 50+% времени на обслуживание говно решений и получать тонну негативного фидбека от их клиентов.
>Мне книги плохо даются
Превозмогай, щито поделать. Учение - боль.
>не копаться в деталях от которых тебе ни горячо ни холодно.
Оно и видно. Простейшие вещи тебя ставят в тупик на несколько дней из-за отсутствия базы. И как с тобой бизнес вести?
Надо прекращать предлагать всем подряд JS, иначе он так никуда и не уйдёт.
Бизнес ищет программистов -> легче и дешевле всего найти тех, кого большинство на рынке (JS) -> нанимают и делают приложения на нём -> народ видит что бизнес нанимает JS девелоперов и вкатывается -> повторить.
Нам надо разорвать этот порочный круг.
В видео ниже представлена попытка объяснить, почему у нас преобладает ООП, а не функциональщина. И surprise surprise javascript один из главных виновников.
Для тех кто не может в англ или лень смотреть, вот основная мысль:
Популярна платформа (браузер, айфон, и т.д.) - популярен язык (js, objC, swift, и т.д.).
https://www.youtube.com/watch?v=QyJZzq0v7Z4
Видео не смотрю, но комментирую.
>эти вещи надо знать
Я что виноват что их не осуществляли с самого начала?
>жс прячет
Лол, ты мне повторяешь про сахарок уже десятый раз, ты серьезно думаешь жс юзеры не понимают разницу между жс и нормальным языком? Все все знают, книжки даже пишутся ака 'Вы ничего не знаете о жс'.
>отпимизация
Ну, хочешь более точный резльутат-делай более точно. Учи крестики и или шарп.
Базовые алгоритмы и структуры работают и доступны из любого ЯП. И знать их обязан каждый программист.
Мап - это новая обёртка, структура данных имелась в жс из покон веков.
Типичный жс обыватель напишет рендеринг страницы используя чё под руку попадётся:
indexOf? - зашибись
forEach? - погнали
какой-то map/reduce? - а чё бы нет?
Накидывает это всё в большую кучу (и побольше, побольше!), тратит на это несколько дней, в итоге страница вроде рендерится (за 5-10 сек) и даже отображает то, что бизнес просил. Демо показывается и всё это выкатывает в прод, где оно начинает то тут то там падать и на клиентских девайсах всё жутко тормозит. Бизнесу говорят что это типичный рабочий процесс, заводят баг репорты, делают новые таски чтобы немного улучшить производительность, дабы у юзеров жопы сильно не подгорали и продолжают поддерживать костыли вместо того чтобы продолжать развивать продукт.
------------------------
В то время как нормальный программист выполнит ту же задачу за пол дня с рендерингом в пол секунды и без единого бага. И добавлять новые фичи в такой проект намного проще, чем в типичный макакинг выше.
И нет, про "без единого бага" не маня фантазии. Люди выкатывают фичи в прод каждую неделю и никаких багов может не появляться по пол года. А если они и появляются, то обычно из-за необычно жёсткого дедлайна или не типичных edge cases.
Эта ваша отмазка про байтоёбство уже давно устарела. Если уж влез в профессию, то будь добр выучи азы нормально и знай как их применять.
Ну ты прямо расписал жоско: тут жс макаки, а тут супермены xD
На правах поста: вот нужно мне разделить строку на матрицу буковок. Я жмякаю по привычке .Split(''). - empy буквока. Я иду, гуглю, для этой штуки придумали аж свой метод ToCharArray().
Вот зочем.
Не супермены, а обычные программисты. На самом деле у нас так в любой профессии. Казалось бы, если влез в профессию, то азы то знать и особенно применять их уметь то должен? Ан нет, большая часть "профессионалов" только и умеет что копипастой заниматься. Благо если хоть поверхносто понимает, что делает. Даже врачи. Даже электрики.
Супермены подписывают контракты за много $$$ или выпускают крутые продукты в одно лицо.
ToCharArray vs Split - и в документации и в самой сигнатуре методов всё обозначено. Один производит массив (твоя матрица) символов (буковки, лол, символов огромное множество, включая невидимые), а другой - массив строк. Строка - это обёртка (для удобства) над массивом символов. По сути это и есть иммутабельный массив символов с доп фишками.
Базовый элемент, к которому применяется кодировка, язык и прочие ништяки - это символ (char).
>стринги, аррей, лет, нумбер-интегер, нулл, андефайнед, мап и сет
Бля, проиграл с этого хаотичного набора.
>почему у нас преобладает ООП, а не функциональщина. И surprise surprise javascript один из главных виновников.
Это где у нас? Большая часть SPA на реакте, а там чистая функциональщина
>>65128
Абстрактное нытье какое-то любителей структур данных. Ты приведи конкретно пример в жсе когда нужно знать эти твои азы. Я не могу представить такой ситуации чтобы в жс что-то хуево работало и чтобы решить это нужно было знать какие там чары внутри. Это другой уровень абстракции и он не должен ебать жс макаку.
мимо крок
Почему Питон открывает на чтение любой файл, а Шарп плюется "Процесс не может получить доступ к файлу, так как этот файл используется другим процессом"?
Я уже заебался, никакие решения не помогают.
Петухон открывает только те файлы, которые не заняты другим процессом, так как это происходит не на уровне языка, а на уровне системы, которая нахуй тебя пошлет если доступ к операциям с файлом занят другим процессом. Ты скорее всего в своём говнокоде на шарпе сначала занимаешь файл, а потом пытаешься его прочитать/изменить.
>Петухон открывает только те файлы, которые не заняты другим процессом
Не пизди. Один и тот же вечно занятый процессом файл.
Твой презираемый петушон открывает его на чтение простешим:
with open(log, 'r', encoding = 'utf-8') as file:
Решеточка обсирается даже с костылями:
using (Stream stream = new FileStream(log, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader file = new StreamReader(stream, Encoding.UTF8))
{
Сори, ошибка вообще не в этом.
>using (Stream stream = new FileStream(log, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
Долбоеб, показывай что ты выше по коду делаешь.
Декларирую log в виде пути до файла?
https://2ch.hk/pr/res/1665540.html (М)
https://2ch.hk/pr/res/1665540.html (М)
https://2ch.hk/pr/res/1665540.html (М)
https://2ch.hk/pr/res/1665540.html (М)
https://2ch.hk/pr/res/1618705.html (М)
https://2ch.hk/pr/res/1665540.html (М)
https://2ch.hk/pr/res/1665540.html (М)
https://2ch.hk/pr/res/1618705.html (М)
https://2ch.hk/pr/res/1665540.html (М)
https://2ch.hk/pr/res/1665540.html (М)
ПЕРЕКАТ:
https://2ch.hk/pr/res/1665540.html (М)
Чтобы тред не прогружался по 20 минут.
Так со всеми переменными, скрипт работал у других
К примеру у меня есть некий enum, где все элементы имеют значения от 0 и далее по порядку. Есть ли возможность сделать неявное преобразование перечисления в тип int? Например если я хочу использовать этот enum в качестве индексов для массива и чтобы не писать каждый раз перед ним (int).
ну вопрос на самом деле тупой, нет пиши так, можно допустим рефлексией без приведения но это ещё хуже в твоем случаи, в самой энамке не обязательно кстати индексы ставить значениям, да блять и вообще смотря где ты их используешь, иногда компилятор сам всё приводит
Это копия, сохраненная 28 мая 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.