24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
3. WinForms или WPF? Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае с WinForms делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить? C# активно развивается, недавно вышел .NET 5 и С# 9.0. Дотнет стал полностью опенсорсным и кроссплатформенным. В том же энтерпрайзе он очень даже востребован. Но в то же время стоит реально оценивать свои возможности и ресурсы. Основная часть вакансий приходится на ДС и ДС2. "Чистых" C#-разработчиков требуется буквально несколько десятков на всю страну. Вакансий в несколько раз меньше, чем в других направлениях. Порог входа намного выше, чем, например, в том же фронтенде.
5. Какую IDE выбрать? Для Windows самым очевидным вариантом будет Visual Studio ( https://visualstudio.microsoft.com/ru/downloads/ ). Бесплатной Community-версии более, чем достаточно для большинства задач. Также есть версия для macOS. Кроссплатформенный полуредактор/полуIDE VS Code ( https://code.visualstudio.com/ ). Кроссплатформенный IDE Rider ( https://www.jetbrains.com/rider/ ). Также существуют C#-плагины для Atom и Sublime Text, но функциональность там достаточно сильно урезана.
7. Что почитать? — The C# Player's Guide, третье издание (RB Whitaker) — отличная книга для ньюфагов, всё расписывается довольно подробно, очень много примеров кода. — C# 9 and .NET 5 – Modern Cross-Platform Development (Mark Price) — подойдёт для ознакомления с платформой. Затрагивает все технологии, имеющиеся в .NET (веб, мобильная разработка, машинное обучение), ни во что не углубляясь. — C# 8.0 in a Nutshell (Joseph Albahari и Eric Johannsen) — огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. — C# 8.0 Pocket Reference (Joseph Albahari и Ben Albahari) — просто выжимка из книги сверху, можно всегда держать рукой. — Pro C# 8 with .NET Core 3 (Andrew Troelsen) — 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
8. Более хардкорный материал — 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 структура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче всё, что нужно, чтобы вам перезвонили.
9. Литература по WPF — Pro WPF 4.5 in C# (Matthew MacDonald) — Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
10. Литература по ASP.NET — Pro ASP.NET Core 3 (Adam Freeman) — Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
11. Литература по асинхронности и параллелизму — Concurrency in C# Cookbook (Stephen Cleary) — книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции. — Multithreading with C# Cookbook (Eugene Agafonov) — в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная. — Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) — опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg.
12. Литература по мобильной разработке — Creating Mobile Apps with Xamarin.Forms (Charles Petzold) — Xamarin.Forms Projects (Johan Karlsson, Daniel Hindrikes) — Mastering Xamarin.Forms (Ed Snider)
13. Литература по машинному обучению — Introduction to Neural Networks for C# (Jeff Heaton) — изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов. — Machine Learning Using C# Succinctly (James D. McCaffrey) — довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
14. Разработка игр Unity-тред в /gd/
15. Но я не знаю английский, как я буду это все читать? На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако зачастую эти переводы неактуальны и/или содержат неточности. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в программировании без знания английского делать нечего. Если очень хочется, то гуглить по запросам: "C# 7.0. Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#".
16. Что еще нужно знать, чтобы взяли работать за еду? — Базы данных — подойдет любая книга по MSSQL/MySQL/PostgreSQL. DDL, DML. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper. — Системы контроля версий — обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote, diff, разрешение конфликтов. — GitHub — issues, пулл-реквесты, теги, релизы, Actions. — Алгоритмы — сортировка, поиск, оценка сложности алгоритмов, рекурсия, алгоритмы на строках. — Структуры данных — связанные списки, деревья (бинарные, красно-чёрные, b-деревья), хеш-таблицы, графы. — Если идти в веб — HTML, CSS, JavaScript, веб-сокеты, REST, JS-фреймворки (Angular, React, Vue). — Паттерны проектирования, стиль кода, архитектура приложения, внедрение зависимостей, MVVM (если хочется в WPF), SOLID.
>>2107716 Дурында, это как раз самый рабочий вариант. Раньше вкатывались на дельфи и вижуал бейсики, альтернативой были хардкорные кресты или зеленые ещё скрипты. Хотя зумеры может и не оценят, или ты и есть он?
>>2107311 (OP) Создал web проект и добавил в него функциональности (пик 1) Запускаю dotnet publish -r win-x64 -p:PublishSingleFile=true -p:PublishTrimmed=true чтобы создать финальную версию сборки, которую можно будет прикладывать к резюме и выебываться, но оно мне создало почему-то 2 папки (bin и obj), в которых кучи файлов в папках Debug. Но я не хочу Debug, я хочу PublishSingleFile. Где мое приложение и как его сделать в нормальном виде?
По адресу bin\Debug\net5.0\win-x64\publish содержится пик 2, это мое приложение? Но почему оно в папке Debug и состоит из множество файлов? Что за кучи файлов по соседству с папкой publish? Как вообще этот файловый ад понимать? Почему минимальное приложение создало 649 (пик 3) файлов?
>>2107889 Вряд ли. Это же алиас и в рантайме, скорее всего, уже нету инфы, писал ты там инт или Инт32. Посмотри ил код мне лень. Ну или решение влоб - создай дикшинари со своими "общепринятыми"
Поясните за 1. Performance паттерны - Spam<T>, Memory<T> - зачем, как и где? В прод лили такую хуету? Если да, то в каких местах и для чего? Примеры с Marshaling и Unmanagement кусками говна не интересны. 2. Что думаете за array of structs? У кого нибудь stackoverflow вылетало на этой хуйне? Поправьте, если не так - стэк распухает до тех пор, покуда живет контекст исполнения, т.к. если не использовать такого рода паттерны, хип покуда наполняется его чистит GC, что по вопросам стэка? Реально ли его вообще забить? Как стэк затригерить на SOF я так знаю, я про array of structs
Работаю почти третий год. Вроде полет нормальный, зп стабильно растет. Недавно для интереса решил пройти тесты на знание синтакиса, уровень джун - ответил на 6 вопросов из 15.
Начал читать Троеллсена и что-то он слишком непонятно пишет. К примеру, перечисляет модификаторы out, ref, param. Но не приводит примеров и из-за этого ничего не понятно куда и что писать. И так почти везде. Пробовал читать Гриффитса, дак тот вообще может 10 страниц обсуждать применения null. На примеры тоже скупится. А ведь хороший пример мог бы заменить все это переливание из пустого в порожнее. Может Прайса почитать? Но его тоже критикуют, что книга у него получилась не для профессионалов, да и новичкам не сильно подойдёт.
>>2108364 Дело не в вопсросах, а в том, чем я занят. За три года ни разу не пользовался структурами, может один раз массивами, это уже -2 правильных ответа. И вообще иногда кажется, что отвечать на вопросы для миддлов мне легче, чем для джунов.
>>2108609 Я про то и говорю, что те, кто залезли в ит раньше - говнокодеры, но чтобы их не вытеснили реально талантливые ребята, они придумали собесы, чтобы никого больше не пустить в ит.
>>2108335 Книги для кодеров всегда нужно воспринимать как справочник. Писать код > читать про конструкции языка. Це просто аксиома.
Сделай, допустим, ToDo-лист, очередной. Подумай, что тебе для этого нужно. Какие операции с ним ты хочешь делать добавить, удалить, отметить как выполненное. Выдели сущности задача. Какие структуры данных подойдут для решения список. Затем подумай над архитектурой приложения MVC. А книгу бери/гугли, когда не понимаешь что-то. Допустим, ты не знаешь как передать структуру в метод так, чтобы а - не создавать новую структуру; b - изменения в методе влияли на структуру которую ты передал в метод. Вот, ищешь это в книге/гугле. Применяешь, запоминаешь. И так вот пока не получишь готовый ToDo-лист.
>>2108609 Че это за хуйня? Оно же никогда не будет нулл, не? Может это какая-то автогенерируемая хуита? Какая ЗП у тебя и лида, штоб понимать уровень организации?
>>2108118 >1. Это не паттерны. посмотреть бы, как Span<T> в чистом виде используют. Пиши по существу или не пиши вообще >>2108780 почему выгорел? Сейчас все в вебе сидят десктоп и мобайл бляди лесом, разве не задумывался над оптимизациями? Никогда на High load проектах не был?
>>2108806 >ботлнеком будут ИО операции. в рамках рантайма они нихуя не хавают, что за бред? >>2108827 >простых вещей не понимаешь. найс пердишь, двери только закрывай за собой
Еще вопросов по многопоточке закину знающему анону - IIS получил 10 (к примеру) реквестов по http, для них он выделил 10 потоков? И сколько потоков выделит CLR, чтобы захендлить эти 10 реквестов с IIS на обработку? Кто нибудь задумывался над таким?
Как работает эта строка? - - - - - - - - - public int X { get; } => Class.StaticMethod(A, B); - - - - - - - - - Свойство, доступное только для чтения, ... за что отвечает этот недокусок лямбды вконце?
>>2109273 Я понимаю, что в случае int Prop => Func(); это просто сокращенная форма для int Prop { get { return Func(); }; } Но меня интересует пример, когда есть и скобки и этот кусок (нашел это в статье на хабре: https://habr.com/ru/post/338518/ (пятый по счету блок кода): public int Number3 { get; } => MathFuncs.GetSumOf(Number1, Number2); Не на МСДНе не в книжке подобного не встречал, поэтому и стало интересно - что это такое.
У меня есть класс, назовём его условно Indicator, этих Indicator'ов - ограниченный набор возможных значений.
И есть класс IndicatorProvider, в котором можно получать Indicator'ы. Можно получить полный список, можно получить фильтром по некоторым параметрам и ещё ряд специальных опций получения.
Соответственно, я хочу, что конструктор Indicator'а был доступен только IndicatorProvider'у, чтобы в IndicatorProvider'е создался необходимый набор Indicator'ов, и затем они могли быть получены только из IndicatorProvider'а, чтобы доступа к конструктору Indicator'а не было больше нигде в коде.
В С++ я мог бы легко это реализовать через friend class. Но как сделать в C#?
Я мог бы включить функционал IndicatorProvider'а в класс Indicator, но не хочу его загромождать, т.к. в IndicatorProvider'е далеко не один метод.
Я мог бы добавить исключение в конструктор Indicator'а, когда IndicatorProvider инициализирован, но это будет слишком криво обеспечивать, чтобы статический конструктор IndicatorProvider'а вызывался всегда строго раньше любого возможного вызова Indicator'а.
Я мог бы использовать рефлексию, но это слишком уродливо.
Почему у объект-типа Manager в списке методов нет (кроме GetProgressReport) ещё и Lookup и GetYearsEmployed? Они ведь точно так же наследуются и у класса Manager есть, хоть и не переопределяются как GetProgressReport. Или только поэтому (нет переопределения) их и нет?
>>2109606 >Как наконей запомнить, нахрена нужны автосвойства? Запоминать не надо. ПРОСТО юзаешь их для всех пабликов. >Чем они лучше полей? Дают возможность наговнокодить. Плюс ченджтрекеры для ебучих декстопов.
Смотрите. Есть один TCP-сервер. Вооот. Он умеет обрабатывать несколько типов запросов. Вооооот. И есть один исключительный запрос, который обрабатыватется долго и при этом это CPU-Bound запрос. И именно этот запрос, мать его, шлют клиенты при первом подключении. Собственно, хуйня в чем - 10к клиентов подключаются, проц на 100% загружен несколько минут, в это время нихуя другого сервер делать не может, прожевал этих пидорасов - начинаем нормально работать, средняя загрузка на I7 - 1% при 10к коннектов и ежесекундной отправке сообщений. Собственно вопрос в чем. Какие есть нормальные способы, не переписывая кучу кода, как-то распределить нагрузку на один инстанс приложения? Я придумал - сделать две очереди обработки, собственно, этого пидораса прожерливого в очередь с низким приоритетом, которую обрабатывает 1 ядро, остальные - в очередь с высоким приоритетом и там все оставшиеся ядра. Но кажется хуйней какой-то. Типа, блин, во первых - потому что придется придумывать какой-то объект для ожидания завершения задачи в очереди, либо хуярить коллбеки как не в себя, во вторых - ну, не нравится мне что-то это решение, выглядит перемудренным, в третьих - сама ситуация когда разом 10к стучатся меньше чем за секунду - выглядит надуманной, да, я ее легко могу на своей пеке смоделировать, но в реальном проде как-то не верится что такое может быть, задержки же, вся хуйня, балансировщики, хуе-мое.
>>2109947 1) поставь лоад балансек перед сервером, сделай n инстансов. Поднимай новые инстансы если в очереди на обработку больше чем n * capacity запросов. Потом скалируй вниз, когда простаивать начинаешь 2) сделай worker pool, который может выполнять ограниченное кол-во запросов одновременно. Клиент при запросе получает handle, который он может потом поллить с вопросом "Ну чё, готово?"
>>2109961 >2) сделай worker pool, который может выполнять ограниченное кол-во запросов одновременно. Клиент при запросе получает handle, который он может потом поллить с вопросом "Ну чё, готово?" Че за worker pool?
>>2109958 ЦЕ TCP-сервер. Делать свой миддлвар - зеаеб. >>2109961 Ну, я примерно так и думал, но мне говорят - сделай чтобы этот конкретный запрос не тормозил все, и времени тебе до вчера.
>>2109966 Бассейн с рабочими. Каждый рабочий умеет делать таску, но рабочих ограниченное количество. Когда рабочий выполняет таску - суёшь его обратно в бассейн >Ну, я примерно так и думал, но мне говорят - сделай чтобы этот конкретный запрос не тормозил все, и времени тебе до вчера. Тогда профайлер в руки и вперед.
>>2109976 >Тогда профайлер в руки и вперед. Ну, дык я ужо. Ускорил и так обработку этого запроса раз в 20, сейчас на 10к - минута уходит, раньше уходил час. >>2109980 Про другое говорят, няша.
>>2109983 >Ну, дык я ужо. Ускорил и так обработку этого запроса раз в 20, сейчас на 10к - минута уходит, раньше уходил час. Если всё уже обёрнуто в таски - можешь захуячить свой task scheduller, который умеет в обработку n количества CPU-bound запросов.
Зачем нужны IStructuralEquatable и IStructuralComparable? Они имеют только методы сравнения через оборачивание в object, а это ж медленно, и тогда какой смысл городить struct вместо class?
Решил только что 2 изи задачки на литкоде. Поздравьте меня. не могу документайшн таску на 30 мин сделать за неделю Олсо, совсем они ф-ционал нонпремиум похерили, нихуя ниудобно (наверное так и надо). 140 баксов в год, ууу сука.
Сап шарпач, дали вступительное задание чтобы устроиться на завод C# девелопером за 30к. “Заводоуправление” – корневой участок дерева, его нельзя ни удалить ни изменить. Внутри располагаются дочерние ветки: Веток 2 типа: подразделение и должность - Подразделения могут иметь сколь угодно глубокую вложенность, а должность– конечная ветка. Как такую залупу хранить в реляционной БД MS SQL? Как организовать таблицы?
>>2110387 Не понимаю как делать узлы в которых еще будут узлы, к примеру структура будет узел1 -> {подраздел1; должность1; подраздел->{должность2; должность3}}
Как такое организовать в БД? Не понимаю структуру таблиц.
>>2110394 Ну решение влоб: ParentNodeID + NodeType колонки. Ну или без типа, но две таблицы для должности и подразделения. Так наверное даже лучше бужет. В подразделении будет иерархия, в должности нет, но у тебя вроде бы много типов.. Ну и гугли чтото типа sql tree для запросов с with. Решение со звездочкой- что то типа нестед сетов. Решение хипсерское- графовые бд
>>2110383 Ну пишешь ты либу какую-то и не хочешь кишками светитт, только интерфейсами, вот и юзаешь. Потом еще в тестах френдли ебнул и тестишь даже кишки
>>2110386 CREATE TABLE Departments ( Id INTEGER PRIMARY KEY AUTOINCREMENT, ParentId INTEGER NULL, Name TEXT NOT NULL, FOREIGN KEY (ParentId) REFERENCES [Departments](Id) );
CREATE TABLE Employees( Id INTEGER PRIMARY KEY AUTOINCREMENT, DepartmentId INTEGER NULL, Name TEXT NOT NULL, FOREIGN KEY (DepartmentId) REFERENCES [Departments](Id) );
Кстати, кто знает, напишите, насколько валидно вот это: FOREIGN KEY (ParentId) REFERENCES [Departments](Id) Т.е. ограничение forein key на эту же таблицу. Или может этот как-то по другому делается?
>>2110476 Нормально. Но у тебя таки по факту много типов нод. Директор, отдел и сектор тоже ноды. Для вашего завода и так сойдет. Но можно еще подумать. Например, саму иерархию хранить в одной таблице а уже сами велью (емплойи, департменты) в другой Вместо текста нварчар(300) юзай.
>>2110306 Чтобы, например, не реализовывать сортировку для каждой коллекции по 100500 раз. Про struct и class вопрос не понял, должно быть пофиг struct или class для этих двух интерфейсов.
Есть ли в студии горячая клавиша, рефакторинг или что-то в этом роде, чтобы заменить var на нормальное название типа? типа чтобы вместо var x = 1.0; он бы написал double x = 1.0; ??? var-ы делают код нечитаемым. Но писать руками имена особенно с дженериками замотаешься.
Работаю в паре с другим разработчиком и постоянно сремся из-за Linq. Он любит применять его везде где можно и писать сложные циклы или проверки в пару строк. Вроде компактно и элегантно, но дебажить эти цепочки сущий кошмар. Есть какие-то рекомендации насчет целесообразности применения Linq? В Clean code про это естесственно ничего нет.
>>2111297 То что можно таким образом строить иерархию. Как-бы в том и суть. Родитель null - мы нашли корень. Если у нас в таблице несколько корней - мы можем сразу найти все корни и пройтись построив несколько деревьев. Допустим, у тебя логика такова, что есть фирма, она является корнем, у фирмы - есть филиалы, у филиалов - оффисы, в оффисах - отделы, в отделах - начальники, ну а у начальника - проекты, у проектов сабпроекты, ну а у каждого сабпроекта может быть еще один сабпроект до бесконечности и в конечном счете на каждом уровне относительно проектов - есть назначенные люди. Вот тебе говорят: Анонов - сделай запрос чтобы можно было посмотреть все проекты такого-то хуя и назначенных на них людей в фирме. С тем что я выше описал это изи: находим вершину дерева и проходимся рекурсивно вниз. Как ты будешь определять корень без null - ну, разве что ссылается на самого себя, но это хуйня потому что для того чтобы такую сущность получить - тебе придется ебатеку устраивать на уровне базы, вместо того чтобы просто сделать parentId - null
Бля, мне кажется dependency injection это реально какая-то меташутка, оно никогда блять не работает, сколько бы примеров не повторял, сколько бы раз не возвращался итог всегда блять один и тот же, даже сколько ГОТОВЫХ примеров бы не кача они даже никогда не компилируются, какая же это хуйня
>>2110696 alt+enter/ctrl+. и там в экшенах ищи>>2110672 >var-ы делают код нечитаемым не забудь префикс типа к имени переменной добавить, а то ведь тебе что б узнать тип надо в объявление заглядывать долбаеб блядь
Как же хочется работать в команде, где есть синьоры, которые ревьювят твой код, указывают что не так. Работаю в команде, где все одинакового уровня недомиддлы и кажется, что нихуя не развиваюсь.
>>2111715 Для начала попробуй полить системник святой водой, на рабочий стол поставить фото Гейтса и кактус перед монитором. Если не поможет, значит дело серьезное - придется искать светлого мага-программиста.
>>2111633 DI, как и весь SOLID и ООП, это искусственные барьеры для поднятия планки вката в IT и наебки работодателей. Бесполезные, увеличивающие объем кода, высосанные из пальца принципы. К сожалению, остается просто вызубрить. Необязательно понимать это все, пользуйся Autofac-ом.
там говорят что это пример реализации ДИ но нет, это полная хуйня, на втором пикриле пример кода который делает ТО ЖЕ САМОЕ но умещается в 10 строках и не создает спагетти код, а теперь рассмотрим случай когда инжеция нужна, вот мне надо надо например передать класс Identity.UserManager будет ли это работать? НЕТ КОНЕЧНО потому что иди нахуй вот почему
то-есть реально хуйня без задачи, усложняет то что ты можешь написать, но когда нужно у него лапки блять, безполезнейшая хуйня которую я только видел в программировании
>>2111768 Не надо, у меня много лет опыта в программировании, просто ди это реально хуйня без задач, она не выполняет свою главную функцию, через нее нельзя передать нужные тебе зависимости. опять таки я читал документацию по идентити и знаешь что там писало о передачи ваисимостей? НИХУЯ, а обычная реализация не работает, так каким образом они себе представляют использовании этой хуйни?
>>2111775 >не выполняет свою главную функцию Главная функция - снижение связанности кода. Прекрасно выполняется.>>2111775 >идентити и знаешь что там писало о передачи ваисимостей? НИХУЯ А почему в доках по Identity должны писать про DI? >обычная реализация не работает У всех работает, а у тебя не работает. Угадай гле проблема.
>>2111783 >Главная функция - снижение связанности кода. Я представил примеры двух реализаций, как видишь спагетти код именно там где используется идентити
>А почему в доках по Identity должны писать про DI? потому что без ди идентити НЕ ВОЗМОЖНО использовать где либо за границами контроллера, тоесть есть например у меня контроллер который должен найти пользователя когда выполнилось какое-то условия например выстрелил хенгфаер, и что дальше? нулл рефернс или клонирование севрвиса и до свидания, весь этот фреймворк просто не имеет смысла без ди а он естественно не работет нихрена
>У всех работает, а у тебя не работает. Угадай гле проблема. Да что ты говоришь маня, пруфов что это вообще в принципе может работать ты конечно же не приведешь
>>2111787 >Я представил примеры двух реализаций Ты представил какой-то хэлловорлд и на основании того, что там появилось несколько строк, делаешь выводы о ДИ. Охуено, че. Остальной твой высер комментировать не буду. Конфигурируй все вручную, никакой магии в дефолтном сервиспровайдере нет.
>>2111805 >Ты представил какой-то хэлловорлд >ЭТО ДРУГОЕ >Остальной твой высер комментировать не буду >ПУК СРЕНЬК НЕЧЕГО ОТВЕТИТЬ Как бы с первых ответов было понятно что ты ничего в этмо не смыслишь и по этому ничего по делу ответить не сможешь, я только не понимаю нахуя ты вообще что-то предъявляешь если сам в этом 0
>>2111690 Хочет сениор реввью 0 Получил сениор ревью 0 юз табс интсефд оф спейсес 0 документ олл методс/пропс/классес лайк ГетЮзер - гетс юзерс 0 Ревьюрит раз в полугодие 0 Пока заревьюрил мастер ушел вперед 0 Мержешь с мастером 0 Полиси ту реверт апрувалс он коде чейндж 0 Жди еще пол года внимания его величества
>>2111888 По ДИ, лучших примеров нет, на мсдн ВОДА лютая, ничего не понятно, никаких примеров, и даже то что есть не то что не работает, даже не компилируется, поэтому да, тот рафат он гений что вообще заставил это говно рабоать. про стак оверфлов я вообще молчу, там на секундочку советуют передавать зависимости в контролер и ВДУМАЙСЯ делать из менеджера ГЕТ запросы на контролер, что бы получить например имя из индентити.Ебана в рот это казино Депенденси инжекшин, такая хуня что просто от осознания того что что-то такое вообще существует в природе у меня руки трясутся.
>>2111899 >делать из менеджера ГЕТ запросы на контролер Че? Кидай ссылку. Чего ты вола ебешь? Поствь себе кор, юзай коробочный ДИ и не городи свои велосипеды в рамках учебы - хорошо, но походу ты слишком тупенький и/или пожилой для этого, что там н еработать-то может?
>>2111907 Че? Кидай ссылку. Линка нет, но зуб даю что такое видел и сам лулзы ловил. >Чего ты вола ебешь? Поствь себе кор, юзай коробочный ДИ и не городи я так-то на коре 3.1
>что там н еработать-то может? уже 1000 раз написал, вот еще раз
потому что на том примере индуса ГДЕ ОН САМ НАПИСАЛ ИМПЛЕМЕНТАЦИЮ все просто, но и ДИ если честно в таких случаях нахер не нужна давай посмотрим на ситуацию когда нам нужна зависимость именно потому что у нас нет собственной имплементации, и что тогда? ну вот смотри есть у нас идентити и вот смотри хочется мне получить какого-то пользователя при старте веба, не будет о том зачем надо, или что могу просто сделать запрос до базы, ну хочется мне сделать так как вот. на мсдн пишет что так можно и так делать круто стильно молодежно, ну ок. и смотри в трех скринах как все фейлиться если эту хуйню попытаться применить в Реальной жизни где нужны РЕАЛЬНЫЕ зависимости которые негде больше барть коме через ДИ, а не в самописных сферических маня-примерчиках в вакууме пикрил один где я пытаюсь получить результат пикрил2 где все фейлиться пикрил 3 из за чего все фейлиться
>>2111952 Какой у тебя опыт, гнида? Ты зеленей водоросли. Ты даже не можешь прочитать, что тебе компилятор пишет. Еще блять регистрирует IAuthManager, а заинжектить хочет UserManager. Иди Шилдта читай, тебе до DI еще ползти и ползти.
>>2111952 Братик, ты в трех соснах заблудился. В третьей пикче ты скобки забыл. Во второй, зачем тебе testDi, ты наркоман? В первой, ты нахуй инстанс вручную создаешь, совсем ебобо? В конструкторе контроллера IAuthManager принимай. Не забудь нормально зарегать в стартапе как IAuthManager , так и идентити говно это коробочное.
дай угадаю, ты до этого на каком-то легаси говне нулевых сидел?
>>2111974 >Ты даже не можешь прочитать, что тебе компилятор пишет. Еще блять регистрирует IAuthManager, а заинжектить хочет UserManager. я прекрасно знаю что он хочет, проблема именно в том что мне нужен UserManager а могу только IAuthManager у которого нет UserManager смотри пикрил
Почему нельзя использовать params с IEnumerable<>? Только с уставшим и давно не актуальным пропахшим нафталином массивом, который уже ни один API не возвращает?
>>2111974 Пажилой пиценосец не может прочитать ошибки ((на русском)) в студии 0 Не может понять говнокод уровня хеловорда от уважаемого Atul Rawat 0 Говорит о ДИ и ИоК контейнере дотнетовском, но инстансы вручную создает 0 Читай Шилдта 0 Читай ИЛ код 0 Читай машинный код 0 Читай вибрации от дроселлей процессора и ССД 0 Читай Библию 0 Читай по губам 0 Маааам, а как срать синглтон сделоть? ((((
>>2111988 >В третьей пикче ты скобки забыл. Речь шла о другом прочитай этот пост >>2111989
>В первой, ты нахуй инстанс вручную создаешь, совсем ебобо? В конструкторе контроллера IAuthManager принимай. Не забудь нормально зарегать в стартапе как IAuthManager а что мне толку от него, интерфейс не имеет имплементации которая должна быть в testDi который по идее должен наследовать нужный нам UserManager в котором такая имплементация есть
>дай угадаю, ты до этого на каком-то легаси говне нулевых сидел? ну на вебформах, да
>>2111989 Ну так подключи services.AddIdentity(); или как там правильно, оно настроит и юзерманагера и все нужные зависимости (разве что еще EntityFramework как провайдера для хранилища надо отдельно подключать).
>>2111997 так он подключен, смотри пикрил, проблема именно в том что использовать его можно только в контролерах. а когда хочу юзать в своем классе оно не работает и в общем вся идея что бы нужный класс получил в конструктор зарегистрированный интерфейс который имплементирует класс, который наследует нужную нам зависимость я знаю как это по дебильном звучит, но бля со стороны выглядит что именно так это типа доожно было работать, естественно это нихуя не работает
>>2112007 > использовать его можно только в контролерах От того что ты это повторяешь, правдой это не станет. >так он подключен Хорошо, а ты AuthManager откуда берется, когда там налл в конструктор приходит?
>>2112020 Божечки, как всё плохо. Ну так если ты передаешь в конструктор налл, то почему ты ожидаешь что-то другое там? И причем тут встроенная система DI, если ты создаешь класс вручную?
>>2111997 >ну на вебформах, да Из увожения к инвалидам помогу тебе в твоей проблеме.
Удоляй нахуй testDi.
Убеждаешься, что идентити у тебя настроен, смотришь чтоб в стартапе было что-то типа services.AddDbContext<ApplicationDbContext>(options => // options.UseSqlite( options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>();
Добавляешь в стартап как тут >>2111952 на третьей пикчи.
В контроллере в КОНСТРУКТУРЕ принимай IAuthManager. Не надо никаких нью. Его и юзай
>Убеждаешься, что идентити у тебя настроен, смотришь чтоб в стартапе было что-то типа ... ну есть такое пик 1
>Добавляешь в стартап как тут 2111952 (You) на третьей пикчи. Добавлено, пикрил 2
>В контроллере в КОНСТРУКТУРЕ принимай IAuthManager. Не надо никаких нью. Его и юзай Ты троллишь? я же говорил, вот в контролере все отлично работает. мне нужно что бы работало в моем AuthManager
>>2112029 >Ну так если ты передаешь в конструктор налл, то почему ты ожидаешь что-то другое там? конечно когда я передаю налл я, ожидаю что там будет налл. я передаю что бы программа хотя бы запустилась и я мог посмотреть что происходит в других местах
> если ты создаешь класс вручную? Это как так? Не понимаю о чем ты
>>2112040 Кредит помощи инвалидам: 3 Использовано: 1 Остаток: 2
Если ты используешь зависимости в твоем AuthManager, то и его инстанс надо создавать используя IoC container (в твоем случае дефолтный коровский). Тебе надо где-то инстанцинировать AuthManager окромя веб контроллеров?
>>2112044 >Тебе надо где-то инстанцинировать AuthManager окромя веб контроллеров? Конечно, ведь вся суть Ди заключается именно в том что настроитв зависимость один раз его можно использовать где тебе надо, то-есть везде где я вызову метод из AuthManager, в данном случае в мейне
>>2112042 >Это как так? Не понимаю о чем ты Если ты через new сам руками создаешь класс, DI (для простоты буду называть так всю инфраструктуру с этим связанную) никак тут не задействована. >работало в моем AuthManager А AuthManager ты где используешь? Если это несвязно с запросом, то тебе надо вручную из сервисМанагера тянуть нужный сервис через GetService<T>.
>>2112056 > в данном случае в мейне Ебаный стыд, а сразу нельзя было сказать. Гугли как сконфигурировать сервисы до того как стартанет вебсервер и тащи через GetService<UserManager>.
>>2112059 >Если ты через new сам руками создаешь класс, DI (для простоты буду называть так всю инфраструктуру с этим связанную) никак тут не задействована. не понимаю каким образом можно использовать класс не создавая его
А AuthManager ты где используешь? Если это несвязно с запросом, то тебе надо вручную из сервисМанагера тянуть нужный сервис через GetService<T>. Здесь >>2112056 то-есть в мейне, но в общем не важно я хотел бы этот менеджер использовать где-угодно, ну согласись делать гет запрос на контролер это костыль костилей, я не верю что это нельзя сделать нормально
>>2112056 >ведь вся суть Ди заключается Еще раз - суть DI в ослаблении связанности. Научись различать DI, DIP, IoC >>2112063 >использовать класс не создавая его Делегировать создание классов и разруливание зависимостей IoC контейнеру. >я хотел бы этот менеджер использовать где-угодно А где это угодно-то? У тебя это угодно есть либо до старта сервера (уже написал выше про это), либо во время работы сервера (а там по сути цикл запрос-ответ. а запрос идет через мидлвари, в которых DI отлично работает).
>>2112067 >Делегировать создание классов и разруливание зависимостей IoC контейнеру.
>А где это угодно-то? У тебя это угодно есть либо до старта сервера (уже написал выше про это), либо во время работы сервера (а там по сути цикл запрос-ответ. Ну я хотел бы как использовать как до старта так и после, ну то-есть хотел бы инициализировать и позже уже работать по запрос-ответ например в данном случае мне хотелосы бы проверить есть ли админ, если нет создать, а дальше работать как обычно как любой другой менеджер вызывая статические методы
>>2112071 автофак IoC контейнер, можешь использовать его вместо дефолтного майкрософтовский сервисМанагер. Если ты думаешь что будет принципиальная разница, и автофак магическим образом будет менять твои наллы на реализации интерфейсов, то нет. Разница в деталях. >>2112073 >проверить есть ли админ, если нет создать А почему нельзя сразу задать нормальный вопрос, а не влетать в тред с криком а-ля "вы все дебилы понапридумывали неработающей херни ряяяяяяя"? Читай: https://dotnetthoughts.net/seed-database-in-aspnet-core >так и после насчет после не знаю, возможно там уже будет задиспозено все что можно. Не пробовал. >>2112074 Почти. CusomDataSurceStorage тоже зарегистрируй в IoC, и дальше serviceProvider.GetService<CusomDataSurceStorage>()
>>2112084 >проверить есть ли админ, если нет создать Я это ЧИСТО для примера сказал, у меня уже есть такая проверка, она мне не нужна, мне нужно решить это именно так как об этом пишут на мсдн. что мол все офигено, бери класс, там будут все зависимости и тп, а когда пробую создать и сделать у меня не получается
Почти. CusomDataSurceStorage тоже зарегистрируй в IoC, и дальше serviceProvider.GetService<CusomDataSurceStorage>() у меня же нет доступа до serviceProvider в мейне, как мне тогда получить Identity.UserManager и передать его в AuthManager который я создаю в мейне перед стартом вебСервера?
>>2112084 >Почти. CusomDataSurceStorage тоже зарегистрируй в IoC, и дальше serviceProvider.GetService<CusomDataSurceStorage>() у меня же нет доступа до serviceProvider в мейне, как мне тогда получить Identity.UserManager и передать его в AuthManager который я создаю в мейне перед стартом вебСервера?
Пойми ты как оно работает в принципе, что бы создавались инстансы, кто-то их должен их создавать. Так вот, когда ты просто в конструкторе ожидаешь зависимости, ане создаешь их внутри класса - это уже DI (подкласс/реализация IoC). Дабы не охуеть в екшене/мейне, создавая инстансы для передачи в конструкторы, используют IoC container. В твоем случае - коровский. Вот он и должен знать куда и как что пихать. IoC container не пропихнет зависимости в твой обьект волшебным образом, ты должен предоставить ему конфигурацию (твой стартап с аддСкопед) и создавать инстансы через него в явном (serviceProider.GetService - "service locator" pattern) или неявном, как за тебя делает аспнетовский контроллер (он же aggregation root в контесте IoC container-а) или как в магических пропертиинджекшн автофака, или через вивер какой-то (походу ты такой долбоеб, что они тебе понравятся) .
Так вот, не создаешь обьекты внутри сервисных классов (менеджер твой), а ожидаешь их в кострукторе или параметрах методов - красавчик у тебя есть DI. Дальше ебись как хочешь, но для нелюбителей грызть катус есть IoC container-ы., они тебе помогут, если ты их настроишь и будешь использовать. Большинство из них универсальны, но ты обосрался из-за того, что фсп.нет за тебя много работы сделал, подставля их "магическим" образом в контроллеры и ты как каргокультист стал ожидать такого же поведения от консольки.
>>2112099 >у меня же нет доступа до serviceProvider Я же тебе скинул ссылку как получить serviceProvider до запуска host.Run(). Первая часть статьи для Core 1, вторая для Core 2 и выше. Или тебе похуй и я должен придти к тебе и написать код? Заливай на гитхаб, напишу. >получить Identity.UserManager и передать его Да ты задрал. Тебе не надо ничего передавать. тебе надо зарегистрировать все классы и интерфейсы, которые ты хочешь использовать. IoC сам подставит в конструкторы нужные классы.
>>2112116 >aggregation root Вроде обычно composition root называют. Хотя тот чел все равно гуглить и читать не станет. >Давай игнорировать этого пажилого инвалида Как говорится, старую собаку новым трюкам не научишь.
>>2112139 Спс, гляну. А ты в базах шаришь? У меня весь гемор из-за того, что я не могу из хранимки вернуть сджойненые таблицы, в которых есть одинаковые имена колонок во тут спрашивал >>2111625 →
>>2112113 Извини Братек, но я не понимаю, я был бы очень благодарен если бы ты написал как надо и тыкнул пальчиком куда смотреть вот репозиторий https://github.com/stasmalinovskij/DITest там в общем ничего особенного просто темплейт с Индентити и тем самым менеджером
>>2111745 >увеличивающие объем кода Тут-то ты и обосрался. Без DI у тебя будет миллион факторий, триллион билдеров и дохуилиярд статики с классическими синглтонами. Серьезно, няша. DI позволяет смотреть на класс как изолированный компонент и даниматься именно им, не думая о том что вокруг происходит. Твой класс должен что-то делать и делать хорошо. Без DI у тебя внезапно начинаются прокидываться служебные штуки, чтобы их не прокидывать ты хуячишь статику, и так все глубже и глубже в пучину говнокода, а в конечном истоге - неподдерживаемый кусок говна, в котором чтобы маленькое изменение сделать - месяц работы 10 программистов нужно выделять.
>>2112343 Няша. Я как-бы не первый год в разработке и видел времена, когда костылили как могли. Я уже написал, в чем суть. С DI ты воспринимаешь класс как компонент. Тебя мало ебет что там вокруг происходит, у него есть одна ответственность, обычно один-два метода и погнали. Без DI - среднестатистический код выглядит как полотнище на 2-3к строк, с вложенными классами, дерганием отовсюду статики, служебной хуйней по прокидыванию зависимостей. А если нет - то это и есть DI просто самописный и который говно.
Какого хуя OData от майков - отдает все данные если выставить фильтр? Пиздец же, я и так полдня разбирался - почему это говно не хочет работаь(спойлер, это говно в route не умеет), ну ок, норм. Делаем skip-take, норм работает, хотим отфильтровать по полю - хуяк, 80к записей загрузилось. Что это за говно, блядь? Какого хуя оно так работает? Что с этим говном делать и как чинить?
>>2112433 А. спасибо, анонче Только сейчас увидел в конце скобки }); Сначала относился к этому как к какому то телу функции Map Спасибо ещё раз, отличное объяснение что такое лямбды кстатей
>>2112351 ООП головного мозга. Никогда не понимал почему не юзать статику, когда методам никакого ООП не нужно. И всегда впадаю в ступор, когда вижу код типа:
new ClassA().Get(id)
когда простая статика выглядит более лаконично и чище.
Главное чтобы все было разделено модульно и не смешивалось в кучу.
>Я как-бы не первый год в разработке Ты давно в разработке, да, это видно, наверно и F# с ФП никогда не трогал - слишком стар уже? Ничего, скоро на пенсию.
бля как же охуенно, видеть всего одну ошибку в компилере, я уже понимаю что мне осталось решить всего одну проблему и оно у меня бдует работать, о да сука
тема: Linq groupBy
inb4: > аряяяя я пишу на шарпе из под линукса ну мааамм
>>2112495 >Никогда не понимал почему не юзать статику Как ты статику мокать собрался? Или ты такой умный и нахуй тесты? Или чтобы проверить что запрос возвращает то что нужно - будешь все базу разворачивать и пусть тесты по полдня гоняются?
И вообще, эти офигительные истории про модульную статику всегда, блядь, приводят к граблям, которые оч больно в будущем ебнуть могут. Да блядь, хрестоматийный пример из моей ранней работы. Проект, люди до - хуйнули свое логгирование в SQLite, написали свой асинхронный логгер, с очередями, все по уму на самом деле. Работало, дергали лог в виде Log.Critical("Message"). В итоге - 5 лет разработки, пора переносить в облако, это говно - дергается отовсюду, лог на серваке сожрал 10 гигов стораджа(ой, не предусмотрели возможность задать уровни, чтобы можно было не логгировать trace и debug, ай-ай-ай, до облака - отдельное приложение следило за файлом лога и когда раздувалось - удаляли), охуенно, клиент кричит, логгирование все еще нужно и просто полезть и закомментить лог - нельзя, все нормальные люди - вынесли логер в интерфейс и можно было прокинуть логгирование какое хош, но нет, тут была статика, везде она дергалась, на перепиливание кода ушел почти месяц, клиент сыпал хуями, благо альтернатив у него не было. Обернули бы эту статику хотя бы в интерфейс - одной строчкой бы проблема решалась при конфигурировании хоста, но зачем, правда же, статика эт ж охуенно, какие проблемы оно в будующем вызвать-то может.
>когда простая статика выглядит более лаконично и чище. Уже написал про удобство поддержки. То что оно выглядит лаконично, ок, хорошо. Вот тебе нужно чтобы перед записью в базу, когда луна восходящая, а меркурий в водолее - ты слал бы сущность для подтверждения микросервису который должен ответить - можно или нельзя сохранять. Требование появилось за два дня перед дедлайном и вы не предусмотрели. Со статикой - ты будешь вынужден ебнуть вилку, а мог бы как человек - сделать классическую стратегию и все бы решалось щелчком пальцев, простым добавлением нового условия. Но ведь лучше ебнуть ветку или лямбду передать, чтобы потом хуй кто разобрался, кроме шиза, который это писал и на проекте с самого старта.
И про ФП. Да, пробовал скалу, пробовал хацкель, пробовал F#. Весело, как опыт. Но что-то большое чисто на ФП в жизни писать не стану. Достаточно просто взглянуть на репки "реальных" проектов, когда пытаются на тырпрайз натянуть ФП, а потом гордо тыкают в грудь, что какие мы молодцы, никто кроме нас это говно поддержать не может, а клиент - жрет кактус и вынужден вам платить, потому что тупенький был когда ему продавали и повелся на истории про то что меньше строк кода -> быстрее разработка.
>>2112644 Ну, по уму в контексте - лог вообще не тормозит работу самого приложения. В те времена тот же NLog при работе с базой - пиздец как тормозил. Но да, вот так вот, не догадались, те кто делал, сразу что нужно уметь отключать уровни, не догадались что может быть нужно будет не в базу логгировать а отправлять другому микросервису или сервису, много о чем не догодались и заметить на этапе отладки и тестирования было сложно, потому что: ну работает, вроде за месяц работы не особо-то раздулось и т.д., а нужно еще и основную функциональность пилить.
>>2112632 Потому что тебе попалась хуевая статика - теперь у тебя травма и ты пихаешь ООП во все щели. Я же ничего против классов, интерфейсов и так далее, не имею, просто не нужно делать overengineering там где он не нужен. Для логгинга я бы не стал юзать статику.
>>2112632 >записью в базу, когда луна восходящая, а меркурий в водолее В функциональщине прокидывают зависимость в самый последний момент, в контроллере, чтобы бизнес-уровень не зависел от внешнего мира. Или не прокидывают зависимость вовсе, просто передав значение функции где-то по дороге. Все правила бизнес правила инкапсулируются, чтобы не было дублирования и чтобы не захламлять основной код.
>простым добавлением нового условия Это не простое добавление условия: 1. Твой код превращается в лапшу с каждым ифом, такое обычно разбивают на машину состояний. 2. Приходится покрывать код логами на всех слоях. Мало того, что код выполняет несколько ответственностей, следит за коннекшеном к базе данных и исполняет бизнес процессы, так и модульные тесты это пиздец усложняет, еще и интеграционные тесты могут попросить на это написать. Создать мок, потом нагородить инфраструктуру моков, только чтобы у зависимости вызвать метод. 3. Так с таким подходом еще непонятно какие исключения бросаются. Из-за того, что доступ к базе данных размазан по всему бизнес слою, надо постоянно помнить, какие исключение умеет кидать база данных или тот же логгер. 4. В разы легче покрыть тестами простую функцию без сайд эффектов, доступа к базе данных, логгирования и непредсказуемых исключений. В разы проще написать тестирование на основе свойств, чем классическое менее эффективное тестирование.
>>2112648 Лог тормозит работу, особенно если надо что-то тяжелое в дебаге писать, особенно если это структурные логи с сериализацией объектов. Я уже писал об этом, в .NET 6 хотят сделать ленивый провайдер генерации строк, чтобы решить эту проблему.
>>2112671 >без логгирования каждого чиха С чего ты решил, что логгируется каждый чих?
Ситуация: пишется аналитика, в дебаге надо измерить производительность всех запросов, тест не один - нужен контекст теста для анализа производительности, на проде этот лог нахрен не нужен.
Другая ситуация: нужен аудит действий пользователя, чтобы понять, что делал тенант. Нужно знать действие и результат действия. Кишки покрывают тесты.
Мне надо сделать пять одинаковых, простых микросервисов, я не хочу ебатыся и делать их отдельными классами, а только одним и чтобы этот класс работал с разными ссылками типа http://abc/001http://abc/002http://abc/003, писал через общий репо в разные таблицы в БД
>>2112830 Че ты за хуйню несешь. Микросервис, в классическом понимании. Это отдельное приложения, который, обычно, работает со своей базой и делает какую-то одну простую задачу и в идеале ничего о других микросервисах не знает, общаясь. если нужно через какой-нибудь евент-бас или с помощью апи. Все. Если тебе нужно запустить пять инстансов одного и того же микросервиса - ты так и делаешь. При чем тут классы - я вообще не понял. В рамках микросервиса у тебя вообще может не быть каких-то классов, кроме Program, и то если мы про шарп говорим. Про разные ссылки - это вопрос развертывания, ты вообще можешь развернуть за проксей и балансировщиком и у тебя по одном и тому же урл будут 100 инстансов роутиться и запускаться новые инстансы в зависимости от нагрузки. Я к чему. К тому что сформируй вопрос нормально, что тебе вообще надо.
>>2112832 Я полный новичок, я знаю, что над классом используется вот такая запись как на картинке и по ней идёт обращение, но как сделать их несколько для одного класса или как сделать некий список из этих ссылок, я не знаю
>>2112838 Очень сложно, потому что у тебя уровень понимания выше.
Попробую раздробить
Итак, часть первая
Я хочу сделать один контроллер, типа шаблона что ли, который будет использоваться по пяти разным ссылкам, как если бы я написал пять отдельных контроллеров с пятью разными ссылками.
Ближайший аналог это шаблон класса, создаётся массив из пяти таких классов, но каждый из классов используется для своей задачи
>>2112851 >как сделать их несколько для одного класса Зачем? У контроллера атрибут задает только часть пути. Ничего не мешает или создать другой контроллер, или развернуть несколько раз приложение на разных ссылках (не трогая C# код вообще). Коннекшен к базе данных можно в конфигурационный файл запихнуть или еще куда.
>>2112859 О, вот это уже похоже на то, что мне нужно.
Суть дерьма, что я делаю, есть пять разных ссылок, есть пять абсолютно одинаковых сонтроллера, и пять разных таблиц, куда они пишут данные. Я хочу сократить пять блядских сонтроллера до одного и твой ответ то, что нужно.
Но тогда вопросы!
Где мне ссылки прописывать? Ибо обычно это дерьмо в файле на картинке И где, как мне прописывать подключение к базе? Обычно это просто строка и некий путь к таблице.
А, и как мне пять версий сервиса запускать с разными ссылками?
>>2112871 >Где мне ссылки прописывать? >как мне пять версий сервиса запускать с разными ссылками? iis, nginx или apache, есть еще другие опции, зависит от того, куда деплоить и есть ли лоад балансер. На пикче сеттинги для ide, а не для деплоя.
>>2112882 Меня смущает слово деплоить, к сожалению, я нихера не понимаю, что это такое, точнее забыл.
> и есть ли лоад балансер Та же история, нихера не понимаю, но очевидно, что нет.
Как работает программа, она собирает данные с текущего ПК по адресу localhost, ну и порт там, а дальше уже сам собственно сонтроллер, далее, собрав это демо, оно пишет полученное значение и время получения этого значения в таблицу БД, похрен постгре или мсскл.
Но уже становится понятнее и понятнее.
А можно ли сделать два уровня, типа дерева, на C# - есть прога со ссылками и куда писать и она же запускает пять раз этот блядский сервис, передавая ему данные, ну, как например через соснольку через пробел досовское приложение на С или С++? Ну а далее оно там само ебошит.
>>2112892 >Меня смущает слово деплоить, к сожалению, я нихера не понимаю, что это такое, точнее забыл. В Visual Studio это называется publish. Чтобы сделать publish, тебе надо создать publish profile с нужными параметрами или написать свой кастомный скрипт.
Объясню на примере с IIS: 1. Для запуска сайта исходники сайта не нужны. Нужно то, что получается после компиляции + статические файлы. Publish - позволяет отделить исходники от файлов сайта. Поэтому, первым делом делаем publish в нужное место, в папку скажем. Так же можно создать 5 разных конфигурационных файлов и по суффиксу брать только один нужный во время publish. 2. Делаем 5 раз publish в 5 разных папок. 3. Заходим в IIS и создаем сайт с любым названием. В биндингах прописываем начало ссылка. 4. Создаем 5 приложений у сайта и указываем 5 заранее подготовленных папок. В биндингах для каждого приложения 5 раз прописываем часть пути, которая будет добавляться к ссылке всего сайта.
Для обновления приложения достаточно: 1. Остановить весь сайт 2. Удалить содержимое папок для 5 приложений 3. Сделать снова 5 раз publish 4. Запустить сайт
>>2112871 >Суть дерьма, что я делаю, есть пять разных ссылок, есть пять абсолютно одинаковых сонтроллера Почему ты просто не сделаешь дженерик-контроллер? Методы в базовом классе - виртуальные, чтобы если нужно было - мог переопределить.
>>2112892 >Та же история, нихера не понимаю, но очевидно, что нет. Касательно лоад балансера. Эта задача может быть еще решена через лоад балансер. Все пользователи идут на ссылку лоад балансера, а лоад балансер разбирает ссылку и перенаправляет траффик на нужный сервер. Так как нужно анализировать ссылку, то это лоад балансер 7 уровня - HTTP.
Подумаю, в моём случае хоть HTTP и используется, но сайта нет, просто выставленно в настройках, что он открывает страницу по такому то адресу и ничего не выдаёт, только если например postman обращаться по конкретному методу. То есть сонтроллеры максимально простые, просто очень простые и работаю фактически в фоне записывая данные текущего ПК в таблицу в БД.
>>2112916 Потому что не понимаю как это использовать. Конкретно не могу состыковать понятие ссылка, что болтается над реализацией контроллера с шаблонным контроллером, который по идее должен быть способен ответить на пять разных путей.
Как использовать обычные шаблоны в языках мне понятно, но в сервисах я нигде не вижу явного объявления вызова контроллера, поэтому непонятно.
>>2112928 А вот это уже больше понятно. Но, надо использовать готовое решение или свой велосипед писать для этого? Типа string разбирать на куски и искать нужное.
>>2112938 Так я ж не знаю как ты собрался этот сервис запускать. Звучит, как будто ты хочешь прогой запустить другую прогу. Тогда это вообще два разных процесса - очевидно два разных потока.
>>2112931 >в моём случае хоть HTTP и используется, но сайта нет У тебя на пикче Api контроллеры - это тоже сайт, хоть у него и нет html страниц.
>Но, надо использовать готовое решение или свой велосипед писать для этого? Можно свое написать, можно использовать готовое. Зависит от того, куда это деплоить будут и сколько бабок готовы башлять. Например у амазона есть уже готовый Application Load Balancer, где можно через правила сделать то, что ты хочешь, но он стоит бабок и не малых.
>>2112977 Понятно, значит один сервис, запускаемый несколько раз лучший для меня вариант, что неудивительно, ведь он соответствует принципу декомпозиции.
Так, поясните мне вот че Вот это LINQ? var selectedUsers = from user in users where user.Age > 25 select user;
А вот это метод расширения? var selectedUsers = users.Where(u=> u.Age > 25);
В чем профит LINQ ? Как помне он пиздец не читаемо выглядит. Я всегда пишу методом расширения. Тащемта я думал что users.Where(u=> u.Age > 25) это и есть linq лол. ну бля этож пиздец удобно.
Запустил программу из книжки Прайса и мне выдало такой результат: 0 types with 0 methods in System.Runtime assembly. 380 types with 6 797 methods in System.Data.Common assembly. 530 types with 5 173 methods in System.Net.Http assembly. 103 types with 1 094 methods in System.Linq assembly. 57 types with 699 methods in System.Console assembly.
Почему System.Runtime assembly всё по нулям? Это нормально? OS Ubuntu 20.04.
>>2113940 Это разные задачи и никто кто кроме тебя не знает что тебе надо. А ведь еще можно StartWith. Единственное, что могу посоветовать - использовать IgnoreCase компаратор, это раз. Почему у тебя "или"? Это нормально, что по запросу Иванов Иван Иванович в выборку попадут Петров Иван Semenович и Иванов Billy Лэзермэнович и т.д? Это два. И в-третьих, я хз что у тебя там за имплоиСтор, но метод GetItems() выглядит так, как будто он выдает все записи, а если там БД используется, то это неприемлемо.
Много ли я упускаю, если пишу код в VS Code, а не в Visual Studio 2019? Дело в том, что в книге Прайс даёт примеры для VS Code и чтобы не путаться, я тоже решил также писать. Когда выйдет свежая книга Прайса по 9 версии на русском?
>>2113974 >И в-третьих, я хз что у тебя там за имплоиСтор, но метод GetItems() выглядит так, как будто он выдает все записи, а если там БД используется, то это неприемлемо. Метод GetItems() возвращает все записи из бд. Как правильно тогда? Ебануть отдельный метод в классе отвечающий за работу с бд Search?
Меня очень заинтересовала тема кодогеренерации. Начал реализовывать некоторые задумки, и понял, что красиво и правильно это делать не просто набивая StringBuilder'ы, а используя какие-то обёртки вокруг конструкций языка. Я написал себе велосипеды для Statement'ов, Expression'ов, Operator'ов и т.п. с кучей наследования (впервые ООП так красиво ложиться на предметную область). И вроде кажется, что вот уже почти всё готово (во всяком случае для основных конструкций языка, за пределы которых в кодогенерации точно выходить не стоит), и кажется получается красиво, и даже кажется, что это можно даже легко использовать для преобразования произвольного языка в C#, но немного пугает, а вдруг 1) кроличья нора намного глубже, чем может показаться; 2) может это всё уже где-то в дотнете есть и реализовано для всего языка, если да, то как это называется, где смотреть?
>>2113989 Варианты разные есть. Самым простым сейчас будет в employeeStore добавить метод FindEmployees(name, surname, patronymic), который вытащит из БД только нужные записи.
OneCollectJoinInAnother.cs(13,9): error CS0246: The type or namespace name 'List<>' could not be found (are you missing a using directive or an assembly reference?) OneCollectJoinInAnother.cs(19,9): error CS0246: The type or namespace name 'List<>' could not be found (are you missing a using directive or an assembly reference?)
Бля что за хуета, почему вылетает вечно эта ошибка?
>>2114236 предложи что то нормальное, вим недуобный, хоть он у меня и уже напердоленный с кучи плагинами, но всё ровно имеет кучу мелких недовчётов которвые нужно в ручкую фиксить, пока вс код более менее это исправил
Кароч вообще не ебу в чём пробелма, уже даже не делаю задание, а просто копирую код с учебника, значит вероятно беда в компилере, но я компилил и через csc, т.е от skd от шиндуза, и через mcs то есть от моно, и в обейх такая ошибка
>>2114240 >предложи Ну начнем с того нахуя вообще на c# под пинусом писать, а закончим Rider'ом. Ну да, под пинус нормального бесплатного нет, зато швабодка. >вероятно беда в компилере Беда в том, что ты нашел какой-то говнокурс вместо нормальной книги. И попутно обосрался в 20 строке List<Player> players = new List<Player>() {
>>2114260 >Вообще я учу по пик1 Вот и я о том. Тебе еще до линка много чего надо узнать. >хочу писать шарп, но не хочу сидеть на винде без i3wm Dualboot. Ну или страдай, а потом будет хуже - хреновый дебагер, тесты отдельная боль.
>>2114280 >предложи нормальный учебник >>2107314 >— Pro C# 8 with .NET Core 3 (Andrew Troelsen) — 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха. >>2114280 > кто то из под линя на шарпе полноценно работает C VS Code-то, сомневаюсь. В коде хорошо js/ts, css, sql пердолить. Но не сам шарп.
>>2114288 > >— Pro C# 8 with .NET Core 3 (Andrew Troelsen)
огей, б1/уровень чтение тех.док у меня есть, буду читать в ориганале, возьму прямо сейчас и после недели чтение отпишу в тредис, поглядим насколько она хорошая
> Но не сам шарп. idk, кому как, кто то вообще плюсы в виме пишет
Так всё, я пойду дальше учить, нужно меньше прокрастинировать
>>2114464 Вообще если у тебя не линь то половину что ты видишь ты не сможешь повторить, иле половина будет костыльно работтать на винде, по причине отсуствия comton на не-unix-based системах
>IDE
вскалкод офк
>каким расширением? пик3 экстеншин для вс кода, пик2 цветовая схема
>>2112568 Анонче, Спасибо ТЕБЕ ОГРОМНОЕ, правильно говорят лучше один раз показать чем 1000 раз объяснить. Твой коммит работает на 100% и благодаря ему я +- понял как это работает. Я бы тебе даже задонатил косарь другой, но ты наверное крутой программист и сам зарабатываешь 100500\наносек и тебе эти копейки нафиг не сдались, но я тебе очень благодарен
Скажи только вот правильно ли я понял что теперь что бы использовать эту фичу в middleware и не парится по поводу периода жизни? можно сделать как на пиках?
>>2114659 >что бы использовать эту фичу в middleware Ко времени работы мидлварей уже все сконфигурировано автоматически и тебе надо просто иметь либо конструктор, который принимает нужные сервисы, либо принимать их аргументами в Invoke методе. Разумеется сервисы должны быть зарегистрированы через метод Sturtup.ConfigureServices. Мидлвари регистрируются в Startip.Configure, и будут тоже создаваться автоматически. >не парится по поводу периода жизни? Париться о периоде жизни надо в момент регистрации - тебе доступно Transient (новый экземпляр на каждый инжект), Scoped (отдельный экземпляр на запрос) и Singleton (один экземпляр на все время жизни приложения). Все что создано IoC'ом и можно задиспозить будет задиспожено автоматически. >можно сделать как на пиках? Хз, хз. Зачем прослойка из статического класса? Откуда ты вытащил DB?
>>2114659 В продолжение >>2114677 Прочёл комменты в коде и понял что опять ничего не понял. А ты точно программист? Выбрасывай эту свою хрень, как я уже написал миддлвари должны создаваться автоматически и для них доступен DI.
Почему этот гад Чарльз Энтони Ричард Хоар придумал null, а сейчас должен голову ломать с этим говном на всякие проверки null? Допускает он, не допускает, генерирует исключение, не генерирует. Почему он мне не выплачивает компенсацию за мои моральные страдания?
>>2114732 Да нет, просто хотел поблагодарить, как сейчас работает отлично, но если у тебя есть предложение или советы тогда я толко рад, но вот я только не понял что значит >Мидлвари регистрируются в Startip.Configure\
это как?
>Хз, хз. Зачем прослойка из статического класса? Откуда ты вытащил DB? дб это просто класс в котором находятся обращения к базе, там есть строка подключения и конфигурация датаЛайера
>>2114755 >если у тебя есть предложение или советы так заливай изменения на хаб, а то по скринам разбирать код это как по обрывкам папируса >я только не понял что значит Мидлвари регистрируются.. У тебя есть класс Startup (по дефолту так назван). В нем есть два основных метода ConfigureServices - регистрация интерфейсов, классов, фабрик, опций и т.д. И есть метод Configure - настройка конвеера обработки запроса, который состоит из поочереди вызываемых мидлварей (кхм.. на самом деле сама мидлваря вызывает следующую и может как прервать дальнейшие вызовы так и выполниться после последующих мидлварей). Мидлвари создаются автоматически. ... app.UseMiddleware<MyMiddleware>(); ... class MyMiddleware{ //next - делегат для вызова следующего мидлваря //контекст будет взят из IoC контейнера public MyMiddleware(RequestDelegate next, DbContext context){} //Метод Invoke будет вызван автоматически //В методе тоже можно указать доп. зависимости, которые будут заинжечены (IFoo и DbContext должны быть зареганы в ConfigureServices) public async Task InvokeAsync(HttpContext context, IFoo foo){} >дб это просто класс в котором находятся обращения к базе И он тоже должен быть зареган в ConfigureServices (если это EF, то через AddDbContext) и получаться из IoC'a. А ты видимо его руками где-то создаешь.
>>2114761 Я жду, когда в ноябре добавят MAUI и можно будет писать кроссплатформенные графические приложения, чтобы сразу и на Линуксе и на Винде всё работало. А пока до ноября решил изучить основы по книжке Прайса. Он приводит все примеры для VS Code, поэтому я и решил писать также. В этой главе мы проходили базовые типы, а циклы ещё не проходили, поэтому вот такое решение. Ещё наверняка там есть какое-нибудь решение в стиле ООП, что можно сделать список всех типов хитрым вызовом какой-нибудь библиотеки.
>>2114789 >так заливай изменения на хаб, а то по скринам разбирать код это как по обрывкам папируса залил
у меня мидваре это например тот RoleManager статический класс который я могу вызвать от куда угодно. обычно это выглядит так контроллер -> менеджер -> и тот калсс дб конечно раньше я все делал ручками, и даже сесси и кукки для пользователей у нас были самописные, но сейчас это уже нихрена не рабате, поддерживать это стало не реально, поэтому у меня задача переписать это все на что-то более мнение вменяемое
поэтому я никогда раньше не использовал ни ДИ, ни IoC контейнера и на самом деле вообще мы все делали в старом добром вебКонфиге, и ну... там не просто этого нет это вообще ну... одним словом вебконфиг, кто знает тот поймет
>>2114829 >залил Гляну. Но с гитом и студией могу только по вечерам. >у меня мидваре Ну нееееет. Давай без этого, хоть мидлварь может быть разным, но в контексте asp core под ним буlут понимать именно звено конвеера обработки запроса. >RoleManager статический класс который я могу вызвать от куда угодно. Ну это же классический антипаттерн. Ты так свое приложение тоже превратишь в хрупкую неподдерживаемую каку. >контроллер -> менеджер -> и тот калсс дб Значит это все в рамках запроса, а значит фреймфорк сам разрулит завимости. Если уж будет реальная необходимость общего класса, то делай AddSingletone(new object).
>>2115211 Сейчас модно писать в VS Code. Это не банальная Visual Studio, поэтому писать там код более престижно. А по функционалу я бы не сказал, что сложнее. Нужно лишь вручную писать команды dotnet, а не жмакать кнопки. Хотя наверняка есть плагин для кнопочек. Rider - это какой-то троллинг. IDE за бешенные деньги и не дотягивает даже до бесплатных аналогов. При этом грузится миллион лет, тупит с открытием больших файлов. Нет визуальных редакторов XAML и WinForms. Поддержка по сравнению с VS2019 и даже плагина VS Code постоянно отстаёт. Вот в ноябре все получат апдейт, а райдеровцы будут сидеть на устаревшей системе.
>>2115211 Чел, последние версии студии - крайне нестабильная херня с постоянным отвалом какого-то куска. Еще и с солюшеном невозможно работать пока он асинхронно (!!!) не загрузит за несколько минут все проекты на ссд.
>>2115214 >IDE за бешенные деньги и не дотягивает даже до бесплатных аналогов. VS без решарпера стоит больше райдера с встроенным решарпором, еще и пару тулз дают в придачу.
>XAML Блендер.
>WinForms Есть.
>Поддержка по сравнению с VS2019 В гробу я видел такую поддержку.
>райдеровцы будут сидеть на устаревшей системе По твоему они обкатывают новые фичи в день релиза?
>Нужно лишь вручную писать команды dotnet, а не жмакать кнопки. В VS Code это настраивается в дефолтном лаунчере, не надо никакие dotnet писать и не надо никакие кнопки нажимать.
>>2115224 Где ты берёшь деньги на Rider? Или крякаешь его каждый год? А если надо будет срочно сделать что-то, а у тебя кряк слетел, а новый ещё не выпустили?
Хули новая версия студии аж на 22 запланирована? Я потыкался в превью - охуенно. Автокомплит раз в 100 стал лучше и наконец НЕ ЛАГАЕТ. Пофиксить вылеты и совместимость с расширениями же и выпускать. Нахуя они на 22 год ее оттягивают?
>>2115591 Проблема твоего кода, что он делает все на свете = говнокод. В тырпрайзе городят абстракции над абстракциями. Но этот пример еще показывает, что ты не знаешь про паттерн матчинг.
>>2115756 А VS Code абсолютно бесплатный и вполне на уровне платных IDE за счёт плагинов. Бонусом ещё можешь всем говорить, что ты не пишешь в банальной студии, а в модном VS Code.
ICollection - интерфейс, то есть он же ничего не реализует и не содержит полей данных, как мы можем создавать объект интерфейса и что-то ему передавать?
>>2115902 Нет тебя просят кидать исключение, если нулл передали, а пустая строка должна нормально обрабатываться. Но если хочется самодеятельности, то тогда уж сразу NullOrWhitespace, и не ArgumentNullException, a InvalidArgumentException, что бы не вводить в заблуждение.
>>2115845 Ты не создаешь объект типа ICollection, ты создаешь объект, который реализует интерфейс ICollection и работаешь с ним как с ICollection. Каким именно образом реализует интерфейс - это его дело. Это называется полиморфизмом.
Интерфейс ICollection имеет проперти и методы, а так же реализует интерфейс IEnumerable, так что он не пустой ни разу.
>>2115352 >на прыщах Откуда вы лезете то? Дал вам микрософт венду, дал тулзы, дал пропитание. Нет, хочу с прыщами ебаться. Пиздец. Особенно печет от всяких уников, которые сидят кодят под .нет и постоянно хают "майки говно".
>>2115969 Спасибо, действительно не заметил что не просят агриться на пустую строку. Если string это ссылочный тип, то простое ==null должно сработать, я думаю. Согласен с твоим замечанием по поводу вызова конкретного эксепшена, но не буду менять. Это я отрыл какие-то уроки от Epam на гитхабе и просто делаю по очереди их таски, что бы набить руку на незнакомом языке. В тестах они проверяют конкретный Exception
>>2115984 разве мы не обязаны написать реализацию методов например в классе? мы можем прям брать и использовать интерфейсы? бля, я наверное не совсем понял эту тему или что-то пропустил, мб скажешь где почитать подробнее? метанит?
>>2115845 >ICollection keys = ht.Keys; Не создается новый объект ICollection с нуля, а приравнивается ht.Keys к интерфейсу.
>>2116031 >мы можем прям брать и использовать интерфейсы? Если объект реализует интерфейс, то этот интерфейс из него можно вытащить и юзать, да, а вот создавать объект-интерфейс нельзя.
Создать IEnumerable нельзя, но можно создать List, HashSet и юзать их как IEnumerable - вот же и суть интерфейсов, что у тебя разные типы, но у всех есть общее основание, которое можно полиморфно реюзать.
>>2116065 Не достаточно тырпрайзно. Нет SharpBeanFactory. Есть магические константы 1, true, false. Через вонючие колбеки написал, еще и onStep скрыл. Метод все еще делает все на свете и срет в консоль одновременно.
>>2116097 Я пишу. Просто потому что мне так нравится. Люблю, лямбды, люблю когда класс в 30 строчек умещается, люблю чтоб только я понимал как оно работает. Еще люблю по папочкам все раскладывать и делать длиннющую иерархию папочек, чтобы пиздец: WebServer/Features/Users/Models/Api/ а там один файлик User.cs. Уууу, как я это люблю. И как мне нравится представлять лицо другого человека, который прийдет и будет пытаться поддерживать мой код.
одни знают что .NET - это лучшее что есть сегодня для продакшена
вторые - никогда не юзали C#/F# в связке с Кором/.NET5.0, жабисты, пхпшеры, рубисты и прочие
Я просто не знаю, что ещё есть годное, ну может OCaml/Ocsigen или Elixir/Phoenix, ну это не продакшен рэди, и у Эликсира динамика, ну под бухлом можно юзать.
>>2116114 Ну уже если честно за C# не слежу особо, так, чтобы таски закрыть для кабана. В основном задрочу F#/OCaml, а там это уже с 90-х это всё есть.
>>2116109 Блять, это страшно, представьте, сколько таких неадекватов сидит по галерам. Представили? Воздуха в грудь набрали? А теперь сопоставьте с качеством современного софта.
>>2116969 >А в чём? Начнем с того, что не требует массивов: ты проверяешь простые множители начиная с n-1. По факту, максимальный простой множитель числа не может привышать квадратный корень из этого числа. Или другими словами minPrimeFactor * minPrimeFactor <= n
Второе: ты декриментируешь минимальный простой множитель на 1. Ни одно четное число (кроме 2) не может быть простым. Т.е. ты непонятно зачем гоняешь в 2 раза больше проверок чем нужно
Третье: Для большинства чисел куда более вероятно найти минимальный простой множитель быстро, чем максимальный. Например, в твоем примере с 50 ты шел с 49 до 5 пока не нашел простой множитель. Если бы ты шел с 2, то ты нашел бы один из множителей сразу.
Что требудет массивы и прочие коллекции:
Динамическое программирование и мемоизация. Если ты уже проверил, что 2, 3, 5, 7 и 11 простые числа - имеет смысл это запомнить и использовать в будущем. А когда ты обнаружишь, что и 13 тоже простое число - это тоже стоит запомнить.
Что не относится к алгоритму: Тебе нужно вернуть строку, но что ты там внутри используешь никого не волнует. Когда выучишь массивы, будет иметь смысл взглянуть на функцию string.Join
>>2116943 Няша, мой софт качественный. Очень качественный. По сути, за все время моей работы - только первый проект был тем, где было найдено на этапе тестирования хотя бы что-то что пришлось править, все остальные проекты - дорабатывались только в плане добавления нового функционала. И с моим подходом - это делать было пиздец как легко. Код мягкий как пластелин, все по папочкам расфосовано и легко найти, хочешь поменять что-то - одну лямбду поправил и все.
Бля, я уже вообще мелкомягких не понимаю. На пике один я создал структуру. На пике два создаю её экземпляры. Компилятор выдает error CS0573: "Program.Numbers": в структуре не могут содержаться инициализаторы свойств или полей экземпляров. Вообще уже не понимаю хули от меня хотят, что тут вообще может быть не так
>>2117154 Ты где-то пиздишь, няша. Твоя ошибка похожа на то что ты внутри класса - не в конструкторе пытаешься создать экземпляр класса, допустим что-то типа int[] _arr = Array.Empty<int>() или пустую строку.
Блядь, как же я давно структурами не пользовался. Суть. Там вообще нельзя задавать не в конструкторе значения по умолчанию, потому что конструктор по-умолчанию подразумевает что все поля структуры должны будут иметь дефолтные значения, потому кста и нельзя переопределить пустой конструктор. Да. Ты своими скринами спиздел. Врун-врун на башке чугун!
>>2117076 Одно позволяет использовать без каста обьект/лист/женерик как чайлд тип, если он парент, второе наоборот как парент, если чайлд. хуй знает. Типа IEnumerable<Cat> передавать как аргумент IEnumerable<Animal> Ща пойду гуглить как правильно. Вы мне перезвоните?
>>2117169 А смысл мне пиздеть на анонимном форуме, красавчик? Я тут решение пришёл искать Не, я до этого конструктор описал параметров со значениями по умолчанию, всеравно агрится. Да и не пустой конструктор я переопределяю, кажется.
Там у людей такая же пробелма, но они на visual studio думают, мол её баг. Я vscode няшным пользуюсь на линуксе, поэтому скорее всего проблема конкретного компилятора, ну или что там в дотнете на месте компилятора, до сих пор разобрать не могу
>>2117169 Вот, даже без параметров по умолчанию сделал, простой конструктор с двумя параметрами принимаемыми, всеравно таже ошибка. А почему ты структуры давно не юзал в работе? По мне самый няшным и минималистичный инструмент
>>2116015 Говорят F# работает медленнее даже петухона. И что элементарные казалось бы конструкции разворачиваются в десятки тысяч строк IL-кода. Это правда?
>>2117154 Вот кстати не понятно, почему структурам нельзя сделать инициализацию хотя бы константой, известной на этапе компиляции. Раз уж всё равно туда нули прописывают, лучше бы уж дали возможность прописать что-то полезное. Кстати, можно ли в шарпе отключить авто-инициализацию структур нулями (дефолтами), чтобы съэкономить лишние такты как в серьзном С++?
>>2117206 >>2117206 Попробуй из консоли тогда собрать. >>2117220 Зачем, если это не обязательно? Ну серьезно, у меня-то тот код собирается. Основные ограничения же: > You can't declare a parameterless constructor. Every structure type already provides an implicit parameterless constructor that produces the default value of the type. > You can't initialize an instance field or property at its declaration. However, you can initialize a static or const field or a static property at its declaration. > A constructor of a structure type must initialize all instance fields of the type. > A structure type can't inherit from other class or structure type and it can't be the base of a class. However, a structure type can implement interfaces. > You can't declare a finalizer within a structure type.
>>2117220 ты имеешь ввиду передача самого себя первым параметром? Дык оно же неявно подставляется, если я всё правильно читал. >>И хватит русич использовать в студиях. хз, я чисто из консоли заинсталил, по стандарту русский был, походу где-то в метаданных линукса нарыло стандартный язык системы. Так мне как-то всеравно
>>2117227 Без понятия, няш, я шарп месяц учу, перекатываясь с прекрасно отвратительных плюсов. С великой долей вероятности, какими нибудь костылями да можно.
>>2117229 >>Попробуй из консоли тогда собрать Ну я в консоли и пишу dotnet run, хз, ты имеешь ввиду какие нибудь конкретные флаги поставить?
>>2117227 > ты имеешь ввиду какие нибудь конкретные флаги поставить Я имею ввиду - csc использовать. Хотя все равно хуй знает почему у тебя не собирается, а у меня - собирается. Попробуй пеку перезагрузить, удалить bin и obj
>>2117165 А я нашёл проблему, няш. Я то создаю экземпляры Number в другой структуре Numbers. При чём инициализирую объекты структуры прям при объявлении, глянь ещё раз. Оно походу именно на это и агрится. правда как сделат по другому, красивенько, я хз, щяс буду думать.
>>2117408 Книги за 2018 уже устарели, потому что там нет .NET 5, а тут 2016. Плюс русские авторы обычно какие-нибудь преподы из универа и пишут для студентов. Т.е. курс базовый и очень упрощенный, чтобы поняли даже самые деревянные. Как первая книга пойдёт, но потом всё равно придётся искать более углубленную книгу типа Троелсена.
Работаю уже третий год, начал задумываться о релокейте, решил немного ознакомиться с вопросами для собеседований. Это список вопросов для миддла. Я с большими оговорками смог бы ответить только на второй и четвертый вопросы. Получается я хреновый программист или подготовка к собеседованиям это отдельный вид спорта? Вроде работаю вполне свободно, огромный проект, технология немного устаревшая, но все же.
>>2117488 я вот фронтэндер, у меня на первой работе был кодер с опытом более трех лет, он засыпал отборочный собеседование сказав что не знает что такое промис, ну а что, если вся асинхронность была или абстрагирована или написана другими
>>2117488 Я - релоцировавшийся сеньор. Могу ответить на 7-8 вопросов из списка. Это не список вопросов на миддла, это хрень. Задавать на чобесе вопросы с правильными ответами - крайне неэффективно. Мне на собесе куда важнее посмотреть как ты думаешь, нежели твое знание кишочков.
>>2117283 Вы охуели, я ещё даже не вкатился, но для меня эти вопросы лёгкие. Ну может, если про сборщика копнуть, то я поплыву, хотя про поколения, уплотнение и очередь финализации расскажу.
>>2117674 так ты еще гарячий и читаешь всякие книженции и "интересные" статьи по такому вот говну. А солидному синиору надо ерс на СТО загнать и жену порадовать.
Аноны, которые шарят в идентити и Linq как мне получить список пользователей по определенной роли? Что бы получить то же самое что на query на пикриле, но в линке?
продублированная команда текстом: select AspNetUsers.Id, UserName ,[dbo].[AspNetRoles].Name from AspNetUsers inner join AspNetUserRoles on AspNetUserRoles.UserId = AspNetUsers.Id inner join AspNetRoles on AspNetRoles.Id = AspNetUserRoles.RoleId
>>2117936 ХЗ что там с идентити Чисто допустим там стандарт var res = from u in db.Users where u.Roles.Any(r=>r.Name == name) // допустим ты хочешь по имени роли найти select new {u.Id. u.Name}//то что тебе там надо
>>2117488 >Я с большими оговорками смог бы ответить только на второй и четвертый вопросы. Ебать ты дно. Ты точно программист? 1 и 2 вопрос - это основы дотнета, 3 и 4 вопрос - спрашивают на каждом собеседовании, 5, 6 и 7 - чисто логически можно ответить, если основы знаешь. Т.е. по сути здесь только 3 вопроса, ответ на которые возможно не знать. >подготовка к собеседованиям это отдельный вид спорта? Да.
>>2118161 >1 и 2 вопрос - это основы дотнета Ни разу за 5+ лет не использовал кенселейшн токены. И вообще поебать где там что хранится. Ты и сам в своем ответе оборешься с большой вероятностью "гыгы на стеке а то на куче говна"
>>2117489 1. Ебнуть поток в котором таска выполняется))) 2. Как реализуют платформу, так и будут))) 3. Ну, ыыы, кароч, берет и помечает кусок кучи как свободный. 4. Да. 5. Тупой вопрос. Вообще хуй знает что подразумевается под создание. Статика вызовется сначала. 6. Еще один тупой вопрос. Потому что непонятно что значит переопределено. Есть таблица виртуальных методов. В случае если метод виртуальный - будет происходить поиск в этой таблице и нахождение последнего переопределения. 8. Еще один ебанутый вопрос. Потому что нихуя не понятно что значит 2 интерфейса. Имеется ввиду IEnumerator и IEnumerable? Или женерик-неженерик? В обоих случаях - исторически сложилось. 9. Это вообще пиздец с точки зрения постановки вопроса. Что, блядь, значит понимает? Компилятор ничего, блядь, не понимает. С точки зрения того как оно реализовано - хуй знает, я в кишки не лез, подозреваю что опять там стейтмашина хуячится, как с тасками. 10. Можно хоть мамашу передать, если у нее есть метод GetEnumerator
>>2118185 > 4 Или нет))) Вот это таки из тех вопросов, которые пиздец бесят. В жизни не возникало желания вообще что-то там в конструкторе вызывать. Конструктор должен просто проверить аргументы на валидность и проинициализировать поля, все. Какие, блядь, нахуй методы в конструкторе? Может быть еще из бд запросы читать в конструторе, нахуй? А может быть бесконечный цикл ебнуть? Охуеть, блядь.
>>2118205 Нет. Вообще, присматривайся блядь в ворнингам в студии, вон тебе сколько хуйни отметило. Или еще лучше поставь какой-то линтер, сонарсканера, например. И не еби тут мозги. Пока он тебя лучше научит, чем ананимасы тута.
>>2118205 В шарпе '=' - присвоение, т.е. ты говоришь что левый операнд теперь имеет значение правого '==' - булева операция сравнения, которое вернет true если левый и правый операнды - равны(в зависимости от того что там определили как равные и не переопределили ли сам оператор)
>>2118252 Хуя. Немножечко тырпразно, но код ревью не пройдет: схуяли рид инпут что-то там еще консолит, сингл респонсибилити нахуй. РидИнпут - какой инпут? Оно у тебя на ероре в бесконечный луп зайдет но баги это не задача од ревью, так шо - сойдет Пашиму только флоат? А ну пездуй другие типы раздрачивать.
>>2118290 Шо все остальное? Я лично из проблем вижу только то что инициализация не ленивая, ну и хорошо бы было вынести набор действий в конфигурацию, чтобы можно было передавать в конструкторе список операций которые умеет калькулятор делать. >>2118298 Вот кста у меня на работе сеньеры примерно так же и пишут. Горит с них. С другой стороны - у них горит с моего >>2118269 кода, так что хуй знает какой там код считать хорошим.
>>2118300 >Шо все остальное? Покаж мне твои юнит тесты для метода Calculate. Если будешь чесать нос залезая в жопу - не только в тапки нассу, а еще и насру.
Although a DateTimeOffset value includes an offset, it is not a fully time zone-aware data structure. While an offset from UTC is one characteristic of a time zone, it does not unambiguously identify a time zone. Not only do multiple time zones share the same offset from UTC, but the offset of a single time zone changes if it observes daylight saving time. This means that, as soon as a DateTimeOffset value is disassociated from its time zone, it can no longer be unambiguously linked back to its original time zone.
>>2118398 1) Если очень нужно - оберну HttpListener в свой интерфейс и буду использовать этот интерфейс 2) Не буду использовать HttpListener, а выберу тот же KestrelServer, который можно спокойно мокать.
А как скомпилировать проект в один маленький exe файл? При помощи тех способов, что нашел в интернете, получается один файл с размером 70мб за приложение, которое практически на уровне хеллоу ворлда.
Но до этого я же видел десятки утилит, что весят 100-200 кб, которые еще умудряются и гуи иметь, а не только запускаются в консольке, что за магия?
>>2118886 >десятки утилит, что весят 100-200 кб Они наверное на каком-нибудь борланде или плюсах написаны. 70 мб - это твоя программа + бутстраппер + весь рантайм. Есть способ ужать до 8кб, но он тебе не понравится, из области ненормального программирования.
Сап. Есть проблема - приходит реквест (моделька) с кучей булевых, каждая переменная из которых отвечает за определенный функционал. В данный момент реализация через хуеву тучу if проверок. Внимание вопрос - как из модельки выпилить все False переменные? Подходят любые варианты маппинга, только чтобы без простыни условных операторов и без рефлексии (это overhead и является слабосвязным, при расширении логики человек, который будет этим заниматься должен знать, что есть такой магический метод с рефлексией, иначе новое поле выпадет из логики). Спасибо
>>2119780 >а для незнакомых устраивают жесткие собесы, чтобы их не брать. Тут где-то кинули мысль - все эти собесы нужны не то чтобы не брать, а чтобы собеседующий согласился работать за еду
Эта схема такая - приходишь, и тебя начинают прессовать ища момент. Даже если ты идеально знаешь свою область (что вряд ли), начнут спрашивать что-то левое - если студия держит репутацию, то это будут вопросы уровня "почему люки круглые" (гугл, я про тебя). если нет - то начнут спрашивать про базы данных, сайты, безопасность или даже как починить кофемолку. Например недавно я ржал (сквозь слезы) с одной видеозаписи скрытой камеры, где собеседующему прямо говорили что он будет делать все что ему скажут - выходить на выходных, фиксить баги в 5 утра, выполнять другие поручения.
>>2119780 Практически в любой конторе с известным именем и ассоциациями с большими зп, на хорошие должности берут ТОЛЬКО по блату ответственной рекомендации кого-то из действующих сотрудников. Потому что с улицы нанять кого-то - слишком дорого. Кто будет фильтровать горы резюме всяких непрофильных долбоёбов и пиздаболов? Кто будет их собеседовать? Это не касается широкопрофильных специалистов, которых очень много на рынке, и которые легко заменяемы другими такими же (программист на популярных стеках/фреймворках, клинеры, курьеры, водители и т.п.)
Двощик. Пытаюсь что-то изучить и столкнулся с заданием желанием запилить метод который создаёт Массив с количеством измерений указанных пользователем. Как это сделать? Я даж загуглить не смог свой вопрос.
Есть Rank, дак он только узнаёт сколько там уже есть. Есть GetLenght. Дак он тоже только узнаёт длину каждого измерения.
Мне надо чтоб:
int b = сколь надо?; int array[ , , , , , ] вот сколь указали чтоб столько измерений и было.
>>2119838 Чел, твоя реализация - не реализация. Что за NewModel? Такого типа нет в твоём коде. Каким образом из MyModel получается NewModel? Ничего нет. Напиши подробнее код. Если же тебе просто дергать какие-то действия надо на те флаги, которые true, то это через рефлексию делается в один цикл по всем таким флагам.
>>2119919 > Каким образом из MyModel получается NewModel Маппинг + рефлексия, но такой подход не катит, т.к. слабосвязный + плохо поддерживается. Вот поэтому и сушу мозги, как это переписать без горы if и без рефлексии. Все было бы ничего, но в моделе уже ~ 30 булевых и это количество может расти. Жаль нет метода рассширения у type для скипа полей, если bool - false
>>2119734 Cудя по тому что ты выложил, тебе лучше всего прикриплейд подойдет. Выпиливать из модели что-то это какая-то шиза говна и не понятно вообще что ты хочешь добиться.
>>2119933 Чел, сишарп это стронгли тайпед язык, какое нахуй расширение для скипа полей. Ты объявил поле, значит оно всегда будет теперь у этого типа, жёстко. Смысл стронгли тайп языков именно в этом. В рантайме его изменить тоже нельзя без изъебств с IL. Да и зачем так делать - непонятно. Вероятно ты с самого начала выбрал неверный подход к решению своей задачи. А поскольку код на пастбине, который ты прислал, вообще ничего не говорит о твоей задаче, все супер абстрактно, то сложно понять общую картину, чтобы подсказать другие пути решения.
>>2119956 Ага, только с результатом, который obj, работать невозможно будет, поскольку его никуда не скастуешь, кроме dynamic. А через dynamic работать - ну, отдельный пиздец, сам понимаешь. Если ему нужно только в джейсон это положить, то сойдёт.
>>2119965 Блядь, ты ебобо? Зачем ты выбрал шарп тогда, если не умеешь работать с языками в которых сильная типизация? Пиши на js, ts, python, ruby или чё там ещё. Dynamic нужен только в очень узких случаях, если ты его применяешь ВЕЗДЕ, то у тебя по сути отсутствует какая-либо проверка на ошибки и до компиляции, и после, и только в рантайме оно у тебя свалится. Как и никаких линтеры, плагины для рефакторинга при таком подходе работать не будут.
>>2119967 Так в obj я положил потому что не знаю что у него там за хуйня предполагается. Там вообще постановка вопроса странная. В том виде что он хочет - ему вообще нужен был бы просто словарь, а не такая вот модель с кучей полей. Как раз - просто мог бы фильтровать, добавлять новые в рантайме и т.д. >>2119972 Я не ебобо. И да, было время, что я думал о статической типизации так же как ты, но потом я поработал с ЖС и господи, как же это прекрасно, когда ты в рантайме можешь дохуячить новый метод, можешь добавить полей, можешь вообще что хочешь делать. Короче, это свобода, это удобство. И теперь меня не удивляет, чего в Ненси использовали dynamic. А шарп я выбрал, потому что за него платят неплохо и из-за опыта в шарпах - перекат в ЖС == просадка по ЗП значительная, даже с учетом того что и в ЖС у меня есть опыт.
>>2119976 Чел, и статическая типизация, и динамическая имеет свои преимущества и недостатки. Выбирая язык со статической типизацией, предполагается что ты будешь использовать его систему типов и понимать, что она даёт, так же и с динамикой. А не стараться подогнать этот язык под другой - если так происходит в 99% случаев, ты явно выбрал не тот инструмент для твоей задачи или же не хочешь учиться правильно использовать этот инструмент. Это не срач "сисярп лучше жыэс" или наоборот, языки для разных задач созданы. Если ты вилкой пытаешься есть суп - согласись, это странно выглядит.
>>2119987 Няша, ты будто никогда не работал на проекте который долго живет. Выбирали по одним критериям, плюс люди, которым в вузе вбили в голову что статика - ванлав и вообще, только длбоебы динамику используют. В итоге - проект есть, давно работает и все норм, но вот возникает задача - клиент присылает json, сервер должен на основе - собрать форму и отдать клиенту, формат json-а в виде: { "RequestActions": [ "Action1" : {"UserName":"Pupkin", "Password" : "MatEbal"}, "Action2" : [{"Computers" : {"Filter": [{"Price" : ["<", 100000]]}}], "Action3" : "MakeMeBeer" "Action4" : {"$ref":"#/fuck/your/mom", "params":[{"$ref":"#/fuck/your/dad"}]} ] } И это в упрощенном виде кусочек того пиздеца который должен вообще быть обработан. А задачка-то разве сложная? Пришел запрос на сервер, сервер должен сгенерировать несколько форм и временные эндпоинты, чтобы пользователь мог что-то в них ввести, сервер бы это получил и схоронил/как-то обработал. Изи же. И на ноде оно делается действительно изи, но присобачивать сбоку ноду, когда у вас монолит, ну такое себе решение.
>>2120056 Да если конкретная задача - без проблем, ты вроде писал про использование dynamic везде, а не под конкретную задачу, где без нее будет супер громоздкий пиздец. Под такие единичные случаи в шарпе она и существует. Я не говорю, что статика заебись, а динамика плохо - все относительно. Речь про грамотное использование инструмента.
>>2120056 Двачую. Статическая типизация давно себя изжила. Да, перформанс сенситивити кейсы всё ещё требуют осторожного обращения с типами, но НИКТО НЕ ПИШЕТ ИХ НА C#. Их пишут на С/С++/ASM, где ВНЕЗАПНО кстати тоже нет никакой статической типизации. По сути дела статическая типизация - это лишь некая вытекающая из концепции ООП характеристика, чтобы всякие интерфейсы и наследования работали. Больше ни за чем это не нужно. В реальных кейсах статика просто порождает кучу бессмысленного и кода, за который бизнесу приходится платить. Т.е. в нормальном языке типа JS, ты можешь сразу из коробки получить класс с произвольными рантайм депенденс полями и методами, аккуратно под задачу, и сразу работать и решать бизнес задачу, то в дотнете и прочих пережитках ты под каждый набор данных вынужден городить классы-уроды либо опять таки хуячить словари-уроды string-object. ЗАЧЕМ? А бизнесу за это платить. Надо убить некоторое легаси в JS и мы получим ультимейт язык будущего. По перформансу за счёт сотен миллиардов вложенных в браузерную оптимизацию JS уже давно на уровне лучших решений на С.
>>2120087 >По сути дела статическая типизация - это лишь некая вытекающая из концепции ООП характеристика
Как связаны вид типизации и парадигма программирования? А как же функциональные языки с ещё более строгой типизацией, но без этих проблем вроде порождения бессмысленного кода?
>>2120094 ООП основано на возможности использовать отношения типа Manager является Person, и соответственно, повторное использование кода и в некотором роде динамичность типизации при сохранении аспекта является. Просто в JS или питоне такой проблемы нет вообще, т.к. в принципе нет ограничений на поведение класса, это динамическая сущность, гибко подстраиваемая под стремительно меняющиеся бизнес-объекты из реального мира.
>А как же функциональные языки Функциональные языки - отличное хобби для борщехлёба. К сожалению, на них никто не пишет, и денег за них не платят.
> с js переходят на ts Из джавы и дотнета люди могут перекатиться в более привычный ts, да. Другого смысла в нём нет. Профессионалы из JS никуда не перекатываются.
>>2120166 >Функциональные языки - отличное хобби для борщехлёба. К сожалению, на них никто не пишет, и денег за них не платят.
Найс аргумент, причем тут опять платят или не платят нахуй, мы про связь типизации и парадигмы программирования говорили. И да, ты скозал? Хоть и реже используются, но вакансии есть.
>>2120159 Прикол в том, что как раз если ты используешь бабели и т.п., то ничто не мешает тебе использовать макроязыки вроде TS. Ты ведь всё равно что-то в промежутке гоняешь.
Статическая типизация пришла из low level, твой код ведь транслируется в инструкции процессора, а у них всегда конкретный тип. То есть это вынужденное ограничение, из-за примитивности языков программирования.
В плане ошибок статическая типизация решает очень мало проблем, кроме производительности.
Для современного языка нужна не статическая типизация, а система ограничений на переменные, constrains.
Когда ты можешь обозначить, что вот эта переменная может иметь тип один из нескольких, и на каждый тип накладываются дополнительные ограничения, какие значения возможны, какие нет, и т.п.
В этом случае анализатор кода может проверить корректность всех ветвей исполнения, все ли возможные случаи отработаны и т.п.
F# и C# конвертируются, как ты и сам сказал, в IL.
В случае, когда ты используешь везде иммутабельность - конечно, представь себе, в любом языке будет просадка по перфомансу. Это скорее вопрос не по языку, а по базовому пониманию работы компиляторов.
Разумеется, если на F#, да и любом другом языке, пишет обезьяна, то на первый взгляд один и тот же код будет просаживаться, либо наоборот, выполняться быстрее, без понимания того как это работает в разных языках.
Я также напоминаю, что F#, как и OCaml, - это мультипарадигмальный язык ориентированный на продакшен, а не на ФП-боев, и в местах где нужно можно спокойно захуярить оптимизацию, не покидая пределов F#.
>>2120212 Какого хуя тогда при всей мультипарадигмальности, стоит мне запостить мой код на F#, все начинают корчить кривые рожи и говорить что-то про фп? А, А?
>>2120180 >В плане ошибок статическая типизация решает очень мало проблем, кроме производительности. Проблема, которую решает статическая типизация - более раннее обнаружение ошибок. Если ты написал код, который не компилируется - ты обннаружишь ошибку еще до того, как твой код запустится хоть один раз.
Если ошибка будет обнаружена только клиентом, её стоимость вырастает астрономически.
>>2120180 >В плане ошибок статическая типизация решает очень мало проблем, кроме производительности. Статическая типизация - это как наличие мыла, не делает тебя элитой и достижением назвать сложно, но без него - ты уже вонючая обезьяна, а не человек.
>>2119962 я не буду код с прода кидать на двач, чтобы его тут обсасывали. Я описал проблему, описал условия, этого хватит. >>2119965 # как статически типизированный язык имеет ряд приемуществ, я бы сказал даже больше, чем в динамическом, как в том же TS, где от any можно голову сломать.
Так или иначе - я пришел к решению, правда его еще не тестировал - conditional mapping. If sourceValue == true, then ... Проблема только в том, что маппер очень специфический используется, доки почти на него нет, придется с бубном потанцевать
>>2120248 Тебе уже третий чел говорит, что проблема и постановка вопроса мутная. Необязательно для этого код с прода тащить, напиши просто более подробно код и с нормальным неймингом, чтобы проблема была ясна на высоком уровне.
Как же бесит ебучая магия в шарпе. Вот какого хуя я должен опытным путем выяснять что нельзя сделать вот так: HttpRequestMessage requestMessage = new() { Content = content, Method = HttpMethod.Post, RequestUri = new Uri("http://localhost:8000") }; while (true) { try { await client.SendAsync(requestMessage); } catch(Exception ex) { Console.Write(ex); } } ? Вот почему так? Почему нужно каждый раз новое сообщение создавать? А хуй знает, так кто-то в майкрософт решил, ты - не выебывайся. И чтобы узнать про такое поведение - нужно было положить выключить сервер и словить бяку про то что нельзя использовать один и тот же реквест. Бесит жутко.
Тупой вопрос. Чтобы не было абстрактно дам контекст. Сморите, есть приложение веб-апи, оно запущено в докере. Так вот, внутри докеровской сети - есть несколько других приложений. Чего я хочу. Я хочу чтобы приложение А, заведомо зная адрес по которому обращаться к приложению B - отправило сообщение и приложение B таким образом бы знало куда слать запросы(ip-port/uri). Собственно, я не понимаю как это сделать внутри докера. Типа я на локальной машине могу через Dns.GetHostEntry узнать свой IP-адрес внутри сети, допустим я при этом могу через IConfiguration["urls"] - так же узнать и порт. Но меня смущает некоторое мое непонимание - будет ли это все валидно для обращения другого контейнра, в случае если они в одной сети? Может быть кто подобные штуки делал? Потому что я как-бы проверял в докере и оно работает, но вот хуй знает-хуй знает, вот допустим - сервисы будут в разных сетях относительно докера работать, как я понимаю, в таком случае - сервис B - не сможет по тому же IP:port обратиться к сервису A, а хотелось бы. Просто да, я понимаю что залупа какая-то, в теории проще было бы это на уровень переменных окружения отдать, типа пусть при запуске контейнера я буду брать это из этой переменной и отдавать другому сервису, но это какая-то хуйня как по мне и перекладывание ответственности.
Тестирую сейчас работу с двумя базами данных, возник такой вопрос. Можно ли написать запрос сразу в две бд (SQL и NOSQL) с необходимыми для меня опциями сортировки? Пробовал что-то типа пикрил, но выбрасывает эксепшн при конкатенации.
>>2121053 Ну, допустим я не знаю в том куске кода будет ли пост, гет или еще что-то и сообщение приходит из фабрики. И логика в том что в случае отсутствия ответа, либо невалидного ответа - я должен несколько раз попробовать переотправить запрос. Да и не то чтобы проблема, пофиксил перенеся это все внутрь цикла, просто сама эта магия бесит. Узнаешь о таком поведении только опытным путем.
блдяь, меня чё это, компилер тралит? через отладчик никаких пробелм не показывает, но почему то всесто паралельного выведения цифр просто пустые строки
>>2122059 >ловко же сделано ну? Писать пять строчек вместо одной? Сравнивать в ифе булевое значение с тру? Писать по несколько раз одинаковые строковые литералы? Давать переменным кривые имена? Нагородить хуиту, которую проще удалить и написать заного, чем разбираться в ней? Этот код можно показывать как образец говнокода.
>>2121842 1) dynamic вместо обобщений - чек 2) строковые константы вместо перечислений или выборки из словаря - чек 3) сравнение булевого значения 4) поиск по строке вместо чисел 5) асинхронность, на которую будет потрачено больше, чем сэкономлено
Анонас, подскажи годный курс/книгу по WPF/MVVM. После шлепанья формочек, никак не могу вкурить что, где и как в MVVM устроенно. Как правильно разделить бизнес логику от гуи.
>>2123080 Task неявно создаёт новый поток и исполняет в нём метод. Помимо аллокации, процессору придётся выделять время для нового потока. Я не думаю, что в данном случае, проверка наличия роли имеет сложность больше O(n). А если имеет - лучше переписать проверку роли, чем отдавать это в отдельный поток.
>>2123145 Я не тот анон, но про поток ты не совсем верно сказал. Новый поток не будет создаваться. Твой делегат будет запланирован на исполнение планировщиком на первый свободный поток из пула потоков по дефолту. Возможно ещё зависит от контекста синхронизации, не помню. Но новый поток с нуля в большинстве случаев создаваться не будет, если ты этого явно не задал через TaskCreationOptions например. Так что и ты на джуна не тянешь как-то.
>>2123161 > Так что и ты на джуна не тянешь как-то.
Смелое утверждение. Но иди-ка ты в пизду, иксперд. Мне в хуй не упёрлось использовать async в рабочих задачах, поэтому мне уж тем более параллельно, как он работает изнутри. Но по итогу я всё равно прав - если таски исполняются в общем пуле потоков, это будет ещё медленнее, чем просто написать оптимальный компаратор. Тем более что под Task всё равно выделяется память.
Если новый поток не создаётся, как ты говоришь, то использовать async вообще нельзя, потому что это только увеличит общее время исполнения.
>>2123145 Task может и создать отдельный поток. Даже, если он не будет создан, все равно async-await будет развернут в конечный автомат.
>увеличит общее время исполнения >Если новый поток не создаётся, как ты говоришь, то использовать async вообще нельзя Асинхронный код не для уменьшения/увеличения общего времени исполнения. Аноны выше прав, ты на джуна не тянешь.
Все справочники проекта я спроектировал в виде трех иерархично связанных таблиц. MainTable - хранит ID и парочку служебных полей. HistoryTable - тут хранится значение справочника и BeginDate EndDate (интервал актуальности значения) Translation - хранит переводы значений справочника. Насколько верное решение именно так хранить данные? Linq запросы превращаются в кошмар, со связкой до 15-20 таблиц, не лушче ли использовать хранимые процедуры или View?
>>2123490 А что такое "справочник" в твоем случае? Похожу на евент сорсинг + локализация (очевидно). Погугли по евент сорсингу - мож найдешь что-то похожее. Быстрый ответ - делать снапшоты, но у тебя есть еще какой-то BeginDate EndDate, так что у снапшота тоже будет екпирейшен дей.
Ну а вообще, да, попробуй разбит ьна несколько небольших ЕФ запросов. Если не получается или изначально видно. что та пизда, иди в хранимки. Хм. А может тебе выгодней будет в память выгрузить и там продрачивать, чем свои десятиэтажные запросы городить?
>>2123508 Например, нужно хранить список городов на двух языках. У каждого города есть история изменений названия, которая хранится во второй таблице. А в третьей будут храниться переводы. Например: MainTable Id = 1 History name = Стамбул BeginDate = 28 марта 1930 EndDate = null name = Константинополь BeginDate = null EndDate = 28.03.1930 Translation name=Стамбул iname=stanbul
>>2123531 Есть связка по айди конечно. Часто по работе приходилось срочно добавлять историю для какого-то справочника. Например, имя клиента изменилось, но нужно, чтобы в отчетах ранние даты отображалось старое имя. В этот раз решил для всех таблиц по умолчанию сделать таблицы с историей изменения, но сразу усложнились запросы.
>>2122982 >dynamic вместо обобщений - чек Что плохого в динамеке!? >строковые константы вместо перечислений или выборки из словаря по твоему я что должен создавать целый словарь что бы разобраться с 3 строчкаами? серьезно? что дальше? может сразу целый менедер ебнуть, с СИНГЛЕТОНОМ И ДИ >поиск по строке вместо чисел Где блять? ты что в глаза ебешся? там везде итем по числу берется > асинхронность, на которую будет потрачено больше, чем сэкономлено Потому что ты так сказал? Это даже не зауши притянуто, а тупо выдумано
>>2123145 Откуда ты вообще хуйню про новый поток взял? Ты вполне можешь ограничить тредпул/настроить скедулер и все вообще в одном будет происходить. Как-бы асинхронщина в том виде что в шарпе это древний концепт кооперативной многозадачности. Своим await ты явно говоришь: короче, ебите мою жену, а я посмотрю. Потом насмотрелся и сам ебешь. Куколдская многозадачность, все дела. >>2123183 >Если новый поток не создаётся, как ты говоришь, то использовать async вообще нельзя, потому что это только увеличит общее время исполнения.
Ты вообще понимаешь зачем придумали асинхронное выполнение? Давай я тебе расскажу. Вот ты читаешь с диска. В это время поток - нихуя не делает, кроме как ждет завершения чтения с диска. Нахуя ему ждать, если можно заставить его делать что-то ползеное, а завершение чтения пусть обработается в любом другом свободном потоке. Так вот, для любых I/O bound и прочего говна, которое не нагружает процессор но что-то там ждет ты обязан, нахуй, использовать асинхронщину и не ебет. Я вообще не особо представляю, что ты там такое работаешь, что тебе асинхронщина не нужна. На каждый запрос к базе - отдельный поток, лол? Если бы там какие-то вычисления, то я бы поверил, что ты мог не сталкиваться с асинхронностью, потому что там оно действительно не нужно, только вот вычисления требующие скорости на шарпе не пишут.
Как блядь организовывать проект, чтобы к моменту когда все фитчи реализованы не выходило какое-то уродливое хуй пойми что? Пиздец просто горит. Вот есть в базе, допустим какие-то константы(ака справочники), есть пользователи, есть их проекты. Так вот, для добавления проекта апи: post api/User/{id}/Progects для получения проекта get api/User/{userId}/Projects/{id} для получения списка проектов юзера - внезапно post api/User/{userId}/Projects с сущностью {Take:int, Skip:int, Filter:[some filters], Sort:[some sorts]} и в ответ ебала вида: {Data:[projects], Total:int, Next?:{тело запроса на следующую порцию данных}; Prev?:{тело запроса на предыдущую порцию данных}} пиздец это бесит. Пиздец это раздращает. Еще и нужно переводить сущности из базы в ДТО, которые тоже фронт для каждой странички свои просит и у тебя получается куча говна которая наполовину копирует друг-друга, но вот это вот специфичное свойство там есть, тут нет, но есть другое. Говно какое-то. Хочу чтобы я сделал всю базовую хуйню а фронт мог одним запросом сам достать что ему нужно в том виде какой ему нужен. При этом не хочу ни OData ни GraphQL, потому что ебать, блядь, у меня так-то не просто круды, эти сущности нужны и для других вещей, типа кому на мыло оповещение отправить, что-то еще сделать и если фронтоблядь накосячит мимо меня - потом меня же ебать и будут, хули я письма не туда шлю или что-то еще. Но по итогу - какой-то уродливый монстр, в котором самому противно возиться. Что делать? Как жить?
Короче не реклама, а просто желание поделиться своей хуйней творением. В общем можете залететь @Chan2Bot, потестировать и желательно обосрать Гит репозиторий скоро выложу, если смогу привести код в читаемое состояние Текущий функционал: просмотр шапки треда и приложенных к ней пикч В будущем добавлю просмотр не только шапки, но и всего треда, загрузку видосов, а не только пикч
>>2123273 > Асинхронный код не для уменьшения/увеличения общего времени исполнения.
Я в курсе, для чего он нужен. Но если операция, которую на скрине отдали на обработку в другой поток, настолько долго обрабатывается, что основной поток нельзя блокировать на такое время, эта операция хреново реализована.
> Аноны выше прав, ты на джуна не тянешь.
О да. Ведь C# только из async и состоит, и нет задач, в которых он был бы не нужен. Тешьтесь сколько влезет, мне не жалко. Если это поможет вам не повеситься - даже отлично.
>>2123763 Типичнй ответ на доске пр двачей, я обосрался не знаю что ответить но что бы как бы последний ответ был за мной поэтому иди туда не знаю куда и почитай то не знаю что
>>2124154 Если ты пытаешься в качестве ключа использовать коллекцию - значит ты не знаешь что такое джоин. Так что иди читай. в интернете по нему инфы море, копировать сюда определения не имеет смысла. не забудь ответить, раз тебе важно за кем последнее слово, школьник
>>2124275 Проверь testType, возможно налл. А вообще уже давно бы запустил под отладчиком и посмотрел значения переменных. Ах да, отладка из под вскода это же боль, но тебя предупреждали. А дальше больше.
>>2124093 >Но если операция, которую на скрине отдали на обработку в другой поток, настолько долго обрабатывается, что основной поток нельзя блокировать на такое время, эта операция хреново реализована. Охуительные истории. Когда же ты уже сьебешь, обсерун. Ты же нихуя не шаришь и сам это признаешь, но продолжаешь с експердным видом пукать.
Анон, подскажи, мсдн не помогает. Есть ли простой способ без изъёбов конвертировать массив битов в номерной тип? Например, по идее bool[32] должен легко входить в int32 без масла. Типа ConvertToInt(bool[]/BitArray), что-то в этом роде?
>>2124373 Если свой писать, то полагаю нужно массив битов конвертировать в строку нулей и единиц, а их уже парсить в номер, замороченно и мало эффективно. Другой варик, использовать unsafe и пробежаться циклом по указателю, но тоже так себе решение. Я думал, может что-то готовое и вразумительное существует.
>>2124383 Ну я бы как-то так написал (нулевой bool массива- старший бит числа, т.е. [true. false, false] = 4) public int ToInt32(bool[] data) { int res = 0; for(int i = 0; i < data.Length; i++) { res <<= 1; if(data){ res |= 1; } } return res; }
P.S. А как ты вообще сподобился получить число в виде массива булов? Я бы сначала посмотрел туда, прежде чем костылями подпирать.
>>2124457 >Битовые операнды? Да. << сдвигает биты влево. | побитовое ИЛИ, так как 1(10) = 0...001(2), то x | 1 установит младший бит x в 1. >>2124457 >Где почитать? Да хоть на мсдн.
>>2124465 Там читал, конечно, но там поверхностно. Вот я в твой код и не вдупляю. Я вижу, что длина масива влияет на значение res, но как значения элементов массива влияют, не вижу. И как в каком случае data может иметь false тоже не врубаюсь.
>>2123553 >Что плохого в динамеке!? Динамаки - это зло и должна использоваться только в КРАЙНИХ случаях на уровне unsafe.
Во-первых, использование dynamic крайне неэффективно с просадкой по ресурсам до 15-ти раз.
Во-вторых, типы придумали для того, чтобы компилятор мог отлавлить базовые ошибки на этапе компиляции, а не в рантайме.
В-третьих, типы позволяют разобраться в логике практически любой уебищности кода, а вот с динамикой - если не написано идеально и не задокументирован каждый чих, то хуй там что кто-то разберет в проектах больше 10к строк.
>>2124934 Мантры неосилятора. По факту - достаточно посмотреть на ЖС чтобы понять какую же хуйню ты несешь. Даже лень расписывать. Открой любой жс проект написанный не студентом - убедишься.
Есть у кого опыт работы с unmanaged dll? Имеется некое апи на, вероятно, на С. От него есть dll, описание констант, типов данных и функций в h. Как COM dll в вижуал студио не подгрузилась. Я смог через DllImport написать обертки для простейших функций, которые void(). Но как быть с более сложными функциями, которые оперируют указателями, кастомными типами и вот этим вот всем? Пробовал char * заменять через MarshallAs.., но получил эксепшн на чтение\запись в защищенной памяти. Желательно без unsafe-темы. Я тупой, оа стэковерфлоу, pinvoke.net читал, нихуя не понял.
>>2124953 > По факту - достаточно посмотреть на ЖС
И миллионы фреймворков для него, чтобы понять, что это язык из говна и костылей, к коим особливо относится динамическая типизация.
> Открой любой жс проект написанный не студентом Я уже порядочно открывал крупных SPA сайтов от крупных корпораций, которые вынуждали меня сидеть по 10 секунд в ожидании загрузки каждой страницы, даже не слишком большой.
Встречное предложение. Открой код любого проекта на C#, написанного сведущим человеком (или человеками). dynamic ты там не найдёшь даже если очень постараешься.
Как же я люблю программирование, когда строишь алгоритмы, лезешь в кишки, даже когда пишешь сложные скл запросы. Но этот ваш ебучий ООП и солиды всякие, когда городишь хуевую тучу классов и зависимостей, когда небольшой проектик с парочкой таблиц превращается в гигантскую кучу классов и папочек ууух сука горит.
>>2107311 (OP) Кто нибудь хостил веб-приложения на asp.net core? Не знаю что выбрать. Хостинг Azure vs VPS windows/linux vs Docker vs уже настроенная служба приложений для .NET Core? Если VPS, то Windows vs Linux? Хостинг как служба vs IIS vs Kestrel vs HTTP.sys vs Nginx vs Apache vs etc?
>>2125242 Чего бля. Ты же все равно кастишь к динамику конкретный тип, тебе же оно не из соm прилетает. А если нужен одноразовый тип, то родина тебе дала анонимные классы, tuple и value tuple. >>2125473 У меня сайтец крутиться на лине + энжинкс. Но вроде сейчас уже можно и кестрелрм наружу торчать. Если хочешь стильно-молодёжно, то без джокера никак. На лине впски дешевле. Ну а сравнивать облоко и впс, это пушка, тут уж что тебе больше подходит под задачи.
>>2125481 Мне нужно дешево и надежно. Azure напрягает ценами и тем что плата за ресурсы. Если будет дидос, то ресурсы полетят. Еще он сложный в управлении. С другой стороны на впске придется все руками делать. Почему не сравнивать облако и впски? Сейчас облачные впски есть. Различия размываются.
Еще не знаю как использовать 200 долларов, которые Azure обещает на новый открытый счет. Их нужно использовать в течении месяца. Типа купить сразу на год что то или так нельзя? Есть у рег.ру готовая сборка для .net core, не знаю что это будет, доступ к какой то панели или как. Наверное что то похожее на azure. Не знаю что выбрать, ступор.
Еще нет данных о производительности как лучше хостить. Как померить самому тоже не понятно. Можно же с реверс-прокси и без. В качестве прокси разные веб-сервера. Можно кестрел не кестрел. В общем вот это вот все не понятно.
>>2125349 >ебучий ООП Всё так. Как сказал Джо Армстронг создатель Erlang, что ООП языки проблемы, вы хотели банан, а получили гориллу с бананом и все джунгли в придачу. ООП которое сейчас все используют и ооп-языки это очень тупое поделие. Как на пикче, нужно сделать всего лишь лошадь, а тупое ооп и ооп языки требуют сначала сделать лошадиную фабрику. Идиотизм полнейший. Чисто для дегенератов.
>>2125513 >Разве приложение asp.net само не является серваком? Да, может само обрабатывать запросы, но обычно в продакшине так не делают, используют реверс-прокси-сервер. Он и проксирует запросы и может статику быстро отдавать и балансировать нагрузку.
>Всякие Nginx или Apache нужны если пишешь на РНР каком-нибудь. Их используют как фронтенд-веб-сервер, хотя не уверен используют ли так apache, наверное если не nginx, то вместо апача лучше H2O, Caddy или что то другое.
Я хочу пока понять общую картину как лучше хостить asp.net core. Хотя бы сузить до того какой тип хостинга и какую ОС использовать.
>>2125504 Раз не знаешь, то бери впс на лине (только учти, в отличии от облака менять конфигурацию сервера будет не так просто, а на дешманских тарифах нельзя совсем). Накатывай nginx и запускай свой суперсайт. Мануалов в сети до жопы. >>2125513 Раньше даже на мсдн писали, что не надо светить кестреловской жопой во внешнюю сеть. Сейчас вроде можно, но нгинкс/апач предоставляет больше возможностей по пердоленью и прочему, поэтому обычно их ставят на передовую.
>>2125521 >>2125530 Зачем тогда нужен этот asp.net? Проще же на РНР написать сайт и быстрее. Тут полгода учишь язык, потом полгода этот асп. Ещё какого-нибудь Рихтера надо читать, чтобы собесы проходить. А на РНР можно через неделю уже писать готовые и работающие сайты.
>>2125530 >бери впс на лине Хорошо, спасибо. Попробую разные варианты.
>>2125544 >Зачем тогда нужен этот asp.net? Он дает все что нужно для создания веб-приложений.
>Проще же на РНР написать сайт и быстрее Не факт. В .net можно создать каркас asp.net core приложения одной командой. Есть много каркасов под разные типы приложений. Фреймвокр из коробки дает все что нужно. Не надо искать либу, выбирать какая либа лучше подойдет, склеивать все это не нужно. Можно легко поменять http на вебсокеты. Можно писать фронтенд на c# с рендерингом на выбор, на клиенте с помощью webassembly или на сервере с помощью .net core. Короче куча всяких фич, которые php не дает вообще или они кривоватые и их сложно использовать.
>Тут полгода учишь язык, потом полгода этот асп. Быстро охватываешь общую картину и начинаешь пилить приложение. Только нужна реальная цель, чтобы ты хотел это приложение, чтобы не бросил его писать. Не изучаешь ничего просто так, а решаешь задачи написания приложения и тем самым в процессе изучаешь asp.net core. Я так делаю и тебе советую. Пробовал и как ты говоришь, сначала учить, потом все остальное, это тупиковый путь. Если есть вопросы задавай, помогу чем смогу. Тут конечно место не очень, надо бы дискорд создать думаю.
>>2125504 > Если будет дидос, то ресурсы полетят. Какие рессурсы? Апп сервис план - фиксирован. Сиквел Дб - фиксировано. ЧТо у тебя там полететь может-то?
>>2125555 >Проще же на РНР написать сайт и быстрее Еще проще и быстрее на народе "сайт" создать.
А вот интересно. Вот бы такое соревнование - запилить базовый ф-ционал какой типа авторизации, пермишенов, пару-тройка крудяков и листов. На ПХП и .нет, кто бы быстрее сделал? КТо качественее?
>>2125620 А без этого ты зарабатываешь деньги пузатом дядюшке, больше будешь работать, больше уметь больше, а в итоге будешь только больше зарабатывать дядюшке а сам один хуй будешь получать в лучшем случае за сотку
>>2125638 ахахаха, нет чел, ты им напишешь и они скажут мол? что ? доларов? Ты че ебобо? Мы просто не знаем как значок поменять, а вообще это 10к гривен, то бишь под 50к обычная зарплата в хохляндии на говноджс мидле если не веришь сделай супер охуеть анкету 100500 лет опыта в гугл и наса и отправь им а когда ответят спроси. вангую так и будет
>>2125668 Какие же маняфантазии. Блять просто сделай как я сказал. Создай охуеть Анекту, пройди на собес со смузи и просто сразу спроси о зарплатной вилке, я тебе гарантирую что там будут сумы в 5-10 раз меньше чем те маняфантазии на джини
>>2125726 чел, говорю же, тебе незачем верить мне на слово, просто реально создай анкету ит-чада и отправь, ты поймешь что никаких 100500 в наносек не существует даже с идеальной анкетой сеньора на луне, по крайней мере не в россии точно, и да выше правильно сказали, в других странах программист на уровне ну не продавца но обычного работника вроде экономиста\менеджера, сильно всасывает тем же докторам и юристам на западе, в россии они зарабатывают много именно потому что работаю за палюту часто на западные компании и то что там средние зарплаты у нас манна небесная, ну так было раньше, до санкций, сейчас компании шарахаются в россии работать и программисты медленно скатываются в средне-заработок по россии хочешь 5к пиздуй на запад тут уже такого нет и не будет
>>2125674 >Какие же маняфантазии. Лахтовик штоле? Этих людей реально нанимали, там это все видно. Ты скорее всего проплатка пропагандонская, хочешь убедить нас, что на Украине таких зарплат нет и что вообще нужно за копейки на Расие работать.
>>2125944 >>2125947 Я тебе уже 3 раз повторяю, тебе незачем мне верить на слово, просто берешь и пробуешь вкатиться с идеальной анкетой, и хоть ты усрись ты не найдешь работу за 5к \месяц
>>2126463 И сколько из них реальных? 0! ну или там будут подводные типа 800к но не в месяц а за год, или за весь проект и тп. Здесь не о чем спорить я прав потому что хорошо знаю как это работает, у нас делают точно так же?
Создаешь объявления на 200-300к, к тебе приходит мидл-сеньер, ты гнобишь его на собесе и говоришь, мол, ну "сам видишь ты не подходишь, но мы так и быть дадим тебе шанс поднять квалификацию и через год возьмем, а пока работай штука за 60" и знаешь что? это работает потому что челы которые приходят после 100500 безрезультатных аппликаций и собесов на такие должности выхопают как на самом деле устроен рынок труда на ит
>>2126570 Выглядит как джсон. А коли сие есть джсон, то и работай с ним как с джсоном и не еби мозги (с) Будда Стетхэм >сплит не работает Смелое заявление. Пожалуй я тебе не поверю.
>>2126565 Ты пропагандонская проплатка. Я скинул тебе ссылки с вакансиями. То что ты это игнорируешь и твои манеры говорят о том, что ты жалкая шлюха с проплаченными комментариями, проще говоря лахтоскот.
По долгу службы мне нужно написать не очень сложное оконное приложение. Окна я не писал около 13 лет. Я начал было писать на WinForms, мне коллега сказал, что это уже перегиб по старости, и надо WPF. Накидайте пожалуйста годные мануалы по WPF/XAML. Я знаю, что есть MSDN, я прошу мануалы получше. Вдруг кто из анонов знает
>>2127230 9. Литература по WPF — Pro WPF 4.5 in C# (Matthew MacDonald) — Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich) В шапке говном насрали?
Я вчера ходил на собес, а мне там челик собеседующий спрашивает "Почему курица перешла дорогу?" я что-то промямлил, но так и не понел, что от меня хотели. Похоже меня не возьмут на галеру.
>>2127230 Забей на то что там тебе говорят. Используй что знаешь. Для примера у нас на работе - чел пишет на шарпе, но использует WinApi, просто потому что он сеньер-сеньер, начинал с плюсов в начале нулевых и винапи он знает, и все остальное - нет и не собирается учить. И хуй ему что сделаешь, потому что: Я 20 лет работаю, для конторы сделал оч многое, а вы еще в яйцах сидели, когда я целину поднимал, отъебитесь. И блядь, проблема в том что он действительно эту хуйню знает и умеет с ней работать, делает действительно сложные интерфейсы, сами приложения - сложные, но при этом в собранном виде оно жрет меньше 1МБ оператики в простое и не больше 10 при активной работе. Блядь, я просто запускаю WPF где лейбл с текстом по центру - это говно откуда 39МБ оперативки жрет. С хуя-то? Короче. Придумывалось оно с расчетом что можно будет программисту делать логику всякую, а в это время дизайнер хуячит тебе в каком-нибудь графическом редакторе всякую визуальную фигню. Если у тебя не будет собственного раба-дизайнера, а сам интерфейс не будет пиздец какой сложный(да, в замле удобнее таки сложный интерфейс наделать) - то хули выебываться?
>>2127353 > Придумывалось оно с расчетом что можно будет программисту делать логику всякую, а в это время дизайнер хуячит тебе в каком-нибудь графическом редакторе всякую визуальную фигню. Самое забавное знаешь, что? В олдовых дидовских тулкитах/рантаймах тоже было реализовано это разделение. Формочка в виде скомпилированного res-файла зашивается в экзешник. Формочку тоже без задней мысли и без знаний крестов мог бы собирать раб-дизайнер в стороннем форм-билдере, например, из современного, ResHacker - открывает экзешники, показывает все их ресурсы, показывает формочки, с возможностью их редактирования визуально. Вот тебе для иллюстрации моих слов один из диалогов 7зипа открытый в резхакере и окно добавления нового виджета, и скрипт сверху виден. Неужели он был хуже модного молодёжного гзамля? Далее, кодеру достаточно взглянуть на res-скрипт, взять имена виджетов, которые набросал дизайнер, и навязать на них логику.
З.Ы. После сишников пришли дельфисты и сделали свой костыль dfm-файл дельфи-форма, который хранился внутри дельфи-приложений как кастомный тип ресурса, в который копировался dfm-скрипт, его уже можно было поредактировать только в дельфи, скопировав текст, создав файл. С этого началась эпоха вендорлоков. Когда она кончилась, вместо того, чтобы вернуться к универсальному res-скрипту, по кой-то хуй накостылили хамл. Ну в общем-то ясно, по кой хуй - "я молодой, чоткий дерзкий, що мне дедовские лапти, ща свои говнодавфы изобрету" - такая логика.
>>2127230 Так если нужен чисто утилитарный интерфейс до побыстрее, то винформс самое оно. А своему коллеги можешь сказать, что у него тоже уже песочек из жопы посыпывается. Если хочеться современно и с заделом на будущее то WinUI/MAUI/UNO. Что бы с этого не прихуеть, можно ознакомиться с этим: https://habr.com/ru/post/546576/ https://habr.com/ru/post/566352/
>>2127463 Полгода - ыыыы, я уже мидл))) Вопросы там тоже пиздец кринжовые(в плане это же совсем дно, какое нахуй мидла-то?). Я просто не знаю. У меня будто какое-то другое АйТи вокруг и вообще я из парралельной реальности общаюсь. Лично в моей реальности(в смысел то что было и есть у меня) - джун - тот кто в соло пишет среднего размера проект за 3 месяца(как минимум альфа за 3 месяца со всеми функциональными требованиями, допиливать до релиза да, джун может еще полгода, но все функциональные требования и требования ТЗ среднего проекта он должен за 3 месяца без помощи сам реализовать), сам оформляет ТЗ(ему на стол ТТ, он покумекал со старшими чутка - выдал на следующий день ТЗ, его на согласование, если говно - дорабатывает), общается с заказчиком, участвует в конференциях с партнерами на уровне консультации по всяким кишочкам их стека, чтобы имплементировать в свой, ведет закупки железа, ездит на объект, и чтобы перейти в мидлы ему все это мнимум года 2 нужно выполнять, чтобы показать, что он - уже может претендовать на должность повыше. Так вот, когда я слышу подобные штуки от человека что мидлом там делаться хочет - чет хуею немного. У нас бы его еще год стажером держали, давали пилить какие-нибудь утилиты для внутреннего пользования. Да, там фронтенд, но не суть, суть в том что человек же блядь уровня первокурсника средней паршивости МухГУ. Какой нихуй мидл? Иди блядь за опыт еще годика 2 сиди. Мам я мидл1 Мам я полгода работаю!!1 Небось даже дев-сервер сам поднять не сможет без готовых инструментов, прод поднять - вообще охуеет, но МИДЛ. Блядь. Нахуй. Да, там фронт, типа знать не нужно, но они же блядь упорно хотят чтобы их программистами считали, но какой он нахуй программист, если все что он делал - говновиджиты и собирал из готовых, выбранных его лидом хуйню? Это не программист не хуя. Это грязь из под ногтя. Тьфу, блядь. Сори за токсичность.
Нет, блядь. Не сори. Вот зашел в его твиттер. Охуеть. Блядь. Решил задачку на редьюс. Мать его в сраку. Беру слова обратно. Это точно сеньер. Да не. Лид, нахуй. Архитектор, едрить его в сраку. И гитхаба у него нигде нет, чтобы какие-то другие примеры кода. Да. Блядь. Нахуй и в пизду.
>>2127356 Замл позволяет более красивое UI средствами DX сделать без особой мозгоебли, тогда как на WinAPI надо поебаться, чтобы привести GDI+ в божеский вид.
Посмеялся про нытье на 39 МБ на хелоу ворлд. В свете удвоенной памяти с выходом DDR5 и сложностью поддержки pinvoke говна.
>>2127483 >джун >сам оформляет ТЗ >общается с заказчиком >ведет закупки железа, ездит на объект Ну пральна, а синиор новый беэнве новый выбирает в рабочее время, так? Я хуею с вашей шарашкиной конторы. Не хвастайся такой обсерной хуйней
>>2127483 >джун >сам оформляет ТЗ >общается с заказчиком >участвует в конференциях с партнерами на уровне консультации по всяким кишочкам их стека >ведет закупки железа >ездит на объект Этот анон кукухой поехал. Только последний пункт может быть хоть как-то касается разработчика.
>>2127497 А сеньер - может в соло довольно крупный проект поднять за те же три месяца(а те что поднимает джун - он за неделю-две может осилить) и при этом у него дохуя опыта, чтобы принимать стратегические решения относительно архитектуры, нагрузок и прочего. Ну и да, сеньер, в случае когда проект не просто крупный, а пиздец какой крупный - может выполнять обязанности тимлида и организовывать работу команды. И, блядь. Так везде было где я работал. И я не то чтобы горжусь, просто я хуею с того насколько разный экспириенс от работы в айТи у людей может быть в зависимости от того где они карьеру начинали. >>2127518 Это опыт embedded разработки, няша. Я пайку и выбор комплектующих еще не включил сюда и обоснования руководству, почему нужно покупать вот эту хуйню, если у китайцев вроде то же, но стоит в 10 раз дешевле.
>>2127529 По твоему embedded ограничивается только плюсами и прошивками? Эх, если бы так было. Я бы с радостью байтики всю жизнь перекладывал. Но нет. К несчастью даже ООП добралось. А на мощных железках во всю жава крутится и те же шарпы. Благо есть деды, что топят за сишечку до последнего, к сожалению для них - я за него не топлю.
>>2127541 Я потому и написал, что последний пункт может быть хоть как-то и касается разработки. То, что на тебя повесили левые обязанности - сугубо твоя проблема.
>>2127541 netmf подох и слава богу, блядь. а нормальные шарпы ты запустишь только на линуксе под микроконтроллеры (если запустишь), но это уже нихуя не true embedded в плане требований к железке. Да даже netmf требует для нормальной работы 1-2 mb оперативки (умножай это число в 2 раза, если сможешь запустить джиттер)
>>2127568 Ну да, это уже не совсем тру embedded. Только вот ну а как называть еще, когда вы все жизнь писали под микроконтроллеры на си и иногда плюсах, но вот внезапно вам сказали: нас заебало что пока мы трушно делаем - конкуренты взяли аналог малины с линуксом, используют жсоны вместо трушних протоколов и ебашут как не в себя. Вот вам деньги, делайте свою сборку линуксовую и догоняйте пидоров.
>>2127584 Вся хуйня стандартизируется и описывается во всяких рфц и тому подобных спеках. Т.е., нужно например запилить имейл валидатор, открываешь рфц 822 и пошел пилить. Простому смертному это нахуй знать не надо.
>>2127576 у многих вендоров есть или свои сборки типа OpenSTLinux или sdk с поддержкой, но это как правило куцая хуйня и тебе всё равно придётся какой-то из популярных дистров пытаться установить на свою платформу. Хотя это ещё не совсем мейнстрим, в основном предпочитают что-то полегче, posix-подобное, типа mbed, FreeRTOS, chibios и прочее.
На хабре прочитал такой каммент: >Что произошло при вызове метода с params? Выделил память (инкремент счётчика), заполнили, использовали и забыли. Далее GC (внимание) проходит по живым, достижимым объектам, среди которых нашего params массива уже нет. GC компактит кучу и перетирает память выделенную под params так никогда и не узнав, что он вообще существовал. >То есть непонятно зачем вы оптимизировали временные объекты если их создание и удаление это (почти) бесплатная операция? GC (почти) никогда эти объекты не увидит и не тронет. Все ваши оптимизации привели к тому, что снизилось давление на кучу, реже стал запускаться full GC, но он все также тратит много времени на эти запуски. Не то, чтобы это вообще было бессмысленно, но такое. >Гораздо веселее разобраться почему GC тратит время на обход и компакт кучи. Если модель заточить под GC, то беспокоиться о params и итераторах уже не нужно. Я хочу сказать, что создавать сотни тысяч и миллионы объектов в секунду это не проблема, если они живут секунды. А вот напихать в кеш кучу развесистых изменяемых объектов это прямой путь к тормозам. Ответов на него нет, минусов не накидали. Он правду говорит, что если объект ссылочного типа короткоживущий, то он практически никак не грузит коллектор и не влияет на производительность, и скажем замена его на значимый тип скорости не даст?
>>2127353 > Я 20 лет работаю, для конторы сделал оч многое Если человек работал 20 лет подряд программистом на одном месте, то... как бэ... ну... он чмо
>>2127668 Джуну стоит скакать по рогам и копытам, и пробовать мовомодные фреймворки и аджайлы. Но если ты уже на верхней позиции для технического специалиста, то зачем скакать? Если у тебя зп ниже рынка, то ок, поищи может где больше дадут, то если всё устраивает и зп выше не будет, то как бы скакать - это идиотизм.
Есть два класса. После того как я вызываю Database.EnsureCreated у меня сформировалась связь один ко многим в бд, EFCore сам построил таблицы и связи в них (пик1 - модели, пик2 - сформированная бд самой EFCore)
При попытке добавления Order в базу данных я получаю пик3 из-за того, что нужен вторичный ключ, а я на него забиваю хуй.
короче вот мои варианты решения: 1. Первый тот что на пик4 (Это класс модели Order) 2. Добавить такое же свойство как и в первом пункте, но во ViewModel тем же способом что и первый и удалить из Model 3. Забить на это 4. Вариант о котором я не знаю, но полагаю он теоретически есть (к примеру что-то настроить и efcore сам будет получать Id у нужного свойства и записывать в бд его как вторичный ключ). Нагуглить не могу
>>2127711 Чел, я уже старенький, у меня есть семья, дети и ряд целей в жизни, вот совсем никак не связанных с реализацией крутых проектов для кабанчика. От работы мне надо, чтобы платили больше, а ебали мозги меньше. На текущей работе это соотношение для меня весьма удовлетворительное. Если быть не программистом, то кем бы ты хотел быть в 60? Начальником программистов? Некоторые люди комфортно живут с 200+ писем в день и тратой 20% времени на телефонные разговоры, и 40% времени на совещания, а также постоянно переключаясь между задачами, и работая на 3-4 часа больше, чем отведённые 8 часов. При этом зачастую надбавка по зп будет ну процентов 20% по сравнению с должностью аналогом сеньора. Будешь ли ты готов к этому в 60 лет? Сомневаюсь. Можно быть начальником уровня вице-президента, только не стоит на это рассчитывать, скорее всего у тебя не получится.
>>2127496 >на WinAPI надо поебаться GDI+ работает в ряде случаев в разы быстрее winform'ов. Особенно когда надо что-то с битмапами делать. Формы на каждый чих будут кучу лишних аллокаций делать, когда GDI позволяет напрямую байтики крутить. Когда в интерфейсе есть места, которые должны быть быстрыми и отзывчивыми, без GDI+ никуда. И он кстати весьма понятен, один раз напишешь свои обёртки и проблем уже не будет.
>>2127736 > Тому челу ты бы это в лицо не сказал И что? Это аргумент? > всегда платили раза в 4 выше рынка? Интеллект с годами подтачивается, а программирование это постоянный скилл-чек твоего интеллекта. Профу эту надо менять с годами.
>>2127838 > кем бы ты хотел быть в 60? Долларовым мультимиллионером.
microsoft identity server теперь платный? Ну охуеть. Да и еще 12,000 баков в год для анлимитед апликейшенов. Це зрада. раньше хотел заюзать, но останавливался на облачных решениях, наверноеи правильно
>>2127713 Классы вдвое медленнее, но это всё же не так страшно. Это значит, что в самых критичных местах их конечно надо заменять структурами, но в подспудных методах можно и классы юзать. Интересно, как в яве решается эта проблема, где вообще нет значимых типов, кроме примитивов.
Вопрос: как расшарить директиву using между разными файлами в одном неймспейсе? В начала каждого файла писать вереницу из десятков using MyUInt32 = System.UInt32 как-то явно не ООП-way, внутри наймспейса если писать, то из других файлов не видать.
>>2128295 Зачем? Нежизнеспособна хуйня же по типу замарина. Высрал ты с горем пополам свою прилку, а как поддерживать ее годами если мелкомягким моча в голову ударит в очередной раз? Алсо, только недавно появился плагин для безболезненной интеграции адмоба в замарин (а последний считай уже сдох)
>>2128335 Зачем ты себе геморрой придумываешь? Типо у тебя дохера конфликтующих имен классов? К ОПП юзинги никакого отношения не имеют. Если все же очень надо, создай шаблон файла, в котором все будет прописано.
>>2128421 Я другой анон, но такая потребность возникает, когда например один и тот же код нужен то для float, то для double. Приходится использовать что-то вроде using REAL=float; И эту конструкцию банальным ctrl+f во всем проекте заменять когда нужно. Хотя тут вроде пишут, что наконец завезут фичу, избавляющую от этого: https://habr.com/ru/post/572902/
>>2128454 А выглядит эта годнота c INumber<Self> вот так. Казалось бы, очень круто на первый взгляд. И, как говорят, будет настоящий zero-cost. Но простейшая попытка реального использования приводит к необходимости использования таких вот костылей. Но очень надеюсь, что фичу допилят к ноябрьскому релизу NET6.
>>2128665 Ну так и программирование вообще не всем заходит. Лично мне метанит отлично зашел, очень быстро можно вкатиться, если до этого знал другой язык.
>>2128687 > если до этого знал другой язык Ключевой момент. Метанит это типа шпоргалка/квикстарт, но некоторые почему-то пытаются использовать его как учебник по вкатыванию.
>>2129075 Отчасти. Книга как бы для профессионалов, но тут подразумевается не профессионал в шарпе, а то, что уже умеешь программировать, хотя бы знаешь какой-нибудь язык на уровне lab.cpp. В целом изложение понятное, но бывает, что автор выдергивает темы из будущих глав, а потом пишет, что если вы ничего не поняли - это норм, я в такой-то главе всё объясню. С другой стороны это самая свежая и актуальная книга на текущий момент. Альтернатив практически нет.
Есть задача прикрутить конфиг файл к приложению, чтобы в него можно было записывать путь до базы и до кучи всяких дополнительных файлов или не записывать, сохранять введённые пользователем данные и подставлять их или не подставлять при последующем запуске и тому подобное. Как это лучше сделать, а то я пока не совсем понимаю, тем более, что уже есть app.config, где пути к базам прописываются
>>2130003 в 90% случаев они не нужны и будет достаточно обёрток над ансейф кодом из Unsafe, Marshal, Buffer + в .net появится ещё NativeMemory. Ну и оборачивание всего что можно в Span тоже неплохо помогает в плане скорости.
Такой вопрос. Есть у меня некий сервис, который делает всякие круды. Этот сервис использует БД как хранилище + еще всякие внешние зависимости. И вот вопрос мне надо оборачивать все операции в тру/кэтч и бросать свои исключения? Ведь по идеи вызывающему должно быть по барабану, что я использую в качестве хранилища. Но при этом как-то дохера ошибок получается от кейнотфаунд до дбконнектшнтаймаут. Или сделать основный ошибки со своими эксепшенами, а остальные кидать в аггрегатионЭксепшн? В общем есть что почитать по этому поводу или бест практис какие-нибудь.
>>2130301 >Зачем это нужно, если есть override? А если в базовом классе метод не виртуальный? А? Но перекрытие дело такое, знай что оно существует, но использовать его не надо.
>>2128432 Брооо! Уже год задаюсь этим вопросом. ИТТ мне либо советуют АВАЛОНИЮ, либо нахуй шлют. Так вот, я для себя открыл кроссплатформенный оконный тулкит ETO, поддерживающий современные подходы типа MVVM. В общем и целом суть токова, ты делаешь солюшен, включающий серверную часть, на которой у тебя создан абстрактный оконный интерфейс, и несколько клиентских подпроектов под каждую из интересующих тебя платформ. На винде "клиент" визуализирует "серверное" окно через WPF или Forms, на линухе через GTK.Sharp, соответственно и зависимости вышеуказанных графиклиб подтянуты только в свои подпроекты. Таким образом, при шиппинге на линукс, ты собираешь и дистрибутишь линуксовый подпроект с его зависимостями, среди которых твоя собственно главная прога с абстрактными окнами. На винду всё то же самое, но виндовый подпроект. На мак - тоже.
>>2128534 Avg как-то неправильно реализованы. Я бы подавал на вход парам-па-пам-массив, и у него уже был бы размер, который не надо считать.
public static T Avg(params T[] numbers) where T : INumber<T> { T result; for (int i = 0; i < numbers.Length; i++) result += numbers; return result / numbers.Length; }
>>2130518 Не понял, что ты хотел сказать. Можешь еще посмотреть на уно или мауи как приемника замариана, но я не знаю насколько они продакшн-реди. >>2130507 Да чего разъебывать, это еще даже не бета фичи. Пусть определятся сначала что и как будет в финале, а потом уже и подразъебать можно.
public static T Avg(params T[] numbers) where T : INumber<T> { T result; for (int i = 0; i < numbers.Length; i++) result += numbers; return numbers.Length > 0 ? result / (T)numbers.Length : (T)0; }
Я не о том. У меня одна функция для вычисления среднего арифметического любого количества чисел, а у него только двух.
>>2130542 > Можешь еще посмотреть на уно или мауи Смотрел. Уно, мауи, замарин, авалонию, хвт, чистый гткшарп, кьютшарп, ещё кучу всякого говна. ЕТО - самый заебись (для меня). Полностью покрывает мои потребности.
>>2130580 Делать мне больше нехуй. Давно это было, прошлым летом. Вкратце скажу так. Некоторые переусложнены, некоторые устарели и не собираются без кучи депрекацированного легаси, у некоторых нет очевиднейших и нужных классов.
>>2130611 Как ты вообще связал сокрытие через new и интерфейсы. Виртуальных классов нет, есть абстрактные. В новых версиях шарпа интерфейс может иметь реализацию метода по-умолчанию.
>>2130569 >(T)numbers.Length Такой каст не поддерживается в текущей реализации. Но можно вот так сделать: T n = T.Create(numbers.Length); Вероятно, компилятор или рантайм будут это оптимизировать, пока не понятно.
>params T[] numbers Математические вычисления с примитивными типами как бы говорят о том, что тут производительность важна. params при каждом вызове аллоцирует массив, и поэтому применяется не повсеместно, а только дозированно по необходимости. Зачастую используется перегрузка с 2, 3, 4+ аргументами, а не params. Хотя в ряде случаев конечно теоретически компилятор мог бы оптимизировать params, но насколько я знаю, пока нет такой оптимизации.
>>2131108 > теоретически компилятор мог бы оптимизировать params Я даже знаю как. Компилятор пробежится по коду, выяснит, с каким количеством вызывался парам-па-пам, и: > используется перегрузка с 2, 3, 4+ аргументами
"Кроссплатформенность", говорили мне они. Начал проект под линухом, перехожу на венду. ХУЯК > NuGet.Packaging.Core.PackagingException: Не удалось найти резервную папку пакета "/usr/share/dotnet/sdk/NuGetFallbackFolder" Ладно, мы не гордые, пойдём править конфиги вручную. Блять.
Господа, поясните такой момент. Вот есть сайт на асп нет коре с идентити. Роли, клаймы все дела. И вот есть, допустим, роль модератор и юзер с этой ролью. Потом я его разжаловал и он перестал юыть модером. А у него же в куках идентити указано, что он модер и user.IsInRole(Mod) будет тру и экшены с атрибутам авторизации пропустят его как модера. Или вот, раньше у модеров был клаим на правку постов, а потом я убрал его, но у авторизованных ранее этот клаим остается. Как быть в таких ситуациях? Каждый раз лазить в базу? Но тогда зачем в куках что-то кроме айди юзера. Как поступают серьезные дяди в таких ситуациях?
>>2131267 > Почему шарпу не нравится такое форматирование? > В мире шарпа так не принято выравнивать текст? В 2к21 не принято. Лет 30 как нигде не принято. Откуда ты вылез, старпёр?
>>2107311 (OP) А почему нету ссылок где собственно скачать всю эту литературу? Например забил в гугл players guide этот и нихуя не нашёл где её почитать.
>>2131137 Сложность вероятно в том, что в теле метода ты можешь произвольно работать с массивом и вызывать различные методы массива, использовать linq, передавать массив в другие методы и т.п.
>>2132283 Компилятор например заменит динамический массив, создаваемый в одной функции написанной кодером, на несколько функций-клонов, в которых будет инициализироваться быстрый как понос статический массив. Почему нет?
Допустим есть 3 микросервиса. Первый - пользователи Второй - гаджеты(содержит описание гаджетов, хранит информацию о типе, характеристиках, ну и архивные значения прочитанных данных) Третий - система общения с гаджетами с помощью json'а Собственно система простая: завели пользователя, микросервис сказал сервису гаджетов что вот есть пользователь, теперь при добавление на фронте гаджетов - они добавляются в сервис гаджетов. Затем если нужно что-то прочитать-записать на гаджет - микросервис передаст сообщение третьему и тот что-то прочитает/запишет. Вводим четвертый сервис - общение по секретному протоколу, который работает через COM-порты. Ну допустим надо. Теперь нужно внести эту возможность в сервис гаджетов, чтобы была вилка: вот когда гаджет такой-то - отправляй запрос на чтение туда, когда такой-то - туда. Допустим систем чтения у нас уже 100. Вилка оч большая получается. Допустим добавилась какая-то логика, типа какой-то из протоколов позволяет коннектиться к устройству, какой-то получать от него пуш-сообщения, где-то нужно передать сертификат, где-то еще что-то. Получается что мы либо теряем часть возможностей протокола, либо теряем консистентность и второй сервис уже должен как-то знать про эти протоколы и как-то от пользователя просить нужные данные предоставить. Допустим появляется еще сервис картографии, мы хотим иметь возможность смотреть где гаджет сейчас, допустим одни - могут сообщить информацию, другие - статично расположены. Хотелось бы чтобы те что могут сообщить информацию - таки ее сообщали. Но как это должно выглядеть? Опять через второй сервис слать запрос чтобы он проксировал его к нужному? Вот допустим это порешали. Теперь мы хотим организовать какое-то переодическое чтение списка заранее известных абстрактных параметров(допустим серийный номер, почему абстрактных? Ну, в системе это серийный номер, но в этом протоколе это октетовая строка лежащая в таком-то регистре, в этом - это просто ответ по рестапи, в том - это файлик в папочке по такому-то маршруту и это все как-то должно быть объединено в единую сущность серийный номер). Решаем сделать отдельный сервис. Пусть он сам в обход сервиса гаджетов напрямую шлет запросы к разным системам сбора, а те уже в гаджеты передадут информацию. Но как мы можем знать о том, что такое-то устройство там вообще есть, какие там параметры? Не все же разом заставлять читать. Можно конечно придумать хитрое апи, допустим: считай серийный номер, время устройства, геокоординаты, но это убивает опять же часть протоколоа и привязывае уже к конкретным реализациям.
В общем я это к чему. К тому что чем дольше я с микросервисами имею дело, тем больше кажется, что шляпа какая-то. Может быть я не умею готовить их, но серьезно, с каждым новым микросервисом я вспомнимаю как это же все делалось охуенно в монолите.
>>2132286 Можно сделать массив stackallock, но всё равно, например вычислить среднее значение из двух чисел - это две инструкции, а сделать то же самое в цикле, пусть даже на стеке - это в разы больше инструкций процессора.
>>2132312 Так не в цикле... Ааа... Компилятору надо в таком случае обладать ИИ, чтобы угадывать, тут мол цикл можно в ряд разложить вот так, ага, а вот здесь выносим за скобачьки, падажжи.
>>2132286 И как компилятор должен разруливать вот такое вот? А если там довольно сложная логика и важен порядок аргументов и метод строк на 100500, еще и подгружает что-то из конфигурации, которая берется из файлика, получаемого с сервера?
Почему мне кажется что шарп - мертвый язык? Нет, не бегите бросать тапками, я просто описываю свой опыт написания коммерческих программ за один год фриланса
Раньше я писал на С++, и прям ощущается что язык живой - везде идет какая-нибудь движуха, кто-нибудь что-нибудь спрашивает, на любой вопрос можно найти ответ, на любую тему и наиболее актуальный. Также можно найти готовое решение на любую тему.
А тут - темы о шарпе полудохлые, многие темы вообще не раскрыты, почти нет никаких примеров, особенно новых, под коре и .net 5... Под коре вообще хуй что найдешь
Например вчера я искал способ внедрить онлайн карту в свою десктоп программу на .net 5. НИХУЯ толком. Ну нашел gMap... Эта хуита уже почти десять лет развивается, а до сих пор никто и строчки офф документации не написал - даже самый простенький пример как все это установить. Вообще ничего нет.
Нашел по каким-то всратым доисторическим примерам с 2013 года на давно протухший нетфреймворк... Кое-как заставил это работать... Ну как заставил: - яндекс карты почему-то отказались показывать (хотя все остальные работают) - поиск по ключевым словам вообще не работает, даже на тех примерах где он должен был работать - как перевести гугл карты с английского на русский я так и не понял (зато есть возможность вывести их на китайском блядь) - почему-то при завершении работы оно все зависает нахуй минут на пять реального времени (блядь, это шарп - а проблемы как когда память утекла всишке и не может очиститься) И в гугле нихуя нет ответов (или они доисторические и на сегодня не актуальные - ибо другой фреймворк).
А такая банальная задача как вылить данные из программы в какой-нибудь Excel - ну например мне нужно сделать табличку имеющихся товаров на складе в файл чтобы с ним уже могли работать те кому надо... Хуй. Нихуя нет по тому как это сделать Как будто никто ничего не делает, нигде ничего не обсуждается, никто не спрашивает, никаких толковых примеров. Под нетфреймворк хотя бы были оффициальные либы, типа интеропа. А под коре - нихуя.
О, ну есть пара всратых коммерческих либ, да только по платной подписке (я бы еще может один раз заплатил, но точно не подписка, идите нахуй). Почему под С++ все есть, а под шарп нихуя?
А когда пытался сделать такую простую вещь как объединение ячеек в DataGrid - ну я конечно нашел - какие всратые простыни говнеца с стековерфлоу. Никаких толковых гайдов
Хотел посмотреть что на гитхабе новенького - по десктопу нихуя. Хотел глянуть что в видосах в ютубе новенького - дрочат базовые вещи уровня вывести кнопку на форму и ничего более серьезного не делают.
Вообще в печали. Помоему даже на ноде я бы больше инфы нашел
>>2132269 Я конечно понимаю, что дело в привычке, но когда все выровнено, то глазу не за что зацепиться, особенно когда есть имена существенно различаются по длине и значение получается в 3-4 табах от имени. Кода такой херни на пол экрана приходится даже строку выделять, чтоб не ошибиться. А если не выравнивать. то тебе сразу вот имя, а вот значение. >>2132315 Ты еще не учитываешь, что код может переиспользоваться. Вот заменил тебе компилятор массив на n параметров, а Вася подцепил твою сборку и вызвал твой метод (даже приватный через рефлексию) с массивом n+1. И твоя оптимизация обосралась.
>>2132294 Первый - пользователи Второй - гаджеты и пользователи Третий - интерфейс через json Четвертый - интерфейс через com Пятый - гаджеты и местоположение, надо, добавь пользователей Ты не понимаешь, что такое Bounded Context.
>>2132602 >Двач ведь показатель популярности, кек. Я и про другие
>>2132602 >Не нашел как создать csv файл? Бедненький. Во-первых csv говно - я даже хуй знаю, можно ли в нем делать всякое оформление типа вставки фотографий, настроек фильтров, макросов.
Во-вторых csv говно, так MS Office 2010 его почти никак не открывает - например кракозябры вместо русского текста. И не надо орать про говно типа опенофисов или что там сейчас модно у прибитых свободкой. У нас внутренний софт завязан под 2010 офис (включая много чего на VBA), ставить стопятсот версий табличных редакторов - никто спасибо не скажет.
В третьих csv говно, и посоветовать его может только диванный теоретик не нюхавший русского софт-продакшена. Как бы все эти циферки нужно сдавать в виде сотни разных отчетов в фнс, еиасы, гис жкх, соцзащиту, и сотни других департаментов. А они требуют заполнения их форм, которые внезапно все в формате xls или xlsm - да тебя нахуй там пошлют с твоим csv, так как у них тоже свой софт забит на MS Excel (я даже скажу что в еиас сейчас нахуй пошлют даже если у тебя там версия офиса новая, так как хуй ты заполнишь их формы в MS старше 2015 - их формы не работают, ответ от техподержки)
Так что у меня задача интегрировать MS Office, а не какую-то херню
Скажите, 1) В шарпе есть возможность локально хранить nuget пакеты? 2) Как решается конфликт имен, например у джавистов приписка домена к пути пакета. А тут как?
>>2132674 Ты уже определись, у тебя банальная задача в отображении табличных данных или ты решил порно видео крутить в файле.
1. Ты очень сильно недооцениваешь "банальность" своей задачи. Лучше интеропа ничего нет, но я с такого бы проекта сразу бы сбежал на следующий день. Для его работы нужна конкретная установленная версия офиса и конкретная ссылка на зависимость. 2. Ты ожидаешь, что найдется добрый самаритянин, который бесплатно напишет отличную либу без багов и недостатков, тогда как такой сложный софт как опенофис или либраофис не могут без ошибок открыть сложный документ. 3. У тебя есть бабки на офис, но нет на лицензию либы. К тому же, ты не понимаешь, почему сделано через подписку. Причем ты не бесплатные, не платные либы не привел в пример, не описал, чем они тебе не подходят. 4. Данные в стороннюю систему передают не через эксель файлы и уж тем более не руками. И им нахуй не сдалось твое оформление, vba и фильтры в файле. Засовывать изображения в файл - это верх глупости.
Сидит на говнопроекте и придумывает себе говнозадачи.
>>2132743 >4. Данные в стороннюю систему передают не через эксель файлы и уж тем более не руками Очень внимательно посмотри на вот это: http://www.eias.ru/?page=show_templates Именно в экселе.. и руками. А вот чтобы не руками, для этого я и нужен: Это только один из примеров. Дохрена еще всяких отчетностей. Плюс еще внутренняя документация для всяких анализов и прогнозов.
>>2132743 >Лучше интеропа ничего нет интероп не поддерживается в core и net-5-6
>>2132743 >У тебя есть бабки на офис, но нет на лицензию либы. Не у меня, а у компании. А доказать покупку либы - "ты же программист, мы тебе зарплату платим чтобы ты делал".
>>2132743 >Причем ты не бесплатные, не платные либы не привел в пример, не описал, чем они тебе не подходят. Я не нашел бесплатные в том и дело. Нашел платную EPPlus - всем хорошо, но подписка. Видел еще какую-то платную, но там еще и жопные лимиты
>>2132743 >Засовывать изображения в файл - это верх глупости. Ну опять ты голословно заявляешь "не нужно", даже не поинтересовавшись задачей. А подумать? данные ведь могут быть разными - это могут быть графики для мониторинга ситуации, это могут быть собранные фотографии состояния склада при выгрузке всех данных по нему - чтобы директор решал за модернизацию. Или карта его расположения... Да дохера всего. Можно конечно раскидывать все по папкам - но поверь, начальству меньше всего хочется куда-то тыкать - ему надо все сразу на большом проекторе в виде презентации какой-нибудь. Не руками же сидеть и делать, особенно если это ежедневные отчеты
>>2132770 У каждого класса есть namespace. Первое слово - обычно название конторы. Т.е. или пакет называется в виде полного названия класса или что-то вида ФирмаНейм.ХуйняНейм. Nuget не позволяет создать два пакета с одинаковым названием, но можно дублировать названия из разных Nuget хранилищ, тут и нужны алиасы, но лучше про это забыть.
>>2132815 Почему забыть? Ну вот ситуация когда ты работаешь с какими-то локальными пакетами, без регистрации на сайте и вдруг пересекается. Тут только алиасы?
>>2132836 Эту либу когда-то использовал для генерации отчетов. Забагованная и кривая как и все, что связано с офисом. Ты можешь один и тем же кодом генерировать стили на два листа у файла, но на выходе могут получиться разные листы, потому что ты что-то не учел, но апи позволило.
>>2132861 Кстати, на фоне интеропа, эта либа аленький цветочек, потому что интероп открывает файл в фоне и делает эмуляцию действий пользователя с вытекающими последствиями как не закрытый процесс или странные баги. И либа не позволит воспроизвести порно видео.
>>2132804 Ну да, вот толи дело онлайн казино писать или магазин анальных затычек - вот это идеальные проекты
>>2132802 Нормально нельзя. Есть черезжопный способ через ручной конфиг csproj - но это то еще говнище глючное.
Ну или показывай нормальный способ
А, не знаю проблема это интеропа или этого костыля, если вот для интеропа создать Application, вызвать его Open, а потом где-нибудь вылетит исключение - то оно останется висеть в памяти даже если приложение уже закрыто.
Лично с этим столкнулся, когда делал интероп на аксес - часто ведь то там-то там вылетит в девелопе, и по итогу к концу дня у меня вся память (все 32гб) засрана незакрытыми аксесами застрявшими в памяти.
И пока что не нашел как с этим бороться (у wpf нет четкого финалайза, пока что только вбил в обработчик исключений апликейшена принудительное закрытие - но это не помогает в дебаге так как до туда не доходит... И до кучи годных решений по этому также не нашел, что еще раз говорит что как будто никто не кодит и только я уникально нахожу баги - но это блин базовые вещи
>>2131460 Спасибо. На основании статьи и своих мысленных потуг родил такую схему. SignUpManager при логине будет помимо прочего класть в юзера клаим lastLoginToken:guid. Контроллер, после вызова SignIn возьмет этот токен и запихнет его в MemoryCache. При запросе от юзера я буду сравнивать токен из кук с токеном из кэша и если не совпадают или в кэше нет инфы, то тогда пользователя занаво за signIn'ить. При изменении звания юзера удалять его токен из кэша, при изменеии прав для роли можно грохнуть все токены из кэша. Есть какие-то очевидные подводные, которые я не заметил (ну кроме того что при 1кк юзеров минус ~150мб оперативы на кэш)?
>>2132910 >Есш ибольше одного инстанса будет, то пизда Инстанс кэша? Такое может быть? Я просто еще не ковырял аспшный мемори кэш. Ну в худшем случае ляжет база хД, Хотя можно свой синглтон словарь под такое сделать. >>2132910 >Просто юзер айди пихай Как он мне поможет узнать актуальные ли клаймы в куках лежат?
>>2132883 >толи дело После казино или магазина ты хотя бы как-то развиваешься, а от электронного документооборота только деградация. Тем более с начальством, которому наплевать на разработчиков. У меня родственник 50+ как раз работает на такого полоумного, отчеты заполняет письменно и через компьютер одно и тоже дважды, вместо того, чтобы набрать на компьютере и распечатать, принтер есть, но бюрократия. Не говоря, что такие процессы уже давно автоматизируются, исключая вообще человеческий фактор.
>Нормально нельзя В чем проблема добавить пару параметров в csproj размером с десяток строк от силы? Это проблема самой либы интеропа, а не в том, что кор не позволяет ссылаться на фреймворк либы. И раз у тебя есть опыт с С++, сделай враппер над С++ либой через маршалинг вместо интеропа.
>вызвать его Open, а потом где-нибудь вылетит исключение Это ты слишком удачный сценарий описал. Я добавлял изображение не в клетку через OLE контейнер. Исключения не было, но и изображение не добавлялось.
>к концу дня у меня вся память (все 32гб) засрана Открывай другим пользователем и раз в час убивай старые процессы. Или запоминай PID.
>но это не помогает в дебаге так как до туда не доходит Пиши логи.
>показывай нормальный способ В нормальных системах для твоей задачи эксель не нужен. XLS/X - это хуевый формат для передачи и хранения данных, и работать с ним крайне неприятно и сложно.
Вот такой тупой вопрос. Смотрите. В базе есть некоторые типы справочников. Они константные. По сути это сорт оф enum но лежит в базе. Допустим - тип пользователя {id : 1, name : admin}, {id : 2, name : user}, {id : 3, name : guest} Что я хочу. Я хочу собрать openApi в котором будет примерно следущее: "enum": ["admin","user","guest"] При этом я не хочу делать его ручками. Да и каждый раз в базу лезть тоже не хочется(да, константные-то константные, но может быть нужно будет что-то добавить и хочется чтобы в опенапи это отразилось). Собственно вопрос: как проще всего это сделать? Плюс дополнительный вопрос, как на фронтенде красивенько это рисовать чтобы были на admin, user, guest а Администратор, Пользователь, Гость.
>>2133173 > Подскажите, с чего начать. Нужен такой стэк. кор и впф? Да блять с МСДН и начни. Лучшей документации для их собственных тулкитов ты не найдёшь.
В общем хотел сам изучить шарп. В тредах нихуя почти не нашёл, в закрепе тоже. В б никаких ссылок на книжки не дали. Охуенно короче. Пришёл за ссылками на книжки и видосики - получил хуй в нос. Спасиба.
Единственное что нашёл ссылку на csharp net tutorials. И на том спасибо.
В итоге пришлось покупать курс от скиллбокса. Ведь стало понятно что придётся иначе искать всё самому и заёбываться.
>>2133414 Как по ссылке это не то. Опенапи позволяет нормальные строки передать. Если я буду сериализовать enum - то там будет НЕКРАСИВО если там какой-нибудь PrivilegedUser - так оно и отдастся. А я хочу чтобы в данном случае отдалось PrivilegedUser. Ну и этот вариант завязан на том что я enum использую в dto, а хуячить enum если он есть а базе и там - просто нарушает dry. Опять же, если нужно будет добавить новый тип пользователя - нужно будет добавлять в двух местах: в этот вот enum и базу.
>>2133652 Умение самостоятельно искать инфу - это один из навыков погромиста. Список книг кстати есть во втором посте. В чём проблема вбить в гугле запрос "имя_книги скачать"?
>>2133652 Ты забыл прорекламировать Raid Shadow Legends. Но если тебе в гугле книжку не найти, то самообучение для тебя, конечно, невозможно. Но с другой стороны тут и курсы не помогут, посему лучше посмотреть в сторону профессий, где не нужно постоянное обучение.
>>2133639 На документообороте ты больше ничего не делаешь, кроме трансформации данных из одной формы в другую. Ценность такого опыта на нормальных проектах около нуля. Это еще хуже, чем в тупую круды пилить.
>>2133827 Открываешь вакансии и смотришь список базвордов. Да и низкий шанс, что встретится знание экселя. Ты же не пишешь в резюме или на собеседовании, что знаешь например JSON или PDF. И выше уже написали, что большинство сидит в вебе.
Объясните для дебила что я делаю не так. Я скачал и установил SQL Express и с ним Management Sudio. В своем тестовом веб-приложении создал модель юзера, сгенерировал миграцию, сделал Update-database. Смотрю в management studio и не вижу бд. ConnectionString на первом пике ObjectExplorer на втором
>>2133701 В том что там сплошные платные версии например? Сколько я должен страниц гугла пролистать? Почему ВАМ трудно это в тред залить, если у вас вся эта литература под рукой? Вы черви-пидоры которые притворяются помощниками а на деле вам лень поделится чем нибудь, для вас нихуя не стоящим.
>>2133706 А ты тему на меня не переводи. На кой хуй ты в треде сидишь, если у тебя книжка есть, и скидывать ты её не хочешь? Сдристни тогда, советчик.
В профильном чате в телеге мне всю литру дали спокойно.
>>2134110 Какая свежая кровь? От вас пользы вкатывальщику НУЛЬ просто. Лучше в чаты ТГ пойти или группы вк, там хотя бы реально помогут. Вон челик выше спросил как ему на работе хуйню сделать - РЯЯЯЯЯ ОФИС РЯЯЯЯЯЯ ТВОЯ РАБОТА ГОВНО РЯЯЯЯЯ вместо нормальных советов. Нахуй вы нужны?
>>2132602 Вот ты вот, обоссанец, я мать твою ебал. У тебя анон спросил совета а ты тока выебоны ему кинул свои. В жопу их себе засунь.
>>2132743 А ты сидишь в говнотреде и выебываешься тем что ты говно. У тебя спросили совета. Не можешь помочь сиди молча чмо. Вне двача тебе бы уже бан дали за такую хуйню блядь.
>>2132883 >если вот для интеропа создать Application, вызвать его Open, а потом где-нибудь вылетит исключение - то оно останется висеть в памяти даже если приложение уже закрыто Все созданные объекты Excel нужно вручную прибивать через Marshal.ReleaseComObject (но не FinalReleaseComObject) , оборачивая в try-catch-finally. По этой же причине нельзя использовать операцию точка более 1 раза. var ws = application.Workbooks[1].Worksheets[1] - такое делать нельзя, промежуточный workbook останется висеть в памяти. Нельзя делать foreach, потому что создаётся висячий объект-итератор.
Литература вторым постом
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://docs.microsoft.com/ru-ru/dotnet/csharp/
— https://metanit.com/
2. Онлайн-компиляторы:
— https://ideone.com/
— https://dotnetfiddle.net/
3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае с WinForms делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?
C# активно развивается, недавно вышел .NET 5 и С# 9.0. Дотнет стал полностью опенсорсным и кроссплатформенным. В том же энтерпрайзе он очень даже востребован. Но в то же время стоит реально оценивать свои возможности и ресурсы. Основная часть вакансий приходится на ДС и ДС2. "Чистых" C#-разработчиков требуется буквально несколько десятков на всю страну. Вакансий в несколько раз меньше, чем в других направлениях. Порог входа намного выше, чем, например, в том же фронтенде.
5. Какую IDE выбрать?
Для Windows самым очевидным вариантом будет Visual Studio ( https://visualstudio.microsoft.com/ru/downloads/ ). Бесплатной Community-версии более, чем достаточно для большинства задач. Также есть версия для macOS.
Кроссплатформенный полуредактор/полуIDE VS Code ( https://code.visualstudio.com/ ).
Кроссплатформенный IDE Rider ( https://www.jetbrains.com/rider/ ).
Также существуют C#-плагины для Atom и Sublime Text, но функциональность там достаточно сильно урезана.
6. С# для мобильной разработки
https://dotnet.microsoft.com/apps/xamarin
Новые возможности C# 9.0: https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/
Текст шапки: https://pastebin.com/pbK8CGqw