Это копия, сохраненная 14 июня 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Литература вторым постом
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. Дотнет стал полностью опенсорсным и кроссплатформенным. В том же энтерпрайзе он очень даже востребован.
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
— 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.
17. Я не умею читать, что посмотреть?
— C# Fundamentals: Development for Absolute Beginners — https://goo.gl/meyyxO
— Набор курсов по C# от O'Reilly Media (28 часов, на английском) — http://rutracker.org/forum/viewtopic.php?t=5082978
— Канал по C# IAmTimCorey (на английском) — https://www.youtube.com/user/IAmTimCorey
— 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.
17. Я не умею читать, что посмотреть?
— C# Fundamentals: Development for Absolute Beginners — https://goo.gl/meyyxO
— Набор курсов по C# от O'Reilly Media (28 часов, на английском) — http://rutracker.org/forum/viewtopic.php?t=5082978
— Канал по C# IAmTimCorey (на английском) — https://www.youtube.com/user/IAmTimCorey
Шапка протухнет к следующему перекату.
Вот бы декстоп нахуй, вкатунов в гугл отправлять и обсуждать себе орхитектуры говно бекендов, эх...
+
хейтер залез не под конец, а в середине.
Перекатчик с пхп в шарфы, ты теперь срать будешь вначале треда?
>>187025
Сколько по времени учить С#, если я немного умею в питухон и жс?
Неизвестно.
Но если айсикью трехзначное, ты мотивирован и будешь 8 часов в день штудировать и развиваться, то через 3 месяца ты будешь лучше половины посетителей этого треда и третины вкатунов. Но именно, что 8+ часов в день тебя будет переть от того, что ты делаешь.
Ты с направлением определись сразу.
Вот может и спорно, но вот прям вчистую учить С# и не надо, можно пройти метаинт, а дальше уже изучать выбранную платформу и по ходу дела задумываться о языке.
Я просто открыл роадмап и охерел от количества всего. Пока не вникался что конкретно зачем нужно, но показалось, что 3 месяца - это очень оптимистично. Сам умею немного в ООП, паттерны. На кодварсах решаю задачи на 4-5 кю (на питонах). По другому хз как передать уровень своей некомпетентности.
Так блядь роадмап в любой другой платформе будет такой же. Только вместо 1-2 общепризнаных либ как в .нет там будет "выберете сами" или даже "напишете сами" а потом на реальном проекте выучите другое
Есть класс Note, состоящий из id, названия, содержания, даты создания и т.п. Где его желательно расположить? В Models?
Где расположить коллекцию, которая будет хранить инстансы Note?
Где распологать всё то, что не относится к интерфейсу? Например проверку нового объект Note перед тем, как внести его в коллекцию, и что-то вроде истории удалённых объектов.
>Есть класс Note, состоящий из id, названия, содержания, даты создания и т.п. Где его желательно расположить?
Слой доступа к данным и/или слой домена.
>Где расположить коллекцию, которая будет хранить инстансы Note?
Смотря, где использовать.
>Где распологать всё то, что не относится к интерфейсу?
В другой либе. Так, чтобы можно было присобачить хоть консоль, вместо твоей авалонии.
Есть еще другой способ. Наговнить все в одной либе и потом отрефакторить.
>Слой доступа к данным и/или слой домена.
пикрелейтед.
Можешь примерно описать структуру проекта/солюшена?
Я сейчас думаю как-то так:
проект УИ (по шаблону авалонии):
- Views
- ViewModels
- Models
- Program.cs
- App.axaml
библиотека "ядро" (class library):
- Note.cs
- некий класс, включающий в себя коллецию инстансов Note и всякую логику.
Дальше как я понимаю мне нужна ещё модель NoteModel, похожая на Note, и отдельная коллекция типа List<NoteModel>, которая уже будет выводиться на экран. При этом все изменения некоего класса должны каким-то образом повторяться в List<NoteModel> (на ивентах наверно).
Насколько это херово? Без МВВМ было бы наверно проще, но пусть будет по нему.
>вместо твоей авалонии.
Она тебе не нравится?
>Наговнить все в одной либе и потом отрефакторить.
У меня хоть как выйдет говно, я ж не умею ничего, но хотя бы видимость порядка будет.
>Она тебе не нравится?
Причем здесь это? Я тебе говорю как разделять код, чтобы он не был так хуевый. Это достигается многими способами, начиная от деления на разные библиотеки и заканчивая тестами. Обычно оно как, все насрано в одном месте и обмазано глобальным стейтом или синглтоном, что даже тесты не прикрутишь.
>библиотека "ядро"
Хуевое название, что-то на уровне менеджер или контроллер, делает хуй пойми что. Домен (тоже самое) намного лучше.
>выйдет говно
Считаешь, что все пишут сразу идеальный код? Зачем было тогда придумывать понятие "рефакторинг"? Шанс необходимости рефакторинга можно уменьшить, если все дробить на очень мелкие составляющие, но ты потом заебешься ориентироваться в изобилии абстракций.
>Причем здесь это?
Показалось, что она тебе не нравится, не более.
>Хуевое название, что-то на уровне менеджер или контроллер, делает хуй пойми что. Домен (тоже самое) намного лучше.
Ну ядро типа занимается непосредственной работой, а УИ просто оболочка... Я бы назвал как-нибудь типа NotebookCore и второй проект UI, а надо как? NotebookDomain и UIDomain?
>Считаешь, что все пишут сразу идеальный код? Зачем было тогда придумывать понятие "рефакторинг"?
Я про то, чтобы сразу была понятная и "правильная" (насколько возможно в моём случае) организация, код очевидно будет хуйнёй. Напиши я всё в одном файле с дальнейшим рефакторингом - и будет тоже самое, я не пойму лучше как всё организовывать по MVVM.
Энивэй, та структура, которую я написал, для начала пойдёт?
>Энивэй, та структура, которую я написал, для начала пойдёт?
Напиши прототип, выкинь и напиши с нуля по уму. Нет никаких "идеальных" структур проектов, потому что в зависимости от проекта эта "идеальная" структура может нарушать ряд принципов.
Твоей структуре должно быть глубоко похуй, что ты используешь, но с некоторыми оговорками. Например, ООП не всегда хорошо работает, зависит от задачи.
>Ну ядро типа занимается непосредственной работой
Нет, ядро занимается хуй пойми чем. Например, хочешь написать вспомогательную функцию, которая складывает по особенному две строки и не имеет никакого отношения к самому проекту. Куда ее поместишь? В кор? А хули нет?
>как всё организовывать по MVVM
Я уже отвечал в треде на похожий вопрос. Твой MVVM - это часть UI и в нем используются вещи, специфические для UI. M - модели UI, V - UI, VM - логика работы UI. Какая разница какой используется UI?
>Я бы назвал как-нибудь типа NotebookCore и второй проект UI, а надо как?
На шарпе общепринято называть неймспейсы и проекты в виде: МояКонторка.ПроектНейм.ХуйняНейм, например ТриКопыта.Блокнот.ДесктопUI. Название проектов еще можно сократить просто до ХуйняНейм, но только в обозревателе решений.
>орхитектуры
Давай обсуждать. Как организовать "орхетектуру" десктопного приложения, чтобы оно было по типу консольного (непрерывный поток выполнения с передачей управления, когда это нужно самой программе, а не формочкам), но вписывалось в событийный механизм современных десктопных приложений?
Дежурный шизик на месте.
Хочу добавить к элементу в stacklayout tapgesturerecognizer, чтоб на новую страницу переходить по нажатию на элемент.
Как только в хамл вставляю для стаклэйоута <StackLayout.GestureRecognizers><> - стаклэйоут перестает реагировать на нажатия. Скроллить могу, нажимать на элементы - нет.
Аналогично для других элементов, если к лейблу присрать - тоже пропадает возможность на него жать
Щито я не так делаю?
Кусок на пастбине https://pastebin.com/HyxeVSbs
Ну вроде везде чисто, ни на что не ругается. Я перебиндил на всякий к команде попроще, по которой явно видно в приложении, что она вызывается - ничего не происходит.
Делаю всё как в примерах
Попробуй подцепить метод, а не команду и проверить сработает ли. Мне все таки кажется проблема в биндинге.
Неа ничего. Дополнительно выяснилось, что именно наличие тэга <TapGestureRecognizer/> блокирует нажатия, похуй что внутри - пустой, с методом или с командой
Мне кажется я наткнулся на вот этот баг https://github.com/xamarin/Xamarin.Forms/issues/5187
Но не очень уверен тащемто
Скинь пожалуйста целиком вьюху, прошлый раз у меня ничего не работало из-за неё как раз, сравнить хочу
Нашел решение. Оказывается, биндится по умолчанию не туда и нужно подкостылить, чтоб биндилось к вьюмодели (пикрел)
https://devblogs.microsoft.com/xamarin/5-quick-tips-for-collectionview/
Странные у тебя проблемы. Я явно показал, откуда берется SearchCommand. Про то, что ты пытаешься вытащить команду из vm, речи не шло. И такое решение будет мешать выделить item в отдельный компонент.
Блин сложно. Как раз с таким решением сейчас ищу как item в отдельный элемент выделить, чтоб на новую страницу нужный SearchResponse передавать.
А как тогда лучше сделать это всё, если есть модель (пакет из нюгета, в нем как раз SearchResponse), вьюмодель с командами нужными (в этой же вьюмодели обсёрколлекшн<SearchResponse>) и вью?
SearchResponse - это vm. Нет ничего плохого пробрасывать команды.
9-11 ноября.
>Маааам! Я рисовал в альбоме красной краской, потом помыл кисточку и набрал зеленой краски, но рисунок в альбоме все равно красный!
id, parentId?, какая-то полезная информация
На фронте нужно:
id, полезная информация, children[]
И в чем проблема. 1. Я бы хотел сразу такую вот няшу получать из базы, но не знаю как это сделать. 2. Если таки буду уже на стороне приложения разворачивать - я не представляю как обойти дерево не используя рекурсию, а говорят что рекурсия - бяка...
Помогите, люди добрые, кто чем может.
Как можно сделать это красиво? Я просто новичок в этом и не вижу способ как создать запись в таблице email_to_note не вызывая search по email_audit после коммита транзакции в нее.
EF используется?
Связь one to one. В EF через ссылку на класс в проперти.
Увлекаться с one to one не советую, как и со слепым следованием 3НФ при проектировании базенки.
Можно. Но тебе надо будет забыть про ООП и изнасиловать себе мозг ECS или его вариациями реализации. Потому что, например, с текстовыми роглайками ECS не работает. ООП с играми в принципе не работает.
Им надо эту доку обновить. Потому что на C# можно еще на анриле писать из готовых движков.
>ООП с играми в принципе не работает
Хуйню сморозил и доволен.
Посмотри, блядь, код дума 3. Его уже нормальные люди писали и там нормальное такое ООП по всем канонам. Да, не монструозно как в тырпрайзе, но это проблемы не дума, а как раз тарпрайза, в котором в ванг пытаются играть и наделать миллиард слоев НА ВСЯКИЙ СЛУЧАЙ.
Что тут, блядь, из контекста вырвано? Ты сморозил хуйню, а теперь жопой виляешь. Хули ты как телка? Обосрался, ну так и скажи: Да, я чмо, на самом деле люблю попиздеть за то в чем не шарю, но я это признаю и понимаю. Не, нужно начинать про какие-то там вырывания из контекста придумывать. Стыд и срам. Подрости, чел. Мужчины - признаются что обосрались и идут дальше с гордо поднятой головой, детишки - прячут голову в песок, думая что так никто говно на штанах не заметит.
Ясно. Ты наверное так же на кодревью - ой, ну вы не так поняли, это не говнокод, просто вырвано из контекста, а когда тебе не верят - плачешь и убегаешь. Молодец. Что тут скажешь. Сразу видно будущего тимлида.
Чем чай отличается от гречки? Чем пизже чем хуже
Шарп работает на виртуальной машине как Джава, а плюсы генерируют код сразу для процессора. В шарпе есть сборщик мусора, а в плюсах убираться за собой надо самому.
тоесть вот есть какой-то сайт, я знаю что это говно полное но гугл раз за разом пихает мне это в первых позициях, могу я навсегда забанить сайт из выдачи?
>плюсы генерируют код сразу для процессора
https://en.wikipedia.org/wiki/C++/CLI
>в плюсах убираться за собой надо самому
С умными указателями не особо-то и надо + ссылка выше.
Плюс QT тоже по особенному работает.
Ну пиздец. Я же не спрашивал где мне хранить кэш. Меня интересует как это организовывают и какие есть стандартные механизмы для этого. Есть же всякие атрибуты, которые можно навесить на экшен. Дожна ли вьюха как-то доставать данные из кэша, или он должен быть полем вьюмодели и вставляться в странице через Html.Raw. Нужно ли хранить строку, сгенерированную через Render, или можно как-то кешировать partialview. И т.д и т.п.
Может где-то есть хороший пример организации этого дела.
Ну пиздец х2.
>Нет стандартных механизмов
Но должны же быть какие-то бест практисес и базовые принципы
>Антипаттерн.
Возможно. Но весь мвц на них плотно сидит. Даже есть ResponseCacheAttribute, но я так понимаю это для хттп уровня
ну предположим ActionArguments у меня работает но урл от этого не меняется, а filterContext.RouteData.Values вообще не работает
Да куда уж конкретней-то. Не проканало с новостями, тогда другой пример. Есть имиджборда, но не анонимная. Треды читаются на порядки чаще, чем обновляются. Я не хочу на каждый запрос треда дрочить БД и генерировать хтмл. Но при этом не могу полностью перейти на ститачные страницы как двач, потому что есть еще и секция уникальная для каждого пользователя. Как в данном случае грамотно кэшировать общие части?
Много хочешь. Жабаскрипт в помощь.
>Кешировать часть контента
>Как организовать кэширование контента в приложении?
>Нужно кэшировать!
Ну пиздец х3.
> Вопрос все равно общий.
Ну давай я уточню. Какой информации не хватает?
Подписался на вопрос.
Можно кешировать бизнессслой, просто в инмемори запихивать ентити. Плюс: чисто, можно организовать граммотно ивалидацию. Минусы: ну таки это не кеш хтмла готового. Но я думаю, что все равно должно летать.
Можно кешировать веб апи. Плюсы: да, наверное проще. Если бизнесалой сложный и не требует внутреннего кеширования, то мен ше шансов проебаться.
Где то видел годную статью, лень гуглить, поищи на офф сайте майков.
Я.бы, если нет супер.хайлоада, но есть немного времени заморочится, бизнесслой кешировал бы.
Не хватает стека технологии. Очевидно, что если ты используешь SPA на фронте, то контент не надо и кешировать, и вообще запрашивать. В противном случае, более общее решение сохранять в оперативной памяти или в редисе. Если используется кор, то делается через мидлварь. Через атрибут тоже можно сделать, но будут проблемы с иоком и необходимо реализовывать аналог диспатчера. Более же извращенное решение можно найти например в CQRS, когда в базе данных находится красивая схема (с 5 нормальной формой например) или вообще event store, а данные кешируются в дополнительной базе данных (обычно приводится в пример MongoDB) вообще без нормализации, без реляционных зависимостей и в более вольной форме.
Любое решение можно реализовать самому, найти готовый пакет или сделать по образу и подобию.
Если используется облако, то cdn или что-то похожее на лоад балансер - тоже решение.
И я тут еще немного подумал, и кешировать можно в обратном прокси. Кароче ты понел.
Примерно так и планировал. Думал сделать прокси для сервисов, которые работают с бд, так у меня будет возможность инвалидировать кэш при создании постов (если продолжать аналогию с двачем) без размазывания логики по разным местам. По идее разор компилируется во что-то промежуточное и оптимизированное и сильной просадки при генерации ответа не должно быть. Хотя кэшировать отрендеренный партиалвью тоже заманчиво.
>>190256
Написал же в самом начале обычный asp core mvc.
> Очевидно, что если ты используешь SPA на фронте, то контент не надо и кешировать, и вообще запрашивать.
А вот мне не очевидно. Зачем 100 раз лезть в базу со своими джоинами и аггрегациями и получать 100 раз одинаковый результат, если можно получить 1 раз и за кешировать. И я не понял что значит не запрашивать данные? Откуда клиент их возьмет?
>сохранять в оперативной памяти или в редисе
Да какая разница где кэш хранить. Вопрос то всё еще не про это.
>Если используется кор, то делается через мидлварь
А по-подробнее? Вот есть сгенерированный ответ от контроллера с динамическими данными, как туда вставить закешированную часть?
>>190258
Ну это если через ajax грузить страницу частями, а если клиенту уходит готовая страница нельзя же отдать одному челу страницу с данными аккаунта от другого.
>Хотя кэшировать отрендеренный партиалвью тоже заманчиво.
PartialView можно кешировать.
>Зачем 100 раз лезть в базу
Зависит от решаемой задачи. Может это покупка авиабилетов, где допустима неконсистентность данных.
>И я не понял что значит не запрашивать данные?
Зачем клиенту запрашивать одно и тоже по несколько раз? Оставляешь MVC и часть запросов реализовываешь как WebAPI по условию, например.
>Да какая разница где кэш хранить.
От способа хранения кеша отличается и реализация. На фронте есть например localStorage.
>как туда вставить закешированную часть?
Берешь и вставляешь по условию или по типу реквеста, в чем проблема? У тебя мидлвари по цепочке вызываются. Если данные надо достать из кеша, прерываешь цепочку.
>Ну это если через ajax
Нет, ты не понял, что это. К ajax это не имеет никакого отношения. У тебя добавляется дополнительный сервер между фронтом и твоим основным сервером.
>PartialView можно кешировать.
Так вот я и спрашивал, его кешировать в виде отрендеренного хтмл в виде строки или есть другие способы.
>Зачем клиенту запрашивать одно и тоже по несколько раз?
Не клиенту 100 раз, а 100 клиентов зайдут на страницу. Ну или клиент нажмет 100 раз ctrl+f5.
>реализовываешь как WebAPI
Ну переписывать на вебапи + фронт это уже перебор. Задача не такая сложная чтоб так радикально все перекраивать хД.>>190281
>На фронте есть например localStorage
Да не про какой пронт никто и не говорил, нету никакого фронта.
>>190281
>Берешь и вставляешь по условию или по типу реквеста, в чем проблема?
В том что нельзя менять уже готовый ответ? И как ты себе представляешь я в респонс стрим куда -то что-то впишу?
>Если данные надо достать из кеша, прерываешь цепочку.
Если бы вся страница могла быть в кеше я бы и отдавал статику как двач. Но на странице ест еще и часто меняющиеся данные, уникальные для каждого пользователя. Я же уже несколько раз это писал.
>>190281
>У тебя добавляется дополнительный сервер между фронтом и твоим основным сервером.
И как он мне поможет, если без аякса? Страница-то должна придти целой. Что мне промежуточный сервер закеширует данные другого пользователя?
>Задача не такая сложная
Ты несколько постов подряд увиливаешь от нормального описания задачи, а не запуск ракет в космос. Написать борду - это как раз про запуск ракет в космос.
>Не клиенту 100 раз, а 100 клиентов зайдут на страницу. Ну или клиент нажмет 100 раз ctrl+f5.
CQRS как раз и придумали для таких индивидов. Только клиентов и нажиманий на несколько порядков больше в секунду.
>его кешировать в виде отрендеренного хтмл в виде строки или есть другие способы
В виде строки. Зачем тебе другие варианты?
>Задача не такая сложная
>В том что нельзя менять уже готовый ответ?
Нет, как только я пишу про детали реализации, ты пишешь
>>Да какая разница где кэш хранить.
>Страница-то должна придти целой.
Ты еще не понял, что страницу надо делить на части?
Потом выяснится, что твой кеш ненужен был, потому что 100 клиентов на страницу - пук в воздух.
>Ты несколько постов подряд увиливаешь от нормального описания задачи, а не запуск ракет в космос. Написать борду - это как раз про запуск ракет в космос.
Ладно, карты на стол. Я пишу борду и теперь мне надо закешировать треды, чтобы каждый раз не ломиться в базу не формировать 100 раз одинаковую часть ответа. Только в отличии от двача она (борда) не такая анонимная и есть функционал связанный с аккаунтами.
>CQRS
Я конечно посмотрю еще, но выглядит будто нужно переусложнить приложение, а потом придти и спросить как к cqrs прикрутить кэширование. Ну и вот это тоже
>Где не подходит
>В небольших приложениях/системах;
>В преимущественно CRUD-приложениях.
А это краткое описание борды.
>Ты еще не понял, что страницу надо делить на части?
Так как её поделить? На сервере поделено на partialview. На клиенте браузер с NoJs. Мои действия?
>>190293
>В виде строки. Зачем тебе другие варианты?
Мало ли есть что-то о чем я не знаю.
>Нет, как только я пишу про детали реализации, ты пишешь
>Да какая разница где кэш хранить.
Какая разница относиться, к тому хранить ли кэш в файле, оперативе или бд, мне кажется разницы быть не должно (я не про скорость, а про обращение с кэшем). Но вот как через мидлварь в страницу, которую создал контроллер вставить данные из кеша я с радостью почитаю.
>Так как её поделить? На сервере поделено на partialview.
PartialView и есть деление, только на стороне сервера. Кешируешь PartialView например как [OutputCache(Duration = 10)]. Хз, что тебе еще надо.
>Мало ли есть что-то о чем я не знаю
>мне кажется разницы быть не должно
Ну, если ты своей интуиции веришь больше. Хули спрашиваешь тогда?
>[OutputCache(Duration = 10)]. Хз, что тебе еще надо.
Возможно мне это и нужно, почитаю. А этот кэш можно вручную инвалидировать а не по таймеру? Например создали пост и мне нужно обновить кэш.
>Ну, если ты своей интуиции веришь больше. Хули спрашиваешь тогда?
Ну если есть разница, в чем она? Пусть будет кэш в оперативе.
>А этот кэш можно вручную инвалидировать а не по таймеру?
Я тебе сразу написал, что нет никаких общих решений или бест практик. Хочешь сделать шаг в сторону, пишешь свое решение или используешь библиотеку от васяна.
>Ну если есть разница, в чем она? Пусть будет кэш в оперативе.
Кеш в оперативке не будет работать:
- с двумя серверами
- с большим количеством данных
- с высокой нагрузкой, особенно, если данные шарятся между пользователями
Это только то, что я приводил в качестве примеров, остальное найдешь сам.
А в чем? Разбил на части, сохранил нужную часть, очистил когда надо. У тебя изначально дерьмовая архитектура и ты нехуя не понимаешь в программировании, раз рассматриваешь вопрос о добавлении сервисов и мнишь, что все знаешь.
Мань, не бомби. Я не собираюсь заходить на пятый круг в попытках разъяснить тебе вопрос, тем более, что есть уже тот, кто понял.
> Разбил на части, сохранил нужную часть, очистил когда надо
И закешировать! Ты опять пишешь очевидные вещи.
>не понимаешь в программировании
Я думал, я не двусмысленно на это намекнул в первом своем сообщении.
>Вобщем как это организовывают те, кто умеет программировать?
А тебе понадобилось несколько десятков постов, чтоб дойти до этого. То что ты тоже не умеешь программировать, я понял с самого начала.
>>190349
>изначально дерьмовая архитектура
То ты не можешь понять что за стек у меня, когда я сразу написал asp core mvc, начал нести чушь мимо кассы, а тут прям не видя ничего всё прнюхал. Браво.
>раз рассматриваешь вопрос о добавлении сервисов и мнишь
Ну да профи сервисы не добавляют хД
>что все знаешь.
Тебе показалось. Но очевидную чушь могу увидеть.
Чао.
>И закешировать! Ты опять пишешь очевидные вещи.
Ты спрашиваешь очевидные вещи. Реализовал кеширование и сброс кеша по условию, сохранять умеет в любое место: https://pastebin.com/KLd7hLp0
Точно так же выглядит код без кеширования.
Боже мой, эта пятница, мозг уже вообще не сображает
БЛЯДЬ, КАК ЖЕ СТУДИЯ ЗАЕБАЛА ПРОЕБЫВАТЬ ПРОФИЛЬ!
ПИЗДЕЦ СУКА НАХУЙ БЛЯДЬ, КАЖДУЮ ЕБАНУЮ ВЕРСИЮ ОНИ ДЕЛАЮТ ОДНО И ТО ЖЕ ГОВНО!
СУКА, СКОЛЬКО МОЖНО УЖЕ БЛЯДЬ СВАЛИВАТЬСЯ В ЭТИ ВЫРВИГЛАЗНЫЕ СИНИЕ ПИЗДЕЦЫ!
ПОСЛЕ КАЖДОГО ПЕРЕЗАПУСКА, БЛЯДЬ, ДАЖЕ ПОСЛЕ ПЛАНОВОГО, ВЫПОЛНЕННОГО ЧЕРЕЗ ЗАКРЫТИЕ ПРОЕКТА И МЕНЮШКУ ВЫХОДА!
ДВЕНАДЦАТАЯ, ЧЕТЫРНАДЦАТАЯ, ПЯТНАДЦАТАЯ, ШЕСТНАДЦАТАЯ, А ТЕПЕРЬ ЕЩЕ И БЕТКА СЕМНАДЦАТОЙ!
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ!
>код дума 3
https://pvs-studio.com/ru/blog/posts/cpp/0120/
Говнище, отдаленно напоминающее ООП. Больше похоже на структурное программирование с километровыми классами и дублированием кода. В свое время игра была очень прожорливая.
Один только хедер для плеера на 1000 строк кода
https://github.com/TTimo/doom3.gpl/tree/master/neo/game
Код на 9000 строк кода
https://github.com/TTimo/doom3.gpl/blob/master/neo/game/Player.cpp
> Променять одно говно на другое
Охуенный план. Почему бы просто студии не перестать проебывать профили? За нее по крайней мере уже уплочено.
У райдера есть тоже свои косяки. В будущем, при переходе на х64, студия будет жрать в разы больше оперативки.
Да пусть жрет, оперативы как говна. А вот нервов на удаление .vs осталось мало.
Студия перегружена менюшками и кнопочками. Вот чтобы создать просто файлик, надо открыть меню, перейти в подменю, открывается доп. окно с выбором миллионов типов файлов и только тогда можешь создать файлик. В том же VS Code - это делается 1 кнопкой за 1 нажатие.
Это большой минус для тех, кто использует блейзор. Использовать дебаг/релоад для обычных приложений не есть гуд. На тему, когда выкатывают новую фичу, не надо сразу бежать и переписывать на нее легаси код.
Как вы изучали ASP.NET? Нравится ли он вам вообще?
Читай дальше.
Если чета не понимаешь пиосто забей. Через неделю вернись и мнова прочитай.
Асп нет коре мвц очень логичен.
Что именно тебе не понятно?
Втихаря удалили фичу из релиз кандидата.
На РНР из простых элементов как из кубиков можно написать свой движок любой сложности. И соответственно все движки используют такой же функционал. В итоге зная синтаксис языка, легко понимаешь фреймворк.
В ASP.NET же используется какой-то надъязык над C#, т.е. повторить в консольном приложении этот фреймворк невозможно. Приходится изучать совершенно новую среду, отличную от консоли и со своими жесткими требованиями.
>В ASP.NET же используется какой-то надъязык над C#, т.е. повторить в консольном приложении этот фреймворк невозможно. Приходится изучать совершенно новую среду, отличную от консоли и со своими жесткими требованиями.
И что? Ты писал на шарпе свой движок, просто в пустом консольном проекте начал писать и написал?
Я вот на РНР писал свой движок и на нём базу абонентов для одной конторы. И мне даже заплатили за это, хотя на тот момент я был вообще зеленым студентом.
/proj-name/wwwroot/shityshit
После запуска в образе, лежит папка shityshit со всеми файлами. Как правильно добавить исключить её из образа?
Да там две звездочки макаба съела. Вроде работает, если запускать в релиз моде, а при дебаге студия игнорирут файл.
Приколы самой студии, через docker build . все работает.
// Создаем "слушателя" для указанного порта
Listener = new TcpListener(IPAddress.Any, Port);
Listener.Start(); // Запускаем его
И повторяй что хочешь.
В ASP Net за тебя уже все сделали.
А надъязык это ты про что?
Т.е будет текстовое поле куда я могу написать Name.StartWith("Jonh") && Age >= 40 && Salary < 10000
Т.е как будто я использую linq, но не из кода, а прям в рантайме в текст бокс пишу. Хочу не наивную реализацию где я каждое свойство/поле сам хардкодом забью, а чтобы если я изменил объект и добавил скажем Gender, мне не пришлось для этого еще писать код. Куда копать? Уверен есть какие-то готовые реализации, но знания не позволяют даже выйти на правильное гугление.
Посмотрел, но это же вроде только из кода, а я хочу уже из приложения.
Что-то типа такого вот хочу https://docs.picotorrent.org/en/master/pql.html
Хочу фильтровать коллекции по тому что в свойствах и делать комплексные правила без миллиона чекбоксов.
Слегка усложню предыдущий пример.
Name.StartWith("Jonh") && Age >= 40 && (Salary < 10000 || Status=="Director")
И чтобы это все писалось в уже в готовой программе в чекбоксе.
Своя дсл шоле? FluentValidation генерит рулсеты, которые можно кастить во что хочешь. Если у тебя жопаскрипт, есть готовая либа, которая кастит стандартные рулы и можно своим говноподелием расширять.
Перефразирую чего я хочу, так как мы вроде бы не понимаем друг друга.
Я вот не понял что такое дсл.
Вот есть у меня консольное приложение в нем коллекция из 100500
public class Customer {
public int Id { get; set; }
public string Surname { get; set; }
public string Forename { get; set; }
public decimal Discount { get; set; }
public string Address { get; set; }
}
Я хочу иметь возможность написать обычной строкой НЕ В КОДЕ, вот такое
Surname.StartWith("Jonh") && Id > 1000 && (Address == "NY" || Discount < 50)
и на выходе чтобы оно мне дало коллекцию именно поэтому правилу.
Все это тупо строчка приходящая в консоль из ReadLine().
Только затем я хочу иметь возможно добавить скажем еще одно свойство
public bool Gender {get;set;}
И чтобы добавив тупо эту строчку мне больше ничего не нужно было писать в программе, а я смог строкой передать
Surname.StartWith("Jonh") && Id > 1000 && (Address == "NY" || Discount < 50) && Gender==true
Дсл https://ru.wikipedia.org/wiki/Предметно-ориентированный_язык
Алгоритм:
1. описываешь формальный грамматику через бнф
2. строишь лексический анализатор
3. строишь синтаксическое дерево
4. визитёром обходишь дерево и выполняешь действие
а) Так как у тебя что-то похожее на шарп, можно заюзать ANTLR. Я хоть не его фанат, либа сама все из коробки делает, только формальную грамматику ему скорми и реализуй сгенерированный класс.
б) В фшарпе это дерьмо сильнее развито. Есть много разных либ типа FParsec. Пишется за 1-2 часа на что-то из примера. Для тебя писать не собираюсь.
в) Так как у тебя чистый шарп, можно изъебнуться:
в.1) Загрузить в аппдомен в рантайме кусок шарпа и выполнить.
в.2) Есть ответление розлина - шарп скрипт. На нем все делается за 5-10 строк кода, но он то еще дерьмище. Прожорливое и хер пойми как аппдомен выгрузить.
Только шестой шарп осилили.
Такое еще есть, но хуй знает можно там твой случай сделать или нет
https://github.com/mparlak/Flee
Вопросец, но он больше связан с самим VS
Вводные:
>Надо кое как над одним проектом работать
>Опа, Live Share, спасибо pajeetsoft
>Так ебана wpf значит нахуй xaml ебать нахуй тааак ну ка окно Designer(где собственно гуи и формочки надо пилить)
>Второй человек присоединлся к сессии
А теперь сама проблема: где Designer блять. Хост сессии (я) конечно его вижу, в среде легко нахожу и перемещаю. У гостя нихуя, вот как блять работать если он сам даже открыть или посмотреть собственно окно с графикой не может. Че за нахуй.
>Дефолтная комбинация шифт-F7 не работает
>Нет панельки снизу справа маленькой где можно например вертикально разделить окна, и там как раз и окно designer появляется
>нет специальгого окна где от кода xaml можно перейти сразу к окну designer
>в настройках text editor и xaml стоят обычные настройки, при это гость сам у себя конечно-же может проделывать всё то, что не может в сессии live share. VS обновлены.
Суть: я n-лет работал в смежном поприще - коллектив(в рамках фирмы) один и тот же, перекатываюсь в разрабы, и есть подозрение что код-ревью в любой другой конторе для меня будет намного менее болезненным, чем в этой. Просто потому что в прошлой роли я хорош, а в этой пока нет, но социальные связи уже образовались. Думаю дропнуть нахуй, и перекатиться в другую фирму, только мне кажется это не очень рациональным - дропать чисто чтобы мне было спокойнее, лол.
Уже есть офферы? А то без опыта не очень то много предложений. Я бы поработал год на текущем месте. Во-первых, ты не знаешь наверняка как оно будет тут, а во-вторых, опыт. Но если будут душить, то конечно надо дропать.
Приходит словарь, как и должен. В похожих вопросах на стаке в основном речь заходит об экземплярах классов, о словарях или каких-нибудь других структурах вопросов нет или не нагуглил
покажи
А кто их купит-то? Переводят мажорные версии, а то пока переводишь книгу по нет5, уже напишут по нет6. А кому база нужна, тому и по 3,1 подойдет.
зпрос->инвокеасинк->редирект->зпрос->инвокеасинк->редирект->...
В логин попадает если сделать вот так, луп при этом продолжается
инвоке теперь перед ретурном
А при заходе в логин какой луп? Внутри сервера или браузер все равно дрочит запросами?
в логине же нет никакого лупа, по хорошему он должен вернуть вьющку и на это все, я не понимаю в чем проблема
>луп при этом продолжается
>нет никакого лупа
Хм..
Так есть луп, когда в логин попадает или нет?
я иммею ввиду что он сполкойно возвращает вьюшку, тоесть буквально он входит в вьюшку и рендерит хтмл а потом все по новой, как такое возможно?
Сейчас на работе дали позаполнять компетенции, и с удивлением обнаружил, что многие вопросы что мне задавали на собеседованиях на мидла, находятся в блоках expert.
Открыл гугл и тоже обнаружил что технические знания мидла от сеньера особо ничем не отличаются. И сеньер это такой мидл, который просто умеет эти знания применять и доказывать свою правоту.
Может конечно дело в том что в рф требования к спецам выше чем в европе. И спрашивать даже у джуна что такое потоковое голодание и кластеризованный индекс это норма.
откуда мне знать? если бы я знал откуда взялся этот луп я бы не пришел сюда, я отправил все скрины, написал как это работает сейчас, заходит в логин. возвращает страницуи даже рендерит ее, при этом в браузере она не появляется, сразу после того как рендер заканчивается начинается следуйщий инвоке
>откуда мне знать?
F12 в браузере, не?
>возвращает страницуи даже рендерит ее, при этом в браузере она не появляется, сразу после того как рендер заканчивается начинается следуйщий инвоке
Вот я у тебя и спрашиваю, луп исключительно на сервере или браузер шлет постоянно новые запросы?
>зарплатой
Ну такое. Зарплата это весьма гибкая вещь, сильно зависящая от того насколько кабану горит закрыть дыру в штате. Я знаю и мидлов которые в втб по 300к получают, так и сеньеров которые 200к еле еле выпрашивают на галерах.
>Стажем
Это тоже такой себе критерий. Можно в какой-нибудь госхуйне wpf годами пердолить. А можно за пару лет в каком-нибудь стартапе с хорошим ментором охуенно задрочиться.
Вот напрямую спрошу, я вот считаю себя крепким мидлом. Что мне мешает заявлять себя как сеньера? Навыдумывать себе кейсов, и докинуть годик-два опыта? По каким ключевым вопросам меня могут вывести на чистую воду?
Ты же понимаешь, что эти градации разные в каждой компании? Можешь назвать себя сеньером, где-то пройдешь, а где-то на мидла со скрипом. Плюс очень зависит от релевантности опыта, можешь быть джава сеньером, но в компании, которая промышляет заскелем возьмут джуном авансом.
Serialize пихает строку в writer, который JsonWriter. Судя по отладчику, он меняется относительно начального состояния, но данных в нём нужных нет. Сам класс вообще написал по примеру с доков ньютонсофта.
А какая у тебя вообще должна быть структура жсона для твоего словаря? Сам по себе словарь должен быть большим объектом, а именами атрибутов ты пытаешься сделать кортежи? Не проще ли создать какой-то класс, который бы представлял структуру жсона, потом сделать перевод твоего словаря в объект этого класса и потом уже сериализовать этот объект?
Сделал класс со структурой жсона, всё заработало, код чище стал. Спасибо, анон!
Жир потек.
Так бля они одно и то же спрашивают ВСЕХ.
Жунов даже пуще дрючат, с синивором могут за жизнь потереть и все, а жуна ебать "игрой в компилятор" и архитектурой.
А что его обсирать?
Это делают майкрасофт дважды за месяц с разницей в 2 недели
https://www.theregister.com/2021/10/05/microsoft_net_foundation_under_fire/
https://www.theverge.com/2021/10/22/22740701/microsoft-dotnet-hot-reload-removal-decision-open-source
И рыночек - смотреть на зарплаты - https://habr.com/ru/company/getmeit/blog/585398/
перепощу из соседнего треда
зачем вы вкатываетесь в это говно?
Как проверить, эскапнута ли строчка жсоном или унескапнута?
Вот пример: https://rextester.com/UTLTOA70159
надо отличить str от json, где спецсимволы и вся хуйня эскапнута, а в str и str2 она унэскапнута.
Начнем с того, что говно тут только ты.
ЗП - норм, даже по твоей ссылке.
Весь вой поднялся из-за одной новой фичи. Пиздец горе.
Мне вот вообще пахую на этот хотрелоад из сосноли.
Попенсорс и не такую хуйню видел. Начиная от заброшек, заканчивая переводом на анальную лицензию.
Ну так при сериализации оно еще раз ескейпится, глянь в дебаге, у тебя там походу двойные бекслеши в JsonString.
Не понятно, что ты хочешь и зачем.
А что не так с зп? Или не на первом месте = говно?
Вообще зп на шарпе, как и на плюсах, зачастую разбавляется заводчанами, которые варятся в своём мирке, уволиться никуда по этой причине не могут, и соответственно требовать повышения зп не могут, поэтому и работают годами за 60-90к.
Плюс в карму, братан.
>Весь вой поднялся из-за одной новой фичи. Пиздец горе.
>
1) в .net foundation половина важных шишек это менеджеры из МС
2) манагерка зашла и закоммитила в репозиторий не читая code conduct, попросили переделать - сказала что я тут мейнтеина репозиторий (послала нахуй) и сама апрувнула и вмержила изменения
3) у проектов которые входят в .net foundation взяли и сменили лицензию
4) потерли фичу и обосравшись вернули назад с попытками damage control ВЫ НЕТ АК ПОНЧЯЛИ
на рядовых гребцах здесь и сейчас это не скажется, а вот шизам которые стартуют проекты будет проще обосновать фаундерам почему дотнет брать не стоит
как следствие рядовых гребцов может ждать просадка зп
>>193522
>ЗП - норм, даже по твоей ссылке.
>ниже только у пхп
>ЗП НОРМ
1) средняя зп в штатах и рф дно (спасибо VBA, Unity)
2) вы смотрите на среднюю когда смотреть еще нужно на диапазон
3) то что зп ниже только у php вас не смущает?
>Ну так при сериализации оно еще раз ескейпится, глянь в дебаге, у тебя там походу двойные бекслеши в JsonString.
Ткни кнопочку "Run it (F8)", там видно всю хуйню.
>Не понятно, что ты хочешь и зачем.
Я хочу отличить эскапнутую SerializeObject'ом строчку от унескапнутой, каким-то образом.
А вот как, пока не придумал.
Изначально, я хотел просто писать текст в виде JSON-значения, внутри файла.
Но текст, может содержать символы ", ', :, [, { которые являются JSON-символами.
И ещё, этот текст может содержать символы сброса строки CR, LF, CRLF, и прочие ёба-символы.
Да, можно тупо прописать utf-8 байты в base64 и не ебать себе мозг...
Но я хочу, чтобы, внутри JSON'а, текст был человекочитаемым.
Лучший вариант, это эскапить всё говно (какое, я пока не знаю, какие спецсимволы, блядь).
И судя по всему, метод JSONConvert вполне себе норм эскапает бекслешами, всю эту парашню ебучую.
Однако, если надо унескапнуть назад,
то надо знать, где строчка ескапнутая, а где унескапнутая.
ПОтому что в JSON-файле, может быть нечто наподобие:
"C:\blyadina\tupaya"
и тогда, \b и \t соответственно, унескапнется в бекспейс и табуляцию,
чего моё величество не возжелало бы, от слова совсем.
>3) у проектов которые входят в .net foundation взяли и сменили лицензию
Так это попенсорсники и сменили, а не майки же, не?
>1, 2, 4
Пахую. Какие-то десткие разборки.
>а вот шизам которые стартуют проекты будет проще обосновать фаундерам почему дотнет брать не стоит
Ну только идейным попенсорсникам, что ли. Да и вообще, как обычно идет "обоснование", у кабана есть 5 рыл на .нет - "Обосновываем" .нет. 5 рыл на жаве - жаву. 5 рыл геев - берем ГО. 5 рыл пожилых геев - ноду.
В дебаге смотри.
Сериализорваная стринга, внезапно, начинается с ескейпленых кавычек.
А почему ты н еможешь знать явно по какому-то призначу что у тебя?
Можешь пытаться десерилизовать, если она не "заескейплена", то ексепшн выборосит.
Но похоже, что ты идешь куда-то не туда и тебе надо как-то глобальную задачу решать иначе.
По кавычкам задетектить можно, походу:
https://rextester.com/JVRTH25447
Но это не совсем то. Что если кавычки обрезаются?
>Можешь пытаться десерилизовать, если она не "заескейплена", то ексепшн выборосит.
Вот, это вроде заебись критерий: https://rextester.com/ODUL66872
Но он работает когда кавычки есть в начале и в конце.
А они могут обрезаться...
Значит, надо будет их просто добавить, если они обрезаются.
>Но похоже, что ты идешь куда-то не туда
>и тебе надо как-то глобальную задачу решать иначе.
Мне просто надо было отличить ескапнутую бекслешами строчку от унескапнутой,
потому что они будут браться из жсон-файла,
а этот файл можно писать руками, безо всяких бекслешей внутри.
Например "мой охуеннейший текст внутри жсона. Он не содержит никаких ебучих кавычек, и вообще даже символа сброса строки. И в этой строчке, у меня, внезапно путь C:\random\nasasyvanie".
Вот с такой строчкой надо знать как работать, унескапать \r и \n там, или же нет.
Нет, сменили именно менеджеры маек которые в .net foundation
Тем временем Oracle вернула бесплатное коммерческое использование и поддержку до следующего lts + год для Oracle JDK (не путать с OpenJDK, которая под GPL и всегда бесплатна) https://habr.com/ru/company/haulmont/blog/577966/
Ты можешь отправить html страничку с javascript через любой веб-сервер и C# там вообще не нужен.
Сейчас бэкенд - это обёртка над базой данных. Почти во всех книгах по ASP.NET рассматривается один и тот же пример с онлайн-магазином, где модель просто возвращает список товаров. Получается, что клиенту достаточно послать этот список в удобном формате (json или xml), а он уже сам отобразит это красивенько. Поэтому View-модуль устарел и не нужен, его смело можно заменить на клиенте.
Пока не перешли на жаба 17, не вернули. У некоторых нет жаба 11 даж.
Веб - не только круды над базой данных.
Все равно джаву больше не используют для новых проектов
>Took 0.02 seconds (db:0.01) and 2.00MB of RAM; Used 276 files and 14 queries; Sent 13 events; 0 cache hits and 6 misses
И мне прям захотелось, аж засвербило, себе на сайт сделать плюс минус такое-же. Вот и вопрос, а как?
Первое что пришло в голову (после мочи), это поставить мидлварю, которая запишет время начала запроса, а потом во вьюхе сравнить время. Вроде ок. Но во-первых, что если я хочу отобразить время где-то в верхней части страницы? Т.е. вьюха посчита время, а генерация остальной части заняла еще в два раза больше времени? Во-вторых, а как засеч время выполнения запросов к бд? Обвешивать все запросы стопвотчами и складывать время? Это же будет размазано по всему приложению. Может ЕФ уже имеет что-то для этого? В-третьих, а как RAM посчитать и остальное?
Если уж грязный пхпшник такое сделал, то неужели для дотнет господ это будет сложно?
Помогите по-братски. Использую библиотеку dislin но видимо я неправильно её подключил. В нугете её не было я нашёл и скачал какой-то файл через ftp, в ахуе, в первые такое видел, потом через консоль прописал в папке сетап и вроде че-то установилось, папку даже выбрал как и было написано в readme, тоже в ахуе с этого, никогда этой консолью ничего не сетапил, потом вижу эту папку с библиотекой и закидываю её в проект, просто перетягиваю мышкой папку, мне кажется возможно здесь я сделал че-то не так, надо было именно длл как-то добавить? просто когда длл перетянул там пусто че-то.
Теперь тут ошибка что мол не может длл загрузить. А че не так?
Делаю по гайду с хабра https://habr.com/ru/post/125611/
вот когда просто длл перетягиваю тут пусто как-то, видимо что-то не то
>А потом что?
ХЗ.
У тебя что за проект, коре? Статья-то 2011 года, там дай б-г FW4 чтоб использовался.
1920x1080, 0:15
Ладно, реально залупа какая-то, придется другую библиотеку искать.
Так тебе disInk_d подключать не надо. disInk_d используется desnet'ом и должна лежать рядом с disink'ом/
Да там даже если одну длл подключаешь ошибку выводит
>если я хочу отобразить время где-то в верхней части страницы?
Декорируешь класс дополнительными данными.
>а как засеч время выполнения запросов к бд?
Stopwatch + мидлварь + DRY.
>Может ЕФ уже имеет что-то для этого?
Умеет даже запрос показывать.
>а как RAM посчитать и остальное?
GC.GetTotalMemory
>то неужели для дотнет господ это будет сложно?
Не секьюрно.
Та хуй с тобой, вротендер.
Реквести у админа конекшн стринг и сам ебись с БД, мне похуй.
Ах да, ты, наверное, наслушался всяких кодлесс, но тогда реквести пурчейз своего говносервиса, который закроется через год.
Берешь и пишешь. Можешь сам написать библу для рисования в консоли, можешь найти на гите, как-то попадались либы для рисования меню и для окон.
>>194463
Не обязательно. В частном случае может и параллельно выполниться. Просто надо различать однопоточность/многопоточность синхронно/асинхронно последовательно/параллельно.
>>194528
Возьми Фримена. Там как раз разработка магазина идет через книгу и попутно объясняется что да как.
Подскажите как можно отличить строчку, полностью эскапнутую с помощью encodeURIComponent, от строчки, где только часть эскапнутая (в частности URL), а часть - не эскапнутая, то есть она, эта строчка, блядь, не полностью, а частично эскапнутая,
а значит её нахуй не нужно унескапать.
https://rextester.com/FGDJ87550
В примере здесь, первый метод, после унескапинга,
выдаёт результат:
>крысинное говно, тебе - сюда: https://ru.wikipedia.org/wiki/История_дерьма
и это хуёвый результат, потому что урл не эскапнутый, блядь,
и хэш текста совсем не тот получается, так что эту хуйню не нужно унескапать, а надо как-то отличить от эскапнутой строчки, и вырубить унескапинг этот ебучий.
Есть идеи, что можно сделать с этой хуйней?
Нихуя не понял, но звучит так, как буд-то тебе надо разбить распарсить строку на части урл/не урл и затем каждую часть анэскейпнуть или нет.
не обязательно в массив, нынче есть няшные Span<T>.
уууу макаба. там перед курсивом звездочка-сноска была, а последняя строка это пояснение этой сноски.
Мне бы, скорее, какой-то regexp, который затестил бы строчку, на наличие символов, которые заменяет encodeURIComponent. Какие символы эта функция заменяет, я не знаю, я в JavaScript треде задал этот вопрос. Так вот, если эти символы есть в строчке, то унескапать не нужно. А если есть символ процента, и нет этих символов, то значит строчка ескапнута, и надо бы её унескапнуть.
Вот собственно и всё что я хотел выше.
>Какие символы эта функция заменяет, я не знаю
Эм.. Открываем доку:
encodeURIComponent() escapes all characters except: A-Z a-z 0-9 - _ . ! ~ * ' ( )>>194751
> если есть символ процента, и нет этих символов, то значит строчка ескапнута
Уверен? %20 это экейпнутый пробел или уже анескейпнутая строка "процент-два-ноль"?
Довольно странно, что строка может придти в неизвестном виде. Что за шизо-апи такое делвает?
>Просто надо различать однопоточность/многопоточность синхронно/асинхронно последовательно/параллельно.
Так именно про это и речь - в дотнете в общем случае асинхронный код выполняется параллельно или не выполняется? Потоков то у нас несколько.
В книгах про гейстрой можешь встретить. Но такую хуйню я смотрю на msdn.
Ну пиздец. А ты когда писал .Write, тебе не интересно было посмотреть, что там еще есть?
>>195026
>в общем случае
Что за общий случай? Асинхронные методы, которые есть в стандартной библиотеке почти всегда будут IO-bound. Если ты нагородишь await Foo(); await Bar(); await FooBar(); методы будут выполняться асинхронно но последовательно на потоках из пула.
>Что за общий случай?
Ну, когда у нас не условный режим рабочей станции или что-нибудь еще, где программа в одном потоке работает.
>Если ты нагородишь await Foo(); await Bar(); await FooBar();
Нет, если я нагорожу условный
var tasks = new Task[] { Foo(), Bar(), FooBar()};
await Task.WhenAll(tasks);
Они могут выполняться параллельно на потоках из пула?
>Они могут выполняться параллельно на потоках из пула?
Могут, а могут и нет. Как решит планировщик.
Ну т.е. cpu-bound операции тоже ускорятся (за счет выполнения на нескольких процессорах)?
Если тебе нужна параллельное выполнение, то используй TPL. Асинк/авэйт тебе таких гарантий не даст. Может выполнит параллельно, а может последовательно,а оверхед еще и замедлит выполнение.
Интересно, но откуда я узнаю? Книг мало выпускают и ещё большую часть не переводят. В итоге сидишь как фуфел без знаний.
>Асинк/авэйт тебе таких гарантий не даст.
Так я и пытаюсь разобраться, а в чем, собственно, разница? Если в одном и в другом случае код выполняется в разных потоках, то с чего он гарантию не даст? Не будет же дотнет игнорировать свободные потоки в пуле, а шедулеру вообще похуй, что ты там в своих потоках делаешь.
Да и, собственно, сама проблема не в том, что мне надо, просто в нескольких разных источниках про async/await прямо подчеркнули, что это не даст выигрыша в скорости вополнения кода, не предполагающего ожидания внешних результатов, а это немного противоречит моим представлениям, вот и пытаюсь разобраться.
>var tasks = new Task[] { Foo(), Bar(), FooBar()};
>await Task.WhenAll(tasks);
>Они могут выполняться параллельно на потоках из пула?
Зависит от того что у тебя в Foo, Bar и FooBar
Если у тебя Foo это операция, внутри которой не используется поток (через Task.Run например) то у Bar & FooBar даже не запустятся, пока внутри Foo не будет сделан await \ не вернется результат
в таком случае о параллельности здесь речи и идти не может
Если же у тебя везде используется внутри Task.Run то там они выполняются параллельно на разных потоках
В теории может быть ситуация что у тебя поток запускающий первый Task освободился раньше чем последняя операция (FooBar), и то не факт
>чем последняя операция (FooBar) началась
быстро фикс
алсо это все проверяется на практике в пару строк кода
static async Task<bool> SmthAsync()
{
var st = new Stopwatch();
st.Start();
while (true)
{
if (st.ElapsedMilliseconds / 1000 > 7)
{
break;
}
}
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(DateTime.Now);
return true;
}
static async Task<bool> SmthForkAsync() => await Task.Run(SmthAsync);
static async Task Main(string[] args)
{
await Task.WhenAll(SmthAsync(), SmthForkAsync(), SmthAsync(), SmthForkAsync(), SmthForkAsync());
return;
>чем последняя операция (FooBar) началась
быстро фикс
алсо это все проверяется на практике в пару строк кода
static async Task<bool> SmthAsync()
{
var st = new Stopwatch();
st.Start();
while (true)
{
if (st.ElapsedMilliseconds / 1000 > 7)
{
break;
}
}
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(DateTime.Now);
return true;
}
static async Task<bool> SmthForkAsync() => await Task.Run(SmthAsync);
static async Task Main(string[] args)
{
await Task.WhenAll(SmthAsync(), SmthForkAsync(), SmthAsync(), SmthForkAsync(), SmthForkAsync());
return;
>Эм.. Открываем доку:
>encodeURIComponent() escapes all characters except: A-Z a-z 0-9 - _ . ! ~ * ' ( )
ОООО, ебать, пасиб. Воть шо получилось: https://rextester.com/NDFDG59641
Но это не точно.
>Уверен? %20 это экейпнутый пробел или уже анескейпнутая строка "процент-два-ноль"?
Ну кто будет писать "процент-два-ноль", блядь, ещё и руками? Нахуй кому это всралось?
Но ты прав, могут быть такие долбоёбы,
поэтому на этот случай хуйня выше - выдаёт фалсе, если есть другие чары в строке:
>str = "Процент два ноль (%20) есть в этой строчке";
>Console.WriteLine(NeedUnescape(str)); //false
>Довольно странно,
>что строка может придти в неизвестном виде.
Строка может быть вообще разных видов.
Это может быть бейс, это может быть тупо строка с текстом,
это может быть ескапнутая строка с помощью JsonConvert.SerializeObject(str),
это может быть encodeURIComponent(str),
это может быть блядь, хуй знает что ещё.
>Что за шизо-апи такое делвает?
В общем, этот метод, должен бы выдавать годную строчку, с тем же хэшем, а не какую-то другую хуйню, покалеченную:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/Database/PostsValidator.cs#L49-L115
Блядь, братишка, это ты хотел сначала "ескейпить", а теперь в урл енкод подался?
Ты блядь можешь нормально описать ЧТО ТЕБЕ НАХУЙ НАДО в итоге? Какую задачу ты решаешь (глобальную, а не "мне надо со строкой ебаться")?
Какого хуя ты там для базы что-то валидируешь и что оно может быть незаенкоженым и зачем ему вообще быть заенкоженым?
Ты хочешь побороть SQL Injection (хотя там у тебя, вроде бы и сиквела нету) или XSS атаку?
Или юзеры/клиенты будут напрямую копаться в твоих данных?
В любом случае надо следовать правилу: недоверять инпутам и ВСЕГДА санитайзить
Эм. Я не он. Но теперь сам сомневаюсь.
Что ты хотел показать своим примером? Работа там ,как он и хотел ,выполняется в разных тредах. Общее время меньше.
Он хотел показать как не стоит писать на шарпе и как не стоит мерять производительность.
>Блядь, братишка, это ты хотел сначала "ескейпить", а теперь в урл енкод подался?
Ага. Но лучше, наверное, впилить и то и то.
>Ты блядь можешь нормально описать ЧТО ТЕБЕ НАХУЙ НАДО в итоге?
Надо чтобы строчки разных видов кодирования, декодились в сырую строчку, а её потом - либо в бейс, либо в любой другой вид кодирования.
>Какую задачу ты решаешь (глобальную, а не "мне надо со строкой ебаться")?
Всё началось с впиливания этой вот фичи:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/Server/FileHandler.cs#L824
Ссылающейся на этот вот впиленный апи-хендлер:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/Server/DbApiHandler.cs#L39
https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/Server/DbApiHandler.cs#L110
Запускающий этот вот метод:
https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/Server/DbApiHandler.cs#L752-L778
На выходе - заэскапленный JSON, внутри свойства message.
Я заметил, что он является человекочитаемым, в отличие от base64, который хуй прочитаешь прямо с JSON'a, и его - надо декодить.
дальше, я знаю, что этот вот метод в NBPack.cs: https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/PngTransport/NBPack.cs#L857-L866
В случае, когда bypassValidation=true:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/PngTransport/NBPack.cs#L20
перезаписывает хэши нанопостов,
после чего, они проходят упрощенную валидацию.
Это значит, что когда полная валидация (pow и каптча) - отключена, и включена bypass Validation = true,
то посты можно вгрузить в базу безо всяких каптч,
примерно вот в таком вот формате:
https://github.com/username1565/nanoboard/blob/dev/test_NBPack/Validation/RawPostsToValidate.json
Грубо-говоря, их можно просто написать руками внутри JSON-файла, и даже не считать их хэши, а просто указать replyTo, и message.
Из строчек message, очевидно, что строчки могут иметь разный формат кодирования, ведь если писать руками message, то внутри могут содержаться JSON-символы ",[,',{,:, и прочая лабуда, вроде концов строки \n, \r\n, \r и других СПЕЦСИМВОЛОВ, которые надо бы ЭСКАПНУТЬ.
Первое, что пришло в голову - это просто использовать encodeURIComponent и System.Uri.UnescapeDataString(String)
но оно все-равно нихуя нечитабельное, блядь, получается, в закодированном виде, особенно когда там есть кириллица.
Собственно, из всей этой хуйни, появилось две задачи,
1. Подобрать наилучшую кодировку с эскапнутыми спецсимволами,
которая являлась бы человекочитаемой,
чтобы можно было, блядь, прочесть, нанопост,
внутри самого JSON'а, и понять что это за пост,
без его декодинга
(судя по всему сериализованный JSON - это лучший вариант).
2. Переписать вот это вот всё:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/Database/PostsValidator.cs#L82
для разных кейсов, так,
чтобы принимая на вход различным образом закодированные строчки, метод выдавал сырую строчку, не пидорася её хэш (хэш поста).
>Блядь, братишка, это ты хотел сначала "ескейпить", а теперь в урл енкод подался?
Ага. Но лучше, наверное, впилить и то и то.
>Ты блядь можешь нормально описать ЧТО ТЕБЕ НАХУЙ НАДО в итоге?
Надо чтобы строчки разных видов кодирования, декодились в сырую строчку, а её потом - либо в бейс, либо в любой другой вид кодирования.
>Какую задачу ты решаешь (глобальную, а не "мне надо со строкой ебаться")?
Всё началось с впиливания этой вот фичи:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/Server/FileHandler.cs#L824
Ссылающейся на этот вот впиленный апи-хендлер:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/Server/DbApiHandler.cs#L39
https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/Server/DbApiHandler.cs#L110
Запускающий этот вот метод:
https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/Server/DbApiHandler.cs#L752-L778
На выходе - заэскапленный JSON, внутри свойства message.
Я заметил, что он является человекочитаемым, в отличие от base64, который хуй прочитаешь прямо с JSON'a, и его - надо декодить.
дальше, я знаю, что этот вот метод в NBPack.cs: https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/PngTransport/NBPack.cs#L857-L866
В случае, когда bypassValidation=true:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/PngTransport/NBPack.cs#L20
перезаписывает хэши нанопостов,
после чего, они проходят упрощенную валидацию.
Это значит, что когда полная валидация (pow и каптча) - отключена, и включена bypass Validation = true,
то посты можно вгрузить в базу безо всяких каптч,
примерно вот в таком вот формате:
https://github.com/username1565/nanoboard/blob/dev/test_NBPack/Validation/RawPostsToValidate.json
Грубо-говоря, их можно просто написать руками внутри JSON-файла, и даже не считать их хэши, а просто указать replyTo, и message.
Из строчек message, очевидно, что строчки могут иметь разный формат кодирования, ведь если писать руками message, то внутри могут содержаться JSON-символы ",[,',{,:, и прочая лабуда, вроде концов строки \n, \r\n, \r и других СПЕЦСИМВОЛОВ, которые надо бы ЭСКАПНУТЬ.
Первое, что пришло в голову - это просто использовать encodeURIComponent и System.Uri.UnescapeDataString(String)
но оно все-равно нихуя нечитабельное, блядь, получается, в закодированном виде, особенно когда там есть кириллица.
Собственно, из всей этой хуйни, появилось две задачи,
1. Подобрать наилучшую кодировку с эскапнутыми спецсимволами,
которая являлась бы человекочитаемой,
чтобы можно было, блядь, прочесть, нанопост,
внутри самого JSON'а, и понять что это за пост,
без его декодинга
(судя по всему сериализованный JSON - это лучший вариант).
2. Переписать вот это вот всё:
https://github.com/username1565/nanoboard/blob/82f7595e3e875d391b5a847308581a41b9f650d6/nanodb.exe-source/Database/PostsValidator.cs#L82
для разных кейсов, так,
чтобы принимая на вход различным образом закодированные строчки, метод выдавал сырую строчку, не пидорася её хэш (хэш поста).
>Какого хуя ты там для базы что-то валидируешь и что оно может быть незаенкоженым и зачем ему вообще быть заенкоженым?
Заенкоженным оно должно быть внутри жсона, просто чтобы JSON был валидным.
Конечно же, заенкоженную хуйню следует правильно задекодить, и колючевое слово здесь - именно ПРАВИЛЬНО задекодить.
>Ты хочешь побороть SQL Injection (хотя там у тебя, вроде бы и сиквела нету)
Я думаю впилить туда SQLite, но я SQL херово знаю, лол. Вон, засрал шардинговый тред датабазный, реквестом рекурсивного запроса, так никто и не ответил, лол.
>или XSS атаку?
А это тут каким боком? Такую хуйню следовало бы вообще исключить, походу, если конечно она имеет место быть.
И ведь действительно, в тексте значения message, можно написать что угодно, в том числе и говнокод какой-то,
но поскольку оно будет парсится как строка, самим шарпом, разве это говно будет запускаться? Разве что скрипты всякие могут быть прописаны HTML'ем, но там куча замен, потом, пропиздовывает, при парсинге, не думаю что оно запустится на клиенте, из-за этого.
>Или юзеры/клиенты будут напрямую копаться в твоих данных?
Основная задача состояла в том, чтобы глядя на JSON, распознать какому посту какой хэш соответствует, и распознать сразу, без декодинга бейса, потому что бейс хуй прочитаешь - он нечитабелен.
Ведь по умолчанию, там все посты кодируются в бейсе, вот так:
https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/Database/PostsValidator.cs#L117-L123
>В любом случае надо следовать правилу: недоверять инпутам
А что может быть в инпутах такого, что может поломать шарп?
Что-то вроде XSS-быдлокода, например?
>и ВСЕГДА санитайзить
Тут тебя не понял, проясни.
В первом случае IO-bound операция, поток освобождается и идет запускать другие таски. Во втором, CPU-bound, операция по вычислению последнего знака числа ПИ. Там поток не освобождается (по сути там просто return Task.CompletedTask) и все идет последовательно в одном потоке. Я к тому, что просто вызов эвейт на таске не гарантирует параллельное выполнение.
>>195516
Те че, пёс. Это продакт-реди топ бенчмарк с 9к звезд на гитхабе.
> реквестом рекурсивного запроса
Твое нежелание читать доки достойно восхищения нет
https://sqlite.org/lang_with.html
>распознать какому посту какой хэш соответствуе
В душе не ипу принцип работы наноборды, но как тебе такая идея: сначала эскейпишь текст, а потом считаешь хэшь? Все строки будут заэскейплены, клиент будет обязан анескейпнуть не зависимо от содержания.
>Твое нежелание читать доки достойно восхищения нет
Там многобукв и все они английские. С какого параграфа начать, блять?
Я вообще у них реквестировал готовый запрос, а не доки.
Ещё бы ссылку на учебник по сиквелу скинули, ну ёбанарот.
>>распознать какому посту какой хэш соответствуе
>>всмысле глазами узнать, в жсоне, а то там нечитабельный бейс
>В душе не ипу принцип работы наноборды, но как тебе такая идея: сначала эскейпишь текст, а потом считаешь хэшь? Все строки будут заэскейплены, клиент будет обязан анескейпнуть не зависимо от содержания.
Это один из вариантов, да.
А так-то там вариантов куча: https://github.com/username1565/nanoboard/blob/dev/test_NBPack/Validation/RawPostsToValidate.json
и по дефолту там base64.
>параграфа начать, блять?
Там где большими буквами Recursive. У постгрепро есть отличная документация на русском (по постгресу разумеется) https://postgrespro.ru/docs/postgresql/14/queries-with#QUERIES-WITH-RECURSIVE
Кстати, почему бы тебе заодно не подзадрачивать автора в ишью на гитхабе? Он то знает свой проект и наверняка что-то предложит.
Уже задрачивал, поначалу, только там лишь 3.5 нанона: https://github.com/nanoboard/nanoboard/issues
>>195873
Так и есть, сижу и пердолюсь с кодом, сам, помаленьку уже несколько лет
>просто вызов эвейт на таске не гарантирует параллельное выполнение
Так может это и хорошо? И там ВЫШЕ (планировщик) сам все решит?
Иначе мы можем создать больше тредов и они на переключении контекста сдохнут.
Ну я это так, мысли вслух.
Ну и как эту хуйню тестить? Куда её копипастить, блядь? Дай нормальный запрос уже. Хули вы ебёте мне мозг.
Новый тренд?
Сам пока что смог нагуглить только "Pro .NET 4 Parallel Programming in C#".
Неужели это всё или я гуглить не умею?
Надо запрос, чтоб достать из таблицы базы данных - все ветви дерева в виде дочерних записей - до нужной глубины, в частности 3, включая родителя.
Ёпта, дай скрипт инициализации с тестовыми данными (желательно под sqlite) и ожидаемый результат. И возможно я снизойду и высру тебе запрос.
Я уже сам, вроде, высрал, в базоданном треде. Там вся хуйня есть, можешь не срать говнокодом, не дуйся, а то геморрой вылезет.
Ты просишь помощи, но я должен лазить на дваче по тредам и искать твои посты. Кек, лол.
Насчет запроса, я уже сказал, что я его сварганил сам, пока вы там чешетесь. Задачу ты должен бы понять ещё с полуслова.
Но ты уже снизошёл, у меня - ниже плинтуса, до уровня крысятничества, червь. Косари мои ебучие где?
Галоперидола выпей, шиз.
Кажись данные и так клиенту не уходят: "The in-memory cache provider stores session data in the memory of the server where the app resides. "
Чего ты вообще добиться хочешь?
И вообще - сессия хуйня, старайся без сессий.
ну как чего, сделать так что бы пользователь мог залогиниться, передать ему роль, идентити я юзать по опредленным причинам не могу, поэтому интересуюсь безопасно ли держать ключ сессии в контексте
Стопе, братишка.
Ты можешь клеймсы (да и любое говно) держать в аторизационной куке. Единственный минус - кука в размере больше станет.
Идентити с его схемой ДБ юзать не обязательно.
Ну или, ты откуда те роли будешь брать? С БД же какой? Вот оттуда и бери, можешь кеш использовать.
Твое решение с сессиями - костыль само по себе, а код твой вообще ничего не проверяет по сути.
>Ну или, ты откуда те роли будешь брать? С БД же какой? Вот оттуда и бери, можешь кеш использовать.
нет родей, даже базы для паролей нет, они могут быть во многих местах однорвеменно, и более того они даже менятся могут со многих мест, я знаю что это пиздец тупо но я не смог убедить что это хуйня полна.
в итоге мне было сказано "ты у себя ничего не держишь"
>а код твой вообще ничего не проверяет по сути.
по сути он проверяет не поменялась ли сессия, идея проста, пользователь не может поминять ключ сессии на сервере а значит если он у себя будет что-то там мутить с паролями, ролями и тп это все будет валидно только для него
Ну и вот тебе в потверждение
https://stackoverflow.com/questions/14773598/asp-net-mvc-is-it-safe-to-keep-sensitive-info-in-session
Стату портит то, что на джаве все топовые компании сидят и зарплаты у них всегда выше. А второе, возможно десктоп дидов засчитали за .NET разрабов, а работают они за рыбную котлетку
[code]public string FirstName { get; init; } = default!;[/code]
Анон, что означает
>default!
?
deafault - значение по-умолчанию, длястринга это налл
! - указание компилятору, что ты понимаешь, что ты присваиваешь налл свойству, и null reference exception на твоей совести. (см. Nullable reference types)
Спасибо
Сейчас на втором курсе вуза нахожусь, хочется глубоко вкатиться во что-то окончательно и последние два месяца пишу на шарпах. До этого год писал на плюсах, юзал питон в мл и бэкэнде, ковырялся с вебом в целом. Особых проблем с освоением не испытывал, если нормально читал документацию, но всё равно хз как выбрать во что вкатиться.
Если вкатываешься и сознательный, то смотри что популярно, что развивается, но не на основе хайпа.
Я сам просто на курсы попал да и потом взяли на работу. Вот и вся история. За 7 лет, в принципе, не пожалел.
СЕйчас ищу новое место работы, вроде бы вакухи есть, оферы приходят. Правда я не с россии. Судя по харкачу в россии с .нет похуже, одни деды-декстопщики. Декстоп - мертв, туда точно не иди.
Окей, спасибо. В принципе с работой не всё так плохо в том месте, где живу, hh выдаёт хоть какие-то вакансии по бэкэнду.
Не понимаю ещё в чём прикол того, что почти все компании указывают требуемый опыт работы от 1 до 3 лет - это блеф такой или они действительно разворачивают студентов по различным причинам?
Где такие вакансии-то? Почему мне с 2 годами - плотют на текущем месте 55к, а те кто зовут на собесы вилку в 80к максимум предлагают? А? А? А? Я жи фуллстак!!! Ангуляр знаю, вью знаю, дотнет - знаю... Что за фигня-то?
Если я хочу вкатиться в бекенд девелоперы то пошел я нахуй, да и за плечами имею дженерик веб-проект с рецептами, что еще запилить, чтобы работодатель не смотрел на меня как кретинчика, заспидранившего 2-часовой курс на ютубе? Имеют ли вес сертификаты и какие можно задрочить, если мелкомягкий 70-483 больше недоступен?
Ящитаю, шо всем поебать.
Ну может серт от увожаемых контор и даст немного буста.
Но самый большой буст - те самые 1-2 года опыта...
Так что думай, если есть время - ну дрочи свои курсы, если по фасту надо - ищи куда жопу приткнуть не важно даже куда (лишь бы не госконтора или около того), галеры для этого лучшее место. Через год-два сьебешь мидлом на 200к.
>что еще запилить, чтобы работодатель не смотрел на меня как кретинчика, заспидранившего 2-часовой курс на ютубе?
Сделай
1. Магазин по продаже чего-нибудь(драконьих дилдо например) с докрами-ребитами-авторизацией-ролями-системой оплаты и чтобы разворачивалось оно одним выполнением скрипта. Сервисов пусть будет штук 5(ну, классическое: гейтвей, товары, оплата, корзина, авторизация, можешь еще что-то придумать если так уж хочется), плюс всякая инфраструктурная хуетень которая будет в зависимости от нагрузки поднимать дополнительные инстансы.
2. Компилятор своего языка с блекджеком и шлюхами, чтобы при этом его могла подхватить студия(ну, т.е. подсветка синтаксиса работала, был какой-никакой дебаг)
3. Свой веб-фреймворк
4. Своя CMS
Думаю для джуна этого достаточно.
Чому ты так думаешь?
Каждый из пунктов что тут написан делается за выходные, разве что кроме компилятора в случае когда у тебя нет образования(с образованием компилятор так же делается за выходные)
Я же не говорю о интерпрайз уровне или опенсорс для коммунити. Пруф оф концепт, но без откровенного говнокода.
Понятно, что сделать сырой продукт по каждому из пунктов можно и за пару часов, но он имеет в виду, что если серьезно подходить к каждому проекту - то там работы на годы.
Почему тогда микрософты пилят свои проекты годами, а каждый джун это может сделать за выходные?
Захотел написать скриптмод для гта
скачал вижулстудию19
делаю по гайду, там есть пункт добавить длл скриптуха в референсы
ок
следующий пункт, добавить
"system.windows.forms.dll"
В других туторах пункт зовется
system_windows_forms
у обоих версия 4
у меня
system.windows.forms.dll
вообще нет и хз где его скачать
а на добавление в референс
system_windows_forms
который версии 2,4, а не 4, как в туторах, выдает ошибку (пик1)
нэт фреймворк ставил последний с сайта майков
помогите Т__Т
где этот system.windows.forms.dll взять и почему его нигде не гуглится на сайте майков, только какие то левые сайты, в каком пакете этот длл должен быть
делаю как тут
https://youtu.be/8D8xWA1sk-8?t=142
Захотел написать скриптмод для гта
скачал вижулстудию19
делаю по гайду, там есть пункт добавить длл скриптуха в референсы
ок
следующий пункт, добавить
"system.windows.forms.dll"
В других туторах пункт зовется
system_windows_forms
у обоих версия 4
у меня
system.windows.forms.dll
вообще нет и хз где его скачать
а на добавление в референс
system_windows_forms
который версии 2,4, а не 4, как в туторах, выдает ошибку (пик1)
нэт фреймворк ставил последний с сайта майков
помогите Т__Т
где этот system.windows.forms.dll взять и почему его нигде не гуглится на сайте майков, только какие то левые сайты, в каком пакете этот длл должен быть
делаю как тут
https://youtu.be/8D8xWA1sk-8?t=142
Проверь что у тебя проект не .NET5.0.
Попробуй добавить через browse из папки C:\Windows\Microsoft.NET\Framework\v4.0.30319
Счииается ли годом опыта год опыта на другом язке+технологии? Хочу с дата инженегра на питоне перекатиться в дотнет.
Я пока ноль полный и даже не джун
Большой плюс. Но только на жуна возьмут, скорее всего.
Зачем тебе перекатываться? ДС на айпе же, не?
Никакие. Книга старье.
Да хуй знает. Я так и не осилил.
Судя по тому, что я наблюдаю, книга оверкил (когда вы блядь последний раз смотрели как оно там компилится вообще?), знания такого уровня требуются только на каком-то жестком хайлоаде. И то, скорее всего да, книга подустарела. Но умные дядьки говрят, что все еще хороша.
Intel Atom?
Смотрите. Есть ряд железок.
У железок есть веб-интерфейс.
Железки подключаются к моему приложению, я сохраняю в базе информацию нужную мне для взаимодействия.
Что я хочу. Я хочу проксировать туда трафик к веб-интерфейсу железок.
В чем проблема. Я не хочу на каждый запрос лезть в базу и проверять знаю ли я о такой железке.
Кроме как сделать словарь где я ключем АйДи железки и значением - ip я ничего не придумал, но мне этот вариант почему-то не нравится, плюс если железок миллиард - это будет довольно жирный такой словарь.
Чего делать-то чтобы проксировать трафик и с одной стороны - не лазить в базу, с другой не городить огород из всяких словарей, кешей и прочих штук?
Тебе похуй к какому айпишнику прилетит?
Ты баланс лоадинг изобретаешь?
Хз. В любом случае, или ацелевой айпишник должен приходить или ты его должен сам мапить по айди. Первое - хуита бо айпишники будут меняться и клиенты надо будет как-тоо бновлять. Второе - ну а точно будет миллиард? Ну будет да и будет, я бы у себя хранил таки конфиг.
Вот, к примеру, на андроиде не очень-то любят заходить через браузер, а предпочитают отдельное приложение. Также же и на ПК, проще запустить прогу, чем лезть в браузер.
Тем более десктопные приложения лаконичные, более легковесные, чем тяжёловесные веб-приложения, которые долго грузяться и лагают.
>Также же и на ПК, проще запустить прогу, чем лезть в браузер.
"ты странный"
Если что-то тяжелое и важное- то да, прогу. Для всякой мишуры - дите нахуй со своими декстоп/тилибон приложениями.
Ну а по технологиям - да вообще не видно новых декстоп проектов, поэтому (почти) любой декстоп проект воняет дедами которые н есмогли в веб перекатиться.
>Ты баланс лоадинг изобретаешь?
Не. Просто у устройств - динамический АйПи и естественно у них нет никакого домена по которому к ним можно было бы обратиться. Ну и идея в том что после смены АйПи устройство ко мне на сервер постучалось - сказало текущий АйПи, ну а я мог подключиться к своему серверу и уже к веб-морде устройства обращаться.
Мне просто нравится писать красявые и моднявые десктопные приложения. Сразу виден результат работы и удовлетворение от неё.
А в консоли писать скучно. ASP.NET вообще подбешивает.
>Сразу виден результат работы и удовлетворение от неё.
Есть веб фулстеки.
>моднявые
>десктопные приложения
Взаимоисключающие параграфы. В реальности тебя ни в адобе, ни в автокад, ни даже на известную ИДЕ не возьмут, будешь мыхалычам систему документооборота пилить
И что там в фуллстеке от шарпа? Отправить index.html клиенту? А вся логика будет на каком-нибудь Angular, который на TypeScript? Зачем тогда учить шарп?
На предыдущих работах я сталкивался с десктопными приложениями как сис. админ. Там и формирование справок, финансовые отчетности, полнофункциональное решение для юристов с миллионом окошек, менюшек и т.п.
А мне говорят - не, сейчас всё в веб. А кто тогда эти проги разрабатывает?
Так ты изобретаешь пуш?
По Java больше книг на русском и при этом свежие по актуальной версии. А шарп в лучшем случае я находил по нет 3.1, а нет 5 и тем более 6 приходится только мечтать.
>тем более 6 приходится только мечтать
Который не вышел? Покажи книги на русеке по Java 17, который уже вышел. Не говоря, что на проекте ты будешь только мечтать хотя бы на Java 11 писать. У меня от многих терминов глаз дергается при его переводе на русек в книге + болезнь неправильно ставить ударения у многих на инглише.
>А кто тогда эти проги разрабатывает?
Давно не делают новые проги для десктопа:
- старье, написанное на делфи хуй знает когда, например total commander
- системные консольные утилиты на си/плюсах как ffmpeg
- всякие фотошопы; много пользы от еще одного фотошопа?
- игры
Все корпоративное дерьмо и документооборот давно переезжает в веб по ряду причину.
А по WPF самая последняя книга за 2011, хотя лучше читать Петзольда за 2008, потому что он учит писать, а не просто перечисляет фишечки.
А ты знаешь как прикручена работа с ЭЦП в этом вашем вебе? Через java-аплеты! Приходится устанавливать определенную версию JRE, чтобы это говно работало. Так что весь ваш веб - это костыльное решение, чтобы облегчить работу программистам, но не пользователям и не тех. поддержке. Десктопные приложения в этом плане более стабильны и предпочтительны.
Про ГИСы я вообще молчу. Это говно вообще никогда не работает как заявлено. Там видимо вообще отбитые пишут.
>И что там в фуллстеке от шарпа?
Внезапно - шарп. На котором есть ASP - один из лучших и быстрых веб фреймворков.
Ну, или даже блейзор - все тебе будет на шарпе.
> Там и формирование справок, финансовые отчетности
Ну я же говорю, документооборот для михалычей.
По последней версии WPF нет книги и хотелось бы книгу уровня Петзольда. Потому что текущие книги - ни о чём. Примеров мало и в основном посвящены xaml. А Петзольд прям на шарпе фигачит примеры, а xaml как довесок, чтобы красоту навести.
>Через java-аплеты
Это ты у своего банка спроси. На этой борде некоторые даже выебываются, что работают на банк. Такое же гос говно с дремучим легаси и бюрократией.
>Десктопные приложения в этом плане более стабильны и предпочтительны
Только если на тебя не вешают CI/CD или покрытие UI тестами и твоей софтиной пользуется 1 человек.
Не пизди.
А вообще, ты похож на шизоида, который срал тут недавно.
на всякий случай пошлю тебя нахуй: иди нахуй
Ты же сам побежешь искать новейшие книги, которые каждых пять сек устаревают, вот они и подсуетились.
>По последней версии WPF
Это по какой версии?
>в основном посвящены xaml
По шарпу или по архитектуре есть другие книги без привязки к WPF. Тебе об этом уже писали.
Я видел книги по WPF 4.5, а сейчас уже WPF 5 и скоро WPF 6 выйдет.
Я изучил уже консольные приложения. Я так-то вообще профи и легко изучаю новые языки. Начинал ещё с Ассемблера, С++, Паскаль, РНР, Perl и многие другие. И в ВУЗе я сдавал программирование на отлично, только с математикой ленился и порой плохо сдавал.
>WPF 5
Это неудачный порт на кор и патчи, которые фиксят баги порта. Совсем скоро его выкинут из сдк в ворклоад или вовсе задепрекейтят.
Я ждал MAUI в ноябре, но говорят, что его не будет. Плюс ещё надо ждать книги, чтобы понять как на нём писать.
В то же время на Java уже есть кроссплатформенные библиотеки для написания десктопных приложений. Да что далеко ходить? Rider написан на Java. А где IDE на C#?
Ты уже обосрался с Java 17 и WPF 5.
MAUI - это ребрендинг Xamarin, никто не мешает пробовать на нем учиться писать прямо сейчас, если так сильно надо.
>Java уже есть кроссплатформенные библиотеки для написания десктопных приложений
На шарпе тоже есть и на порядок больше. И что дальше?
>А где IDE на C#?
Я не вижу причин от винды переходить на другую ось. У райдера проблем не меньше, чем у студии. То, что сервер может крутиться на линуксе, на мою ось вообще не влияет.
Приведи популярные кроссплатформенные программы на Java, чтобы поддерживало iOS, иначе это вшивая кроссплатформа.
>Rider написан на Java.
и на C# в том числе, Rider это Intellij + Resharper (который на c#)
>>201045
>А где IDE на C#?
>
ВНЕЗАПНО
- Visual Studio
- MonoDevelop (не нужно)
>>201045
>Я ждал MAUI в ноябре, но говорят, что его не будет
Не нужно ибо есть
https://avaloniaui.net/
>>v0.10.10
я уже и забыл что на дваче преимущественно одни СТО сидят, и ПОД БИЗНЕС ТУЛЗЫ ВЫБИРАЮТ, а не свои свисто перделки
Если бы это была хотя б альфа, но нет. Это очень далекая омега центавра. Этот номер версии говорит о двух фактах: апи изменится и наличие багов.
>Этот номер версии говорит о двух фактах: апи изменится и наличие багов
Далеко не факт, мало ли по каким еще причинам они хотят оставаться на "начальном этапе"
Другим это не особо мешает, вон даже какой-то клиент под битки запилили, wasabiwallet.io, но да, нужно не забывать что у типичного двачера то ПОТРЕБНОСТИ ОГОГО и ЧЕГО ТО ДА ТОЧНО НЕ ХВАТИТ
>Далеко не факт
https://github.com/AvaloniaUI/Avalonia
>Avalonia is ready for General-Purpose Desktop App Development. However, there may be some bugs and breaking changes as we continue along into this project's development.
>Другим это не особо мешает
Тесты на UI научился писать?
>нужно не забывать что у типичного двачера
Такую либу невозможно пропихнуть.
Я десктоп не пишу. Свои фантазии оставь при себе.
Но я как синиор крудошлеп чувствую себя букашкой.
нах?
Вот почему по C# нет таких же классных книг?
Иди уже нахуй, шизоид со своими книгами.
Завтра зеленог ослоника прочитаешь и
"Я был просто в восторге от этой книги. Она написана понятным языком, всё разложено по полочкам, что не возникает недопонимания. Первые 1000 страниц прочитал залпом за один день. Только вот из-за этой одной книги готов стать поехавшим"
Да, писал свой движок на РНР. Всё было гораздо проще и понятнее. Лёгкая масштабируемость. Не было ни каких "магических" названий файлов, которые движок обрабатывал по-особому. Это всё явно прописывалось.
Из чужих движков работал немного с Laravel. Ничего про него не читал, а с ходу внёс правки в сайт, какие требовались.
А что в ASP.NET? Это какой-то монстр, где все важные детали скрыты и заменены малопонятными методами, о которых можно узнать, если прочитаешь многотомные мануалы. Изменяешь код в одном месте, валится в другом, казалось бы совсем не связаном с ним. Как масштабировать сайт, я так и не понял. Шаг влево - шаг вправо и ничего не работает.
Если книг читать не будешь - скоро грамоту забудешь!
Хочу писать на вашем языке, есть что по гуи для мака? Если только не какао, тогда я могу свифт юзать. Мне бы кроссплатформенное
Шарп не может в кроссплатформенное гуи. MAUI ещё не вышел, а WPF только под винду.
Во-первых, её нет на русском. Во-вторых, она только по самому языку, а у Хорстманна основной объём по фреймворкам и много внимания уделено именно графическим приложениям.
Ближайшим аналогом можно считать Троелсенна, но он скучно пишет. Я его читаю перед сном и всегда крепко засыпаю.
Да, точно тот вкатун.
Ну чтож, не срослось у тебя. Собсвенно: алибидерчи, но у тебя нету права со своим "опытом" обсирать АСП.
Аргументы тебе уже приводились, если ты не хочешь осилить + понять зачем так сделано (и отказаться от того, что тебе жмет) - иди нахуй в свои ПХП.
Сейчас все гос. конторы переходят на русские ОС (линупсы) и им срочно надо перенести говнопрограммы с винды на линупс. Так что десктоп в нашей стране очень актуален. А ваш веб не везде можно применить.
По языку биллиг сойдет для начала, есть еще аблахари, липперт (вообще один из создателей языка).
Для этого есть уже 15 лет либы на моно не первой паршивости.
В госконторах платят копейки. Вся суть ойти в этой стране что за счет дохода в $ средняя зп более менее.
Вот это уникальная возможность быть швабрированым за 20к рубльов и виноватым, когда продукт обосреться ибо КОМУНАДО отьели 90% бюджета! А главное большая честь!
Мммм, работал я лет 10 назад на гос, все 10 лет мечтаю вернуться. И хуй стоял там кста.
> Насколько актуально?
Если с нуля изучаешь, то для начала сойдет. Но там только голый язык без библиотек.
>MAUI
Поддержка линукса только на уровне комьюнити, а не официальная.
Ну и мне чет кажется, что нормального мауи на линухе не будет.
Зато в резюме можно будет добавить "Работал на увожаемого Виктора Иваныча по специальности - пидорас"
Из новых книг читал Прайса, но там "голопом по европам", но плюс, что книга про кроссплатформу и ни какой вижуал студии (только vs code).
Ещё начинал читать Гриффитса, но она ещё более скучная, чем Троелсен. И там тоже только про язык, без платформы .Net.
Лично у меня даже грамота благодарственная есть от министерства экономики за хорошую работу.
>у Хорстманна основной объём по фреймворкам и много внимания уделено именно графическим приложениям
У хорстманна только лишь джавакор изложен (java se). И да, swing gui тоже относится к java se. Может в будущем его выпилят или заменят чем-то более разумным, но пока что в стандартную жабу входят формочки 20 летней давности.
>>201742
>Ява ГУИ это лол, хорошо пошутил
Как минимум долгие годы это был единственный способ создать рабочий кроссплатформенный ГУИ. Популярность электрон начал набирать после 2015 где-то, а до того либо жаба, либо c++/qt.
Поэтому всякие IDE от джетов написаны на жабе. Сейчас свинг в жабе уже сильно устарел, однако jb начали свой ферймворк пилить, может у них что получится, а то мауи кажись под линуксами будет oche huewo работать.
https://www.jetbrains.com/lp/compose-mpp/
> Как минимум долгие годы это был единственный способ создать рабочий кроссплатформенный ГУИ.
Он вырвиглазный настолько, что назвать его гуем язык не поворачивается.
>единственный способ создать рабочий кроссплатформенный ГУИ
На плюсах как-то писали и пишут кроссплатформу и ничего.
>на Java уже есть кроссплатформенные библиотеки для написания десктопных приложений
Кроме jb-compose и awt/swing/fx на жабе нихуя нет. Хотите десктопы - берите qt или electron, все остальное либо завязано полностью на винду, либо параша.
>>200982
>прикручена работа с ЭЦП в этом вашем вебе? Через java-аплеты!
Это ты видимо в совсем уж легаси проект попал, раз у тебя апплеты. В крупных известных банках никаких апплетов уже нет лет 5 точно.
>Он вырвиглазный настолько
Ты про внешний вид свинг приложений? По умолчанию он жутко всратый, это факт. Но под виндой можно сделать так, чтобы внешний вид не отличался от дефолтного виндового. Под линуксом такой возможности увы нет, приходится накатывать специальные темы оформления.
>>201828
На плюсах только на Qt можно кроссплатформу писать. Поэтому либо жаба, либо плюсы. А вообще где-то до 2010-х годов никакой кроссплатформы не было толком, на моей памяти все прогрммы были целиком и полностью под винду, под линуксом в основном только браузеры были и все.
Я сижу с работы с отключенной графикой что бы начальник не видел.
>токсичный дед
Ебать ты.
Решетки говно, кстати, чем больше пишу - тем больше говно.
еще более токсичный дед
> чем больше пишу - тем больше говно
Все так.
Как теперь с новыми решетками отвечать на вопрос "интерфейс вс абсрактный класс" то?
У меня токсичность 13см, а у тебя?
>отвечать на вопрос "интерфейс вс абсрактный класс" то?
Можно в ебало плюнуть, например.
>а у тебя?
Старость не радость, уже не 19 а всего 18
Инцел, спок.
Не кажется ли вам, что веб убивает такие языки как C#?
Для Qt всего одна книга есть и то, она коряво написано. Типа вот у нас такая штука. Конец. Следующая глава про штуку №2.
Я поэтому и ушёл из С++ в C#, потому что тут больше книг по десктопу.
> потому что тут больше книг
ПОчему ты не уйдешь тогда в тело сталина, телепортиванное в фентези?
Ну я имел ввиду под серый. Но так антураж ЖСстреда - тоже ок.
Я люблю хорошие книги по программированию. Чтобы там было хорошее оформление, материал структуирован и сама книга большая по объёму.
Надо добить тред и перекатить лол.
Какой архитектуры придерживаетесь? Ну там мультлеер, онион, микросервисы? Если микросервисы, тоуже похуй шо там?
Как и что в общие либы для микросервисов вычленете?
>Нет, не только Qt.
А на чем? Ну так-то можно хоть на опенгл писать гуи, но ведь никто не делает так.
Из относительно популярных фреймворков для С++ я только Qt знаю. На GTK все-таки немного затруднительно под винду писать, хоть и возможно.
Албахари ощущается как ебучий справочник, хотя ответы на почти все вопросы даёт. По шарпам хотелось бы что-то типа руководства для начинающих по джаве от Шилдта, читается полегче. мимовкатун-студент
>Слои по клин коду
Это какие?
Меня чет тригерят выражения "по клин коду". Чистый код = хороший код, а не что там пидоры те понакарябали
Я неправильно написал. Вариация Clean Architecture. Это сильно от проекта зависит. Есть проекты, где от нахер не нужен. Например, если надо делать действие по флоу.
ВПФ это уже гавно мамонта?
Если мне сейчас нужно будет гуй накидать на виндовс то изучать хамарин?
Так то мне гуи эти нахуй не упали, консолька маст хев, но все же мб когда пригодится.
А про ВинФОрм ваще уже можно забыть?
{
[MyAttr("Это А")]
public C SomeShit {get;set;}
}
class B
{
[MyAttr("Это Б")]
public C SomeOtherShit {get;set;}
}
class C
{
override void ToString()
{
// Как здесь достать атрибуты свойств SomeShit/SomeOtherShit в экземплярах A/B, не зная сами типы A/B? Тип, используемый в куче других классов, должен уметь вытаскивать собственные атрибуты.
}
}
Рандомчик с гугла? Ну ок.
Видишь он там делает typeof (NormDoc)? Получает свойства NormDoc. Его NormDoc - это мой C. Мне нужны не свойства C, мне нужны свойства класса, в котором C используется как свойство, при том что я этот класс не знаю.
Я чет не могу вдуплить как мне на "породивший" экземпляр выйти. Вот BaseType вижу но это не то.
>Про декстоп уже можно забыть
Хуя манямир у вебстудийных зумерков.
>>202487
>А про ВинФОрм ваще уже можно забыть?
Да не, живет еще дохуя где, но преимущественно в рамках поддержки наследия. Если для себя, то вкатывайся сразу в впф. Он еще актуален там, где актуален десктоп. Хамарин расширительная хуйня, никому сам по себе он не нужен.
Раздел-то про шарп, а не про вам перезвонят.
Никто не любит насебяшников. Лучше придумай что друг работал на дядю, просто по личным причинам был ограничен в выборе работодателя и поэтому приходилось работать за конверт. Мало кто поверит что еще остались конторы с серой оплатой погромистов, но еще меньше кто поверит что успешный самнасебятель вот просто захотел поработать на дядю, а не облажался и побежал за зарплатой или тупо не заебался перемогать и решил найти себе непыльную хуйню с гарантированным доходом.
Да я ему и писал, что не стоит про бизнес упоминать, т.к выглядит не очень, как будто он прям такой делюган. На самом деле то он просто роботов писал для своей биржевой торговли, 90% кодинга было, 10% торговли.
Сходил на пару собесов, пока что в одной конторе думают, но сам не хочет туда, там визуал бейсик требуют учить)
Блок обо мне не нужен. В обратной хронологии дата, контора, проект, краткое описание проекта (что за херня, а не многопоточность и алгоритмы) + стек технологий, роль на проекте.
Опыт по .NET разный, но с микросервисами немного только работал, а по моим наблюдениям работа на .NET разбивается на три подвида:
1. Фулл-стак крудошлёп - имхо бесперспективная хуйня в плане специализации, уровня принеси подай в стартапе / мелкой продуктовке, где каждый год нужно с сумками перелазить на другую шлюпку аля очередной ФРЕЙМФОРК для фронта.
2. Гречка забитая - типичная конторка, где средний пациент просиживает на стуле спокойно 10+ лет, делая новые проектики в 2к21 на винФормс. Про контейнеры здесь не слышали, веб разной степени уебищности уже встречается, но в отличии от первого типа, тут вам не стартап, а энтерпрайз со всем колхозом. Работают по методике Kaban. В качестве бонуса может прилагаться WebForms/WCF либо другая забытая цивилизацией технология.
3. Alpha* - уже перешли на .NET6.0, часто встречается Линукс, Майкрософт презирают. Микросервисная архитектура, пишут книги для форексов, софт для алго-трейдинга, всякий хай лоад. К фронту/десктопу тут не прикасаются. От первых двух типов отделены световыми годами.
4. Unity и разные другие мелконаправления я не считаю - первое это вообще геймдев, а второе долго не живёт.
Хуево получается, кампании первых двух типов для переката мне не интересны, а третьему типу - уже не интересен я. Нахуй так жить вообще.
3.
На приеме у венеролога:
- Понимаете доктор у моего друга тут такая проблема... Ну он
недавно познакомился с девушкой..
- Ладно снимайте штаны и показывайте своего друга!!!
>>203130
Как-то... странно выглядит. Чувствуется, что гребец не галерный.
Вапервых, на онглийском должно быть.
И пересмотри на опечатки "net" - ну среьезно? Тебе самому не стыдно?
Вместо "роботл роботу на себя" напиши кртко о проекте: в какой сфере, какие технологии, какие роли занимал .
"Собвсвенные типи данных" - каво?
Да не, он просто от двачей далек, поэтому я за него тут. Да и ему страшно прям все так в лицо выслушивать, он то начинал еще в те времена, когда вкат на изи был, поэтому все это время пока бабки с биржи шли, жил в мыслях, что если вдруг кончится, то быстро перекатится в офис. Ну вот щас бабки перестали капать, а в офис брать не спешат.
Спс, все ему передам
После кубернетесов на тебя будут вешать тучки с облачками и билд пайплайнами. Админы (не девопсы) будут отвечать только за секурити.
>роботл роботу на себя"
>"Собвсвенные типи данных" - каво?
— Одно слово — румын.
— Так он же болгарин
— Да?! А какая разница
Сознательность.
Отрицать что большая часть продукции Майкрософта - говно для нормичей и энтерпрайза, будет только упоротый фанат.
У них есть много говна, у них есть хорошие продукты. Alpha* как раз не жрёт слепо продукцию Майкрософт по типу упоротых яблочников и гречки, фанатов любимой кампании, а выбирают только сливки, чем .NETCore и является.
>>203293
Тяжело.
>Сознательность.
>Отрицать что большая часть продукции Майкрософта - говно для нормичей и энтерпрайза, будет только упоротый фанат
Считаю Azure лучшим облачным провайдером, презираю амазон, его веб1.0 интерфейс и ональную модерацию ВСЕГО блядь, на любой пук - пиши в саппорт.
В качестве учебного пособия подходит то что будет заставлять тебя не сидеть на жопе и пилить код.
Ну серьезно. Я на первую работу шарпоняшей попал вообще из-за того что хрюша не отличала C# от C++, а на месте слишком нужны были кадры, потому никаких особых смотрин и ворчаний не было, просто дали неделю на изучение шарпа и сразу таски начали кидать.
Нахуа куберы в облачках, если они и без них все могут?
Ну вотя пиздолю арм темплейтом свое говно в азур, выбираю аппсервисплан - и мне поебать, оно само скейлится.
Что мне даст кубер?
Кек, я тоже устраивался на джуниор C++ разраба.
В первую же неделю у тимлида пригорели сроки на другом проекте и меня перекинули быстро на .NET, а вот ровно через год опять хотели вернуть на C++ проект, я то уже знал что там код пиздец, легаси, а .NET делался с нуля.
Ну я в общем вышел покурить и больше не возвращался в ту контору на самом деле нормально ушел, быстро соорентировался.
У кода без докера постоянно проблемы с энвом. Когда много контейнеров, их сложно становится поддерживать, если например я хочу запустить на дев машине. На дев машине мне масштабирование может быть и не нужно, но я манал запускать докер контейнер по отдельности. В облаках можно и без кубернетеса хостить и масштабировать докер контейнеры, но зачем делать дважды одно и тоже?
>Как теперь с новыми решетками отвечать на вопрос "интерфейс вс абсрактный класс" то?
А в чём подвох? Не увидел в последних обновлениях ничего такого.
мимовкатун
Сап, не работал с .Net 2 года, всё это время либо чилил, либо ебошил на чистом старом C прошивки под мк, короче суть в том, что я этот фрейморк нехило так подзабыл...
Вообщем как вкатиться опять? Я думаю, что если буду начинать с самого начала, то вкачусь с утроенной скоростью, т.к. всё учил уже до этого, но как-то не хочется опять с книжками дрочиться но все равно прийдется. У меня есть 10 месяцев, чтобы вкатиться в fullstack разработку, стоит ли мне повторять основы?
Там за 2 года не так все поменялось, лол. Появились Span, Memory, рекорды и прочее по мелочи.
Я не знаю что ты там будешь на .net делать, но абстрактно - туду-лист сделать советую(ну, типа если десктоп или замарин - MVVM, если веб - апишку, а фронт на каком-нибудь реакте/vue/ангуляре, если фуллстек полностью на .net - посмотри на блазор, ну или классические MVC), для доступа к базе - ef core/dapper
у нас есть число например 6666
и делитель 1000
и надо узнать сколько нужно раз сделать что бы получилось
1) 1000
2) 1000
3) 1000
4) 1000
5) 1000
6) 1000
7 666
я вообще не знаю как эта операция называется, это похоже на деление с остатком но не то
а это точно найболее быстрый способ? так и я могу написать но такой вот цыкл выглядит страшно
https://github.com/SecretPenguinusBot/ToDoApp/tree/main/src/backend
а иначе никак нельзя? задачка вроде простенькая, какую-то формулу, или магический оператор?
return 7;
- не .NET 6
- нет вообще настроек для сваггера
- есть AddNewtonsoftJson
- UseSqlite вместо чего-нибудь типа постреса
- нет аутентификации и авторизации
- нет валидации
- название неймспейса с маленькой буквы
- EntryPoint и RunAsync - это какое-то петрясянство - удали
- какой-то очень кривой коннекшен стринг без секурити и юзер сикретов
- JsonIgnore в Entity - говнокодер!
- очень сильно насрали в IRepositoryActionResult.cs + настрой иде, чтобы форматировало файл на сохранении, прикрути хотя бы editorconfig
- в IRepositoryActionResult.cs изобретение пятого колеса
- неправильное использование иока
- бесполезные логи
- использование OkResultWithData выглядит как дичь
- не используется cancellationToken, не однородный код с = default
- дублирование кода в try-catch в репозиториях
- не плоди ненужные папки для контроллеров
- дублирование кода для респонса в контроллерах
- не перечисляй атрибуты через запятую и не пиши все на одной строке в коде, что ты экономишь? читабельность просто пиздец
- пустые строчки в начале файла перед юзингами
- контроллер валидацией не занимается
- магическое число 500
- ApplicationContext - какой-то вздрочь, не называй классы как Context, Manager и так далее, код вообще пиздец в файле
- версия проекта не так делается, как и название
- ApplicationBootrstrap - бред
- ServerTimeImpl - удали эту херь и перепиши код таким образом, чтобы она не понадобилась
- тесты где?
Не тянешь даж на трейни.
- не .NET 6
- нет вообще настроек для сваггера
- есть AddNewtonsoftJson
- UseSqlite вместо чего-нибудь типа постреса
- нет аутентификации и авторизации
- нет валидации
- название неймспейса с маленькой буквы
- EntryPoint и RunAsync - это какое-то петрясянство - удали
- какой-то очень кривой коннекшен стринг без секурити и юзер сикретов
- JsonIgnore в Entity - говнокодер!
- очень сильно насрали в IRepositoryActionResult.cs + настрой иде, чтобы форматировало файл на сохранении, прикрути хотя бы editorconfig
- в IRepositoryActionResult.cs изобретение пятого колеса
- неправильное использование иока
- бесполезные логи
- использование OkResultWithData выглядит как дичь
- не используется cancellationToken, не однородный код с = default
- дублирование кода в try-catch в репозиториях
- не плоди ненужные папки для контроллеров
- дублирование кода для респонса в контроллерах
- не перечисляй атрибуты через запятую и не пиши все на одной строке в коде, что ты экономишь? читабельность просто пиздец
- пустые строчки в начале файла перед юзингами
- контроллер валидацией не занимается
- магическое число 500
- ApplicationContext - какой-то вздрочь, не называй классы как Context, Manager и так далее, код вообще пиздец в файле
- версия проекта не так делается, как и название
- ApplicationBootrstrap - бред
- ServerTimeImpl - удали эту херь и перепиши код таким образом, чтобы она не понадобилась
- тесты где?
Не тянешь даж на трейни.
С половиной согласен. С остальным - пошол нахуй ," дажелень объяснять".мавроди.джпг. на трейни тянет
>дажелень объяснять
Только перечень проблем занял простыню текста. Ты необучаемый. Попробуй фронтенд.
>не .NET 6
Он еще в превью жи.
> нет вообще настроек для сваггера
А зочем?
> UseSqlite вместо чего-нибудь типа постреса
У меня нет постгреса на ноутбуке(((
> нет аутентификации и авторизации
Ну, за час я бы не успел бы их прикрутить, а идентити-сервер стал платным
> название неймспейса с маленькой буквы
Ну, это из-за того что при создании проекта с консоли - неймспейс по имени папки делается, а папка с маленькой
> EntryPoint и RunAsync - это какое-то петрясянство - удали
Почему? Мне нравится.
> какой-то очень кривой коннекшен стринг без секурити и юзер сикретов
Ну, какой есть. Я же просто чтоб была какая-то база в скулайте сделал.
> JsonIgnore в Entity - говнокодер
А правильно было делать? Просто в реальных своих проектиках я обычно вообще делаю маппары и использую ДТО, но т.к. тут хотел быстренько - начиналась хуерга с циклами
> очень сильно насрали в IRepositoryActionResult.cs + настрой иде, чтобы форматировало файл на сохранении, прикрути хотя бы editorconfig
У меня нет иде((( Я пишу в виме.
> - в IRepositoryActionResult.cs изобретение пятого колеса
А как правильно-то было бы? Ну, типа я не хочу при ненахождении кидать эксепшн и ловить в контроллере, при этом и null или статускод не хочу возвращать.
>неправильное использование иока
Не понял
> бесполезные логи
Согласен
> использование OkResultWithData выглядит как дичь
А как нужно? Ну и примерно так выглядит тот же OkObjectResult в самом ASP, да, там похитрее и используется для немного других целей, но суть.
> не используется cancellationToken
Если про контроллер. То согласен. Копипастил, десу. А в репке - как-бы суть же в том, что ct - использовать если допустим пользователь запросил из базы здоровую фигню, устал ждать, закрыл соединение и мы не будем это тащить, но если он решил созать что-то нет смысла особого прерывать создание проекта из-за того что дропнулось соединение, а ct из контроллера как раз при дропе соединения и получаем.
> дублирование кода в try-catch в репозиториях
А как надо-то?
> не плоди ненужные папки для контроллеров
Ну, так это пока там один контроллер. А потом появятся всякие DTO и прочие штуки. Куда их девать-то? Не к базе же они относятся, а к тому что получает контроллер и что отдает.
> не перечисляй атрибуты через запятую
Я не экономлю, просто мне так больше нравится.
> пустые строчки в начале файла перед юзингами
Оставлены для того чтобы вставить копирайт проще было!
> контроллер валидацией не занимается
Это я знаю. Но делать фильтр пока не хотелось, а валидации в репке как мне кажется не место.
> магическое число 500
Ну, допустим тут я согласен, с другой стороны это же статускод который все знают. Как 0 в Си, все знают что это значит.
> версия проекта не так делается, как и название
Ну вот решу я называть версии типа: SexyKoala, как мне это делать? Или имя приложения должно будет локализованным быть.
> ApplicationBootrstrap - бред
Ну вот смотри. Мне нужно будет чтобы n-классов в не просто инстанцировались, но были настроены определенным образом и инстансы создались именно до старта основного приложения. Каким образом мне это провернуть иначе? В той же ненси - есть подобное решение, пусть они там это и без DI майкрософтовского делают.
> ServerTimeImpl - удали эту херь и перепиши код таким образом, чтобы она не понадобилась
И каким образом? Вот у таски есть время создания. В дальше будет класс, который будет проверять задачи у которых истек дедлайн. Опять же - сами майки в кестреле подобную штуку используют.
> тесты где?
За полтора часа только это успел(((
> Не тянешь даж на трейни.
Окей(((
>не .NET 6
Он еще в превью жи.
> нет вообще настроек для сваггера
А зочем?
> UseSqlite вместо чего-нибудь типа постреса
У меня нет постгреса на ноутбуке(((
> нет аутентификации и авторизации
Ну, за час я бы не успел бы их прикрутить, а идентити-сервер стал платным
> название неймспейса с маленькой буквы
Ну, это из-за того что при создании проекта с консоли - неймспейс по имени папки делается, а папка с маленькой
> EntryPoint и RunAsync - это какое-то петрясянство - удали
Почему? Мне нравится.
> какой-то очень кривой коннекшен стринг без секурити и юзер сикретов
Ну, какой есть. Я же просто чтоб была какая-то база в скулайте сделал.
> JsonIgnore в Entity - говнокодер
А правильно было делать? Просто в реальных своих проектиках я обычно вообще делаю маппары и использую ДТО, но т.к. тут хотел быстренько - начиналась хуерга с циклами
> очень сильно насрали в IRepositoryActionResult.cs + настрой иде, чтобы форматировало файл на сохранении, прикрути хотя бы editorconfig
У меня нет иде((( Я пишу в виме.
> - в IRepositoryActionResult.cs изобретение пятого колеса
А как правильно-то было бы? Ну, типа я не хочу при ненахождении кидать эксепшн и ловить в контроллере, при этом и null или статускод не хочу возвращать.
>неправильное использование иока
Не понял
> бесполезные логи
Согласен
> использование OkResultWithData выглядит как дичь
А как нужно? Ну и примерно так выглядит тот же OkObjectResult в самом ASP, да, там похитрее и используется для немного других целей, но суть.
> не используется cancellationToken
Если про контроллер. То согласен. Копипастил, десу. А в репке - как-бы суть же в том, что ct - использовать если допустим пользователь запросил из базы здоровую фигню, устал ждать, закрыл соединение и мы не будем это тащить, но если он решил созать что-то нет смысла особого прерывать создание проекта из-за того что дропнулось соединение, а ct из контроллера как раз при дропе соединения и получаем.
> дублирование кода в try-catch в репозиториях
А как надо-то?
> не плоди ненужные папки для контроллеров
Ну, так это пока там один контроллер. А потом появятся всякие DTO и прочие штуки. Куда их девать-то? Не к базе же они относятся, а к тому что получает контроллер и что отдает.
> не перечисляй атрибуты через запятую
Я не экономлю, просто мне так больше нравится.
> пустые строчки в начале файла перед юзингами
Оставлены для того чтобы вставить копирайт проще было!
> контроллер валидацией не занимается
Это я знаю. Но делать фильтр пока не хотелось, а валидации в репке как мне кажется не место.
> магическое число 500
Ну, допустим тут я согласен, с другой стороны это же статускод который все знают. Как 0 в Си, все знают что это значит.
> версия проекта не так делается, как и название
Ну вот решу я называть версии типа: SexyKoala, как мне это делать? Или имя приложения должно будет локализованным быть.
> ApplicationBootrstrap - бред
Ну вот смотри. Мне нужно будет чтобы n-классов в не просто инстанцировались, но были настроены определенным образом и инстансы создались именно до старта основного приложения. Каким образом мне это провернуть иначе? В той же ненси - есть подобное решение, пусть они там это и без DI майкрософтовского делают.
> ServerTimeImpl - удали эту херь и перепиши код таким образом, чтобы она не понадобилась
И каким образом? Вот у таски есть время создания. В дальше будет класс, который будет проверять задачи у которых истек дедлайн. Опять же - сами майки в кестреле подобную штуку используют.
> тесты где?
За полтора часа только это успел(((
> Не тянешь даж на трейни.
Окей(((
>Он еще в превью жи.
4 дня до релиза.
>идентити-сервер стал платным
Это OAuth. Можно было бы и без OAuth.
>Почему?
Лишние абстракции, которые увеличивают сложность приложения.
>тут хотел быстренько
Зачем тогда просить ревью, если код тяпляп?
>А как правильно-то было бы?
Инфраструктура должна быть такая, чтобы ты не делал Ctrl+C и Ctrl+V одного и того же. Резалты мог аспешные переюзать.
>А в репке - как-бы суть же в том, что ct - использовать если допустим пользователь запросил из базы здоровую фигню
В репозитории асинхронный код, который не использует CancellationToken, который есть в параметрам метода. По коду непонятна тяжесть запроса.
>А как надо-то?
Мидлварь.
>статускод который все знают
Да никто не знает. Перейди в бугурт тред и почитай его.
>Или имя приложения должно будет локализованным быть
Название приложения не локализуют. Версию берут из ассембли. При билде можно подставлять нужную версию.
>Каким образом мне это провернуть иначе?
Проблема в тестах.
>Опять же - сами майки в кестреле подобную штуку используют.
Можно вынести или в базу данных (дата не указана = текущая дата), или пробрасывать дату через весь код.
>За полтора часа только это успел
Откуда ограничение в полтора часа?
>Он еще в превью жи.
4 дня до релиза.
>идентити-сервер стал платным
Это OAuth. Можно было бы и без OAuth.
>Почему?
Лишние абстракции, которые увеличивают сложность приложения.
>тут хотел быстренько
Зачем тогда просить ревью, если код тяпляп?
>А как правильно-то было бы?
Инфраструктура должна быть такая, чтобы ты не делал Ctrl+C и Ctrl+V одного и того же. Резалты мог аспешные переюзать.
>А в репке - как-бы суть же в том, что ct - использовать если допустим пользователь запросил из базы здоровую фигню
В репозитории асинхронный код, который не использует CancellationToken, который есть в параметрам метода. По коду непонятна тяжесть запроса.
>А как надо-то?
Мидлварь.
>статускод который все знают
Да никто не знает. Перейди в бугурт тред и почитай его.
>Или имя приложения должно будет локализованным быть
Название приложения не локализуют. Версию берут из ассембли. При билде можно подставлять нужную версию.
>Каким образом мне это провернуть иначе?
Проблема в тестах.
>Опять же - сами майки в кестреле подобную штуку используют.
Можно вынести или в базу данных (дата не указана = текущая дата), или пробрасывать дату через весь код.
>За полтора часа только это успел
Откуда ограничение в полтора часа?
> Резалты мог аспешные переюзать.
Аспешные резалты в репе? А ты точно прогромист?
>Можно вынести или в базу данных (дата не указана = текущая дата), или пробрасывать дату через весь код.
Хуета. Все он правильно с датой сделал. Разве что назвать надо не серверТайм (апликейшн код не должно беать на сервере он там или в где), а дейтТаймПровайдер или типа того.
>>Аспешные резалты в репе?
>В контроллере.
Так разве у него там и так не аспшные? Там он в репе свои велосипедные ОкРезалты юзает.
Контроллер - нормальное название в паттерне MVC. Но ненормальное название просто левому коду (не веришь, глянь как на Unity пишут говнокодеры, это их любимое слово). Называть вещи надо осмыслено. Менеджер и провайдер - нехуя не осмысленно. Делает хуй пойми что.
Ну а как его назвать-то?
Ладно, менеджер - довольно пространно, но как блядь назвать класс, который делает всякое РАЗНОЕ с ентитей?
Провайдер - нормальное название, поставщик чего-то, в данном случае поставщик даты.
>Context
+
И не понимаю, чего ты к Context приебался. Тоже довольно точно описывает себя (в отрыве от примера кода выше, не помню что там в контексте)
Зачем тогда тебе нужны репозитории? Такие же поставщики данных.
Класс не должен делать всякое разное. Нарушаешь Single Responsibility.
Ты Сакутина пересмотрел?
Провайдер - одно из стандартных имен для интерпрайза. Посмотри код самого дотнета современного, а лучше асп. Или посмотри на джаву, где провайдер погоняет контекстом и сверху ресолверы с хендлерами. Это как раз таки понятные любому человеку, который занимается разработкой вещи, в отличии от "предметноориентированных" названий, где чтобы понять что это блядь за хуета - ты должен быть в контексте предметной области.
Нет. Объясню на простом примере. Что делает UrlProvider? Или StringProvider?
Резолверы - антипаттерн.
>Такие же поставщики данных.
Нет. Хранилище, а не поставщик. Да и ,во вторых, все-таки есть общепринятые правила, понятные всем с первого взгляда.
Да, на счет менеджера - буддет понятно "свалка для всего".
>Класс не должен делать всякое разное. Нарушаешь Single Responsibility.
Зато ПРОСТО, не нарушил КИСС.
Ну и как бы ты сделал обычный круд для юзера?
>>204116
А на счет менеджера и контекста что скажешь?
Так поставляет что? Я бы тебе показал охуенный код провайдера, что ты сам охуеешь, но не могу.
дает возможность получить КАКУЮ-то урлу или стринг, возмржно дефолтную, если без параметров.
Окей. КарентДейтТаймПровайдер будет лучше, но карент можно скипнуть ибо всем и так понятно.
"Резолверы " - шо це?
Гугл ведет к стратегии и ДИ резолверу
>>204121
дейтТайм, очевидно же.
>>204123
И норм. В ринципе сразу понятно что это.
Так как вы круд простой спроектируете, то, умники? С анемичной моделью.
>менеджера
Очевидно, что это класс в котором содержится вся куча логики и он находится на вершине иерархии данного поддомена занимаясь управлением состояния. На этапе прототипирования - вполне нормальная вещь, впоследствии, если можно, - будем резать на составные части, если пользоваться менеджером станет неудобно и через него будет проходить много изменений.
Господи, да посмотри код кестрелла. Там такой же ConnectionManager на каком-то этапе был, который занимался тем что смотрел не истекло ли время жизни соединений при очередном HeartBeat и убивал дохлые. Потом порезали.
> контекста
В обычной практике - сущность которая сосредотачивает в себе некий стейт и всю нужную информацию для него. Опять же нормальная тема, причем далеко не только на этапе прототипа. Все эти контроллеры, мидлвары, фильтры и прочее из ASP по факту вращаются вокруг того самого HttpContext'а. Как-то живем. Работа с базой в EF так же происходит через контекст. Никто не жалуется. Из других языков - в андроид-разработке - контекст на контексте и контекстом погоняет. В спринге - тоже контекстов куча. Как-то разбираются люди и ведут разработку.
Резолвер - это сервис локатор. Используется внутри ДИ. Но тебе ничего не мешает пропихнуть его в какой-либо класс и резолвить что хочешь.
>КАКУЮ-то урлу или стринг
Ну, вот так баги и фиксятся по несколько часов, дней, недель. Есть класс, делает хуй пойми что, надо идти в имплементацию. Пока ходил по разным классам, забыл что делал первый.
>На этапе прототипирования
Прототип выкидывать надо и писать с нуля. Иначе никто такой класс резать не будет. Будет висеть 15+ лет.
А составные части как назовете-то? Ну вот, на примере юзерменеджера?
>>204132
Стоп стоп.
Каким это образом дейтТаймПровайдер стал сервис локатором? Это фектори по сути. Мы кокрастоке решили проблему, убрали околосервис локатор ДейтТайм.Ноу.
Ок. Назвем ДейтТаймФектори? Хуита. Все равно цель-то другая.
I know this is a pretty old thread but the concept of ‘SomethingManager’ has gripped me for years since I first encountered the concept and I’ve been mulling it over ever since. To me it seems that the business of software is a multi-level occupation that involves essentially three layers.
We’re not only in the business of creating software, we’re in the business of creating processes to create software and to that end we’re in the business of creating organizations which create processes to create software.
It’s pretty well known according to Conway’s Principle that organizations that design systems (i.e. processes or software) will essentially design systems that mirror the communication patterns within the organization and which reflect the quality of communications within the system. This type of self-similarity cannot be avoided, especially long-term and at scale.
If the *Manager pattern is an anti-pattern at the software level, my instinct tells me it’s also an anti-pattern at the org level and these people who are going around managing the rest of us are pretty much designed to enforce compliance and whatever vacuous purpose the manager class serves.
I feel we ought to extrapolate from the code that if the SomethingManager doesn’t serve in the code it also doesn’t serve in the culture.
>Каким это образом дейтТаймПровайдер стал сервис локатором?
Таким, что я отвечал на две разные темы. С друг другом не связанные.
Ну окей.
Не понятно зачем ты вообще тогда "резолверы" упомянул.
В общем, у меня мнение, что провайдер - ок. И означает фектори, которая создает что-то очень конкретное или вообще не создает, а только дает.
Менеджер - да, год обжект. Как правило содержит почти всю логику, связанную с обьектом и взаимодействие с репозиторием.
>Не понятно зачем ты
Потому что я отвечал на стену текста.
>В общем, у меня мнение, что провайдер - ок.
Что делает UrlProvider или StringProvider?
>содержит почти всю логику, связанную с обьектом и взаимодействие с репозиторием
Кстати не всегда плохая практика на самом деле.
Банально. Давай преставим что тебе нужно сделать микросервис для интеграции вашей системы с внешней. По сути задача: есть внешнее апи. Есть ваш микрорсервис в котором нужны данные из внешней системы, но они представлены немного в другом виде. Нужно сделать микросервис, который по cron'у - запрашивать данные из внешней системы, если нашел новые - конвертировать их в объекты пригодные для уже вашего домена и сохранять уже у вас.
Ты можешь конечно сделать:
CronExpression
CronTrigger
ExternalApiHttpClient
NewDataChecker
Mapper
InternalApiHttpClient
А можешь сделать один класс IntegrationDaemon и в нем все это делать. А наружу вытащить только методы Start, Stop и Options. И поддерживать такой код будет значительно легче, чем то что ты мог наделать вот тем вот пиздецом ООПшным.
>>204152
Что делает User? Что делает Program? Что делает HttpClient? Что делает CPP_Compiler? Что делает AABB? Что делает AST? Что делает Lexer? Что делает Parser? Что делает ExpressionEvaluator?
Что говнокодер там написал - то они и делают. Охуеть. Да? Внезапно.
>Охуеть. Да? Внезапно.
Ну ты обосрался, потому что на вопрос не можешь ответить и пошел вилять жопой второй раз. Внезапно, да.
Потому что это имена классов и без контекста классы - могут делать что угодно. Как и любой другой класс, у которого ты знаешь только имя.
Point - хорошее имя.
Однако, в одном случае это точка в математическом смысле и хранит в себе координаты, плюс в зависимости от того богатая или анемичная у нас модель - может содержать в себе логику по всяким операциям с точкой, еще и в зависимости от домена там может быть точка на двумерной плоскости, в трехмерном пространстве или в n-мерном пространсте, если мы какие-то математические штуки пишем.
А в другом случае - это лексема при парсинге.
А в третьем - точка как символ в тексте.
И во всех случаях это имя нормальное, но просто увидев его, не видя хотя бы интерфейса - ты не скажешь, что это за Point.
>ДейтТайм.Ноу
Не понимаю таких людей. Раскладку сменить лапки болят? Почему читатель (коих много, а писатель всегда один) должен тратить лишнее время на то, чтобы понять что ты там имел в виду?
>Кстати не всегда плохая практика на самом деле.
Потом классы на 9000 строк. Я тут только пару строчек добавлю.
>который по cron'у
Quartz или FluentScheduler: Job (Execute) + Scheduler (Start/Stop). Без CronExpression, CronTrigger, IntegrationDaemon. Mapper - это что, файл для всех маппингов на еще 9000 строк кода?
>ExternalApiHttpClient
>InternalApiHttpClient
Ага, SuperInternalApiHttpClient. Я не собираюсь дублировать модели, хардкодить ссылки и обрабатывать сериализацию. Rpc можно давно сделать даже из Http через OpenAPI.
>NewDataChecker
NewDataValidator
>наделать вот тем вот пиздецом ООПшным
Я не предлагал добавлять, только удалять. Меня бы уже на третье дублирование заебало копи-пастить, второе еще могу стерпеть.
>>204203
Зачем тогда предлагаешь добавлять бесполезные суффиксы по типу Provider? Если сложно придумать уникальное название, так и скажи.
Касательно DateTime все еще не убедил. Это такое минное поле, в которое лучше не лезть. Чтобы потом не плодить UtcNow/Now на Offset, TimeZone, TimeSpan, Epoch. И не был такой соблазн добавить в этот Provider еще чего, да побольше. DateTime лучше выкинуть из проекта как и идею написать на него Provider.
>- ServerTimeImpl - удали эту херь и перепиши код таким образом, чтобы она не понадобилась
Вот за такой совет тебе надо запретить приближаться к исходникам ближе чем на 300 метров. Другое дело, что не надо изобретать велосипед и взять NodaTime.
>Что делает User
Срет невалидными данными в мое прекрасное творение.
>Что делает Program
Моя - делает заебись. Остальные делают говно.
>Что делает HttpClient
Клиент? Увожаемый человек. А сколько сотыг он платит?
>Что делает CPP_Compiler
Удалено по требованию г-на майора
Умеет нормально работать со временем ¯\_(ツ)_/¯
А то пориджи сначала засирают код с DateTime.Now/DateTime.UtcNow, а потом узнают, что мир оказывается живет не только в разных часовых поясах, но и по разным календарям.
Пример какой-то?
Не знаю, ни разу не нужны были "разные календари".
По сути DateTime.UtcNow хватало на беке, больше дрочи с датами на фронте.
Ну если нужно только зафиксировать момент, то utc хватает. Но все равно нужен интерфейс часов, а не дергать статические классы. А то потом тестик написать придется, который проверит поведение в новогоднюю ночь, а если все прибито к DateTime.Now, то такой тест можно запустить только раз в год (ну или там вот такое проверить https://ru.wikipedia.org/wiki/Дополнительная_секунда).
Даже майки уже начинают о чем-то догадываться и накостылили DateOnly/TimeOnly и используют пик
Да понятно, что инжектить надо не о том разговор.
ЧТо это за костыль на пике? Они округляют, что ли? Типа быстрее математических операций?
За доп секунду не понял. Ну стандартный дейтТайм учтет же ее? Ну да и норм.
https://stackoverflow.com/a/55993613
А не, не будет. Круглые секунды так не получатся.
https://github.com/jasontaylordev/CleanArchitecture/tree/main/src/Application/Common/Interfaces
> в примере с чистой архитектурой
Открыл рандомный файл и проиграл (https://github.com/jasontaylordev/CleanArchitecture/blob/main/src/Domain/ValueObjects/Colour.cs )
-пустой статический конструктор
-пустой приватный конструктор, который не используется
-сначала создается объект, потом валидируется параметр для его создания
Челу явно платят за количество написанных строк.
Иди блядь матчасть изучай
https://www.jetbrains.com/help/resharper/EmptyConstructor.html
+ пустой приватный шоб интсанс создать извне низзя было
Может ты сначала изучишь что-нибудь? Если удалить пустой приватный без параметров, а оставить приватный с параметрами кто извне сможет создать инстанс?
Где, там где в инициализаторе сразу задается свойство, для установки которого есть конструктор? При том, что состояние с кодом налл там явно невалидное.
И нахуя ты скинул ссылку на синглтон, если в коде фабричные методы, которые создают разные инстансы?
Может мне вообще сейчас все проперти начать оправдывать и филды юзать?
>>204853
>И нахуя ты скинул ссылку на синглтон, если в коде фабричные методы, которые создают разные инстансы?
Похуй там поясняется зачем приватный конструктор. Чел боится, что его проперти инициализирются раньше чем надо.
Вообще, мне больше начальный вопрос интересует:
Почему интрфейсы в Application слое? Разве не должны быть в Domain?
>Может мне вообще сейчас все проперти начать оправдывать и филды юзать?
Что? Ты мне скажи зачем давать возможность перевести состояние класса в невалидеое, если можно не давать? Напомню, что проперти тоже может быть ридонли.
>>204857
>там поясняется зачем приватный конструктор
Только это не имеет отношения к коду в котором нет ни синглтона ни ленивой инициализации.
>>204857
>Почему интрфейсы в Application слое
Чел не стесняется говнокодить, в примере-эталон, а ты такие вопросы задаёшь. Но вообще, интерфейсы объявляет тот, кто их будет использовать (ну или посредник), но не тот, кто их реализует.
>Что? Ты мне скажи зачем давать возможность перевести состояние класса в невалидеое, если можно не давать? Напомню, что проперти тоже может быть ридонли.
Ну внутри класса - делай шо хочешь, паблик From(string code) он проверяет. Инстанс создает, наверное, чтобы не хранить кода в отделных стрингах.
Чего ты доебался я не понимаю.
>Но вообще, интерфейсы объявляет тот, кто их будет использовать (ну или посредник), но не тот, кто их реализует.
Так где их надо было засовывать, в Домейн таки?
>Ну внутри класса - делай шо хочешь
Ну уж нет. Если что-то может пойти не так оно пойдет не так. Не, я понимаю это демо, где-то переупростил, где-то переусложнил чтобы что-то показать. Но тут он выдал хуйню ради нихуя.
>чтобы не хранить кода в отделных стрингах
И не надо (пик). Я же говорю, чел просто раздул класс, наверно для солидности или чтоб внимание отвлечь.
>Так где их надо было засовывать
ХЗ, говорю же, проиграл на первом же файле.
Создай ишью на гитхабе, пусть автор или кто знаком с проектом пояснит. Вроде там движуха какая-то есть.
Замержил - удаляй.
Так ты мержи без фф, а ветку удаляй. Ветка это же всего лишь ссылка на коммит - можно удалять, можно создавать из любой точки.
Точно, спасибки!
https://www.ecma-international.org/publications-and-standards/standards/ecma-334/
Какое же гугл 2021 говно, охуеть просто.
а зачем там ваил?
Это копия, сохраненная 14 июня 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.