Вы видите копию треда, сохраненную 4 августа 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
Чтобы не потерялось.
Пытаемся понять как на блазоре скачивать большие (10-30 гб) файлы с сервера
Не проще передать ссылку на файл, чтобы браузер сам скачал? Т.е. элементарно создается тег:
<a href="ссылка">Скачать бесплатно и без СМС</a>
Так в любом случае это ссылка и браузер скачивает, минуя браузер ты никак не скачаешь, вопрос в том как это должно быть имплементировано в самом блазор сервере
Авалонию не предлагать!
Пытаюсь в МВВМ, хочу сделать записную книжку с тэгами.
Тут только модели.
Какой из двух вариантов будет лучше? Написал минимально, для примера.
Ну и я почти ничего не умею, так что о всяких там командах, сервисах, вьюмоделях и всём остальном пока ещё почти не думал.
Смог формализовать свои требования более точно: Нужна поддержка wpf/gtk/qt. Остальное не нужно.
инопланетная система контроля версий для инопланетян
прочитать заметки "что нового" в языках новых версий.
>Как потом догнать оставшиеся версии?
C#8
- индексы и диапазоны - удобная штука, пользуюсь
- nullable eference types - спорная штука
- дефолтная реализация в интерфейсах - многие до сих пор не понимают нахуя
- pattern matching - опять что-то у функциональщиков спиздили, х.з., что не разбирался.
Это в принципе все.
Че там в девятом, я х.з. не трогал еще.
>Че там в девятом, я х.з. не трогал еще.
Тебя в заложниках что ли держат, заставляют использовать только старье?
Это нормальная практика или я ебанько можно более лучше? Полчаса пытался понять почему биндинг не работает у альфы
Мне вообще глубочайше похую что там нового выходит, максимально допизды на изменения в девятом и тридцать девятом сишарпе. Когда вижу восторженные восклицания как у тебя - искренне недоумеваю как это может кого-то интересовать. Иногда из-за этого мне кажется что я ненастоящий погромист.
Не для срача, просто наблюдение насколько разные люди в индустрии.
> MAUI
Тупое говно тупого говна.
Тысячи мусорных файлов-конфигов-манифестов в хелловорлдовом проекте. Я как увидел, аж в кресла встал от охуевания. Невозможно передать степень моего отвращения к этой параше.
Я хочу такой UI-фреймворк, чтобы его хеллоуворлд состоял из нескольких строк в единственном шарп-файле.
1. dotnet install blablaframework
2.
using blabla;
void main(){
var mainform = new blablaform() { Text = "Hello World" };
var app = new blablaapp();
app.run(mainform);
}
И всё, блять! Ничего лишнего. Ни манифестов. Ни хмл. Но, если я захочу комплексное приложение, пусть мне будет доступен сериализатор искаропки.
readonly State<int> count = 0;
[Body]
View body() => new StackLayout
{
new Label("Welcome to .NET MAUI!"),
new Button(
() => $"You clicked {count} times.",
() => count.Value ++)
)
};
попытка сделать как в флютер, жетпак композе, свифт комбине?
Выглядит похоже (намек на MVU) но чет слабенько
Хз, мидлом в Майкрософте или в НАСА.
Ну на мобиле (compose) такое мне нра (тем более с мощным синтаксисом котлина)
Но на десктопе такое тяжеловато работает и без таблиц уныло
На сколько у C# всё плохо с мобильной разработкой?
Есть тут в треде кто-нибудь, щупавший Bluetooth? Очень сложно?
А оно и просто сработало.
На хамарине более менее. Чекни например xamarin-bluetooth-le. Можно работать из натива (в формсах тоже), будет все +- как в жаве
ну например у меня есть класса
у нем дохулиелярд методов, я хочу разбить их в отдельные папочки но при это что бы они все еще были частью этого класса
то-есть мне нужно как бы папочку внутри класса
Спасибо большое!
А я не могу папочку назвать так же как класс?
И это вообще как с точки зрения производительности иметь класс с большим количеством статических методов в нем?
Я переживаю что каждое маленькое обращение в базу (а они все в одном классе) будет расчехлять огромный статичкский класс который будет долго инициализироваться
>И это вообще как с точки зрения производительности иметь класс с большим количеством статических методов в нем?
>Я переживаю что каждое маленькое обращение в базу (а они все в одном классе) будет расчехлять огромный статичкский класс который будет долго инициализироваться
Статические классы только один раз инициализируются, так что с производительностью проблем не будет. Но за такой говнокод тебя выебут на проекте, вообще не SOLIDно
>очередной перекат
>очередная шапка с .NET 5 который даже не LTS
Не заебало старье постить, деды?
Вот будет следующий перекат - тогда и заживём.
Открыть вакансии прочитать что требуют.
Нужно прислать пример идеального кода, который максимально эффективно сплавляется с конкретной задачей. Просьба в начале указать цель, далее сам образец кода и в конце краткое пояснение, почему он подходит :)
Страшная хуйня пиздец, на что это тест? На софт скилы?
Я бы отослал HelloWorld.cs и хуй забил на такую контору.
Если они так тестовые задания ставят, то представь какой пиздец у них твориться при постановке реальных боевых задач.
>на что это тест?
Если серьезно, то это тест на умение предугадать хотелки заказчика по минимальным вводным и реализовать их так, чтобы он остался доволен.
Если ты собеседуешься на какого-нибудь боевого аналитика, массирующего простату бизнеса, то вперед.
Если же твоя цель стать разрабом работающим по нормальному ТЗ, то нахуй.
Дак шапку никто не обновляет, поэтому при перекатах используется та, что есть.
Делаешь публишь, копируешь папки на линукс, потом dotnet zhopa.dll
Как думаете я правильно мыслю и действительно нихуя не умею и если хочу развиваться, то надо менять работу? Или может на самом деле все так же работают? Знают пару технологий, которые использует их контора и всё?
>Как думаете я правильно мыслю и действительно нихуя не умею и если хочу развиваться, то надо менять работу?
Проверяется просто. Составляешь резюме с описанием тех своих скилов в которых уверен и выкладываешь. Только именно честных скилов, которые умеешь и могешь, а не те которых просто касался или слышал о них.
А потом смотришь сколько и с какими предложениями по работе тебе будут звонить.
С учетом нынешних реалий, если твои навыки чего-то стоят и с учетом 3-х летнего опыта, тебе в норме должны поступать предложения на мидла и выше. Вот по качеству этих предложений можешь и рассуждать о том насколько у тебя все плохо или хорошо.
@echo off
for I in ("WebStorm", "IntelliJ", "CLion", "Rider", "GoLand", "PhpStorm", "Resharper", "PyCharm") do (
for /d a in ("%USERPROFILE%\.I*") do (
rd /s /q "a/config/eval"
del /q "%%a\config\options\other.xml"
)
)
rmdir /s /q "%APPDATA%\JetBrains"
reg delete "HKEY_CURRENT_USER\Software\JavaSoft" /f
Я читал про солид, много теоретических изложений но что это означает на практике? вот взять те же интерфейсы без которых 2 из 4 принципов солид вообще не мыслимы. НО если разобраться что такое интерфейс? это просто список методов которые нужно имплементировать
ВСЕ!
Ну и зачем они нужны? я не понимаю зачем нужно учить все это если по сути это просто списочек, аля документация но в коде.
а вообще если статические классы инициализируются 1 раз, хорошо кешируются и прогнозируются, если не плодят инстансы и мусор тогда с точки зрения производительности они вдрызг выигрывают у солид кода.
а главная задача программиста делать код который работает просто быстро и исправно, а не который выглядит красиво.
>а главная задача программиста делать код который работает просто быстро и исправно, а не который выглядит красиво.
Эх вкатусик, сколько открытий тебя ждет впереди
Этот способ разве не пофиксили осенью прошлого года? Теперь, чтобы получить триал, надо регистрироваться на сайте жидбрейнс и срок уже отсчитывается на аккаунте, а не локально на твоём пека.
Поставил на чистую систему и пишет, что даже пробные 30 дней только после регистрации.
Послать нахуй, или всё же они правы?
>если статические классы инициализируются 1 раз, хорошо кешируются и прогнозируются
как то читал что статический конструктор влияет на производительность. А так статическому классу чего быть медленным.
>это если по сути это просто списочек, аля документация но в коде
такое же значение, как список заповедей.
> делать код который работает просто быстро и исправно, а не который выглядит красиво.
код, который легко сопровождается. Говнокод тоже работает быстро и исправно, а времени на модификацию в разы больше, да и хрупкость дикая.
Лично я бы поискал других. Более менее крупные компании мониторил. Нахуй эти стартапы. Еще и за бесплатно работать. Небось никакой трудовой договор не будут составлять.
Я бы послал бы их нахер.
>Ну и зачем они нужны?
Интерфейс это в первую очередь контракт, через который одна часть приложения взаимодействует с другой. Он уменьшает связанность и позволяет хорошо пилить приложение на слои и модули, с легкой взаимозаменяемостью компонентов.
ТЗ это техническое задание. Вот уже сразу можно сказать что ты долбоеб и я бы тебя даже бесплатно не взял. Но всё равно отвечу по существу: если джун и нихуя не умеешь, то делай тестовое и не выебывайся, это будет полезно.
Чему угодно
Я бы как-то так делал...
Ну и я не понял логики. Типа зачем тегу знать про запись? Тег же это более широкая фигня. Если ты типа хочешь организовать доступ из тега к записи, то проще взять БД, там эта вот фигня за тебя реализована механизмом ключей, бери пользуйся.
Поделись тестовым.
Хочу посмотреть что они хотят то.
А на каких условиях работа то? Пока бесплатно а потом если выстрелит пошлем тебя нахуй?
>Пока бесплатно а потом если выстрелит пошлем тебя нахуй?
Пока бесплатно а потом иди нахуй (без если выстрелит)
мимо другой ананас
1a. Необходимо разработать БД, которая позволит хранить магазины и товары магазинов.
Описание сущностей:
Магазин: наименование, адрес, режим работы.
Товар: название, описание.
1b. Нужно сделать страницу, которая будет выводить список магазинов в виде таблицы.
В каждой строчке должна быть ссылка на товары магазина. По нажатии на ссылку - отображение товаров магазина в виде таблицы.
1с. На странице товаров магазина, должна быть возможность добавления, редактирования и удаления товаров открытого магазина.
Требования к технологиям:
1. ASP.NET / ASP.NET Core
2. UI – MVC или Angular(или любой другой UI фреймворк) + WebAPI
3. MiddleTier – ORM EF, Repository.
4. Необходимо использовать DI (любой IoC-контейнер –ninject, autofac, нативный asp.net core и тд)
5. DB – MSSQLServer
При первом обращении к базе она должна автоматически создаваться и заполняться тестовыми данными – несколько магазинов и несколько товаров в каждом из них.
>А на каких условиях работа то?
Хуй его знает, я месяц лениво пилил тз, а потом призадумался самое время, да что из меня пытаются делать пикрил, лол.
>2. UI – MVC или Angular(или любой другой UI фреймворк) + WebAPI
Поясните вот за юту строчку.
WebAPI это же бек, а на фронте ну жс или ангулар или вью. А MVC это же патерн. По сути штемель страница. Ну вот это вот все, делаем запрос на страницу страница обращается к контролеру контроллер возвращает модель и формируется страница. Просто Не пойму почему в этой строке приводится MVC как аналог ангулару.
Все зависит от подхода. Если бы я на похуях, типа чтобы просто подтвердить что таки могу что-то там, делал - это можно сделать за 3-4 часа, если делать нормально, с нормальным фронтом, анимашки там красивые добавить, пытаться в интересный дизайн, апи сделать не минимальное, а чтобы вся хуйня с ролями-клеймами-токенами была, запилить докер-композ, какой-то пайплайн для CI/CD заложить ну и тесты прикрутить - работы на неделю точно, причем фуллтайм.
> интерфейс? это просто список методов которые нужно имплементировать
> ВСЕ!
> Ну и зачем они нужны?
Лично для меня их главное удобство в том, что ты можешь в одном массиве объединить разные объекты, но реализующие один интерфейс. Объясню, как водится на собачках. Собаки наследуются от псовых, человечки наследуются от приматов. Псовые и приматы наследуются от млекопитающих. Казалось бы, ты можешь создать массив млекопитающих и без задней мысли добавлять в него собачек и человечков. Но нет, это не СОЛИДно. Какой-нибудь хацкер напихает тебе в массив дельфинов и антилоп, например, и твоя софтина ляжет.
И тут на сцену выходят интерфейсы. Помимо наследования у собачек и человечков есть реализации. Лично ты, как автор софта, решаешь, что наследуется, а что реализуется. И вот тебе нужен список чешущихся. Ты делаешь интерфейс ИЧешущийся, и реализуешь его собачками и человечками. И затем ты создаёшь массив чешущихся и решаешь свою задачу. Это солидно и минималистично. И кроме того, если ты добавишь реализацию чешущихся рептилий, тебе не придётся переделывать код в уже готовых модулях. А тебе пришлось бы переделывать, потому что массив млекопитающих тебе пришлось бы переделать на массив животных, чтобы в него можно было включать рептилий. А хацкер смог бы тебе в этот массив ещё и черепах накидать, хотя ты думал лишь о крокодилах.
Очень заумные и красивые слова, тем не мене это все еще списочек, совершенно бесполезный по факту. код можно так же написать и без него
а почему точно так же нельзя делать без интерфейсов
МлекопитающиеМенеджер => возвратитьЧешущийся() и внутри один хер такая же реализация. точно так же работает только не надо читать тонны литературы
И что ты написал? Не солидно! ты же понимаешь что мой бугурт именно в том что и состоит что солид существует сам по себе и для себя. код должен быть солидным потому что.... потому что код должен быть солидным, а по факту под этим ничего нет, пустые слова.
>код можно так же написать и без него
Да не вопрос - пиши, никто не запрещает. Только вот когда у тебя приложение дорастет до весомого уровня и ты поебешься с заменой одних реализации на другие - тогда поймешь зачем нужны интерфейсы.
>солид существует сам по себе и для себя
Нет. Основной смысл существования солида, чтобы ты открыл чужой код или свой собственный, но который делал очень давно и сразу начал с ним работать, не пытаясь мучительно понять/вспомнить, что тут и зачем. Для этого и существуют все эти правила и абстракции.
Например принцип SRP позволяет тебе спокойно брать любой модуль и что-то в нем менять, зная что у тебя не посыпется весь код, т.к. у тебя будет только одна причина для того чтобы этот кусок кода изменять. Если у тебя есть интерфейсы, то ты легко можешь менять одни модули на другие, не парясь чем и как они друг от друга отличаются.
Например нужно тебе в приложении заменить тип баз данных. Если у тебя нормально все разбито по слоям и спрятано за интерфейсы, ты просто выкидываешь один провайдер БД и подставляешь вместо него другой. И тебе не нужно будет лезть по всему коду и выискивать где и как у тебя идет взаимодействие с БД. И так во всем.
>Нет. Основной смысл существования солида, чтобы ты открыл чужой код или свой собственный, но который делал очень давно и сразу начал с ним работать, не пытаясь мучительно понять/вспомнить, что тут и зачем. Для этого и существуют все эти правила и абстракции.
открываешь класс, понимаешь что не понимаешь ничего, открываешь документацию.
Документацию есть всегда, зачем делать одну и ту же работу 2 раза!?
>Документацию есть всегда, зачем делать одну и ту же работу 2 раза!?
О да, в современном-то мире IT-разработки?
Где на каждом углу ебучий скрам с ебучим эджайлом? Одним из основных принципов которого является "Похуй как работающий код важнее документации, поэтому ебашим, а доки когда-нибудь потом, может быть напишем"
Тебе повезет если хотя бы будет брошюрка о том как проект должен выглядеть со стороны заказчика.
Хорошо спроектированные системы представляются мне проволочными кубами, имеющими чёткие грани, определённые архитектурой и ровные линии, реализованные грамотным кодом. Если необходимо внести в них изменение, в нужном месте проволочный каркас расплетается, добавляются новые детали, после чего всё снова собирается. Такие системы жёсткие, в них несложно разобраться и структура видна практически сразу.
Но, к сожалению, есть и другие. Боюсь, что их — большинство. Эти системы похожи на бесформенный ком пластилина. Сначала создаётся маленький шарик базовой функциональности. Возможно, где-то в глубине его спрятан проволочный каркас грамотной и продуманной архитектуры. Но потом всё меняется. Каждая новая функция, каждое новое исправление и модификация делается наспех, по принципу «лишь бы работало». Каждый раз, внося такое исправление, мы берём комок пластилина и прилепляем сбоку к уже существующей системе.
Таких исправлений может быть десяток, сотня, а то и тысяча. Куски пластилина лепятся хаотично, они разного размера и формы, их много. С виду всё продолжает работать, добавляются новые функции, исправляются ошибки, но изнутри система стремительно усложняется и превращается в бесформенный комок, состоящий из отдельных разноцветных кусков.
И вот, в какой-то момент, появляется задача, которая влияет на несколько составных частей системы. Привычным движением мы лепим очередной комок… Но вдруг осознаём, что у нас перестала работать какая-то совершенно другая функция. Мы исправляем её, налепив очередной кусок, и получаем ошибки ещё в двух. И это – цепная реакция.
В лучшем случае за ней следует глобальный, сложный и очень дорогой рефакторинг, который уничтожает всякие надежды на поставку системы вовремя и в рамках бюджета. В худшем – система поставляется «как есть», с огромным количеством ошибок и абсолютной невозможностью её расширения или модификации. За редким исключением, такой продукт проваливается на рынке, на руководителя (на мой взгляд, вполне заслуженно) накладывается епитимья, после чего он отправляется в изгнание.
Хорошо спроектированные системы представляются мне проволочными кубами, имеющими чёткие грани, определённые архитектурой и ровные линии, реализованные грамотным кодом. Если необходимо внести в них изменение, в нужном месте проволочный каркас расплетается, добавляются новые детали, после чего всё снова собирается. Такие системы жёсткие, в них несложно разобраться и структура видна практически сразу.
Но, к сожалению, есть и другие. Боюсь, что их — большинство. Эти системы похожи на бесформенный ком пластилина. Сначала создаётся маленький шарик базовой функциональности. Возможно, где-то в глубине его спрятан проволочный каркас грамотной и продуманной архитектуры. Но потом всё меняется. Каждая новая функция, каждое новое исправление и модификация делается наспех, по принципу «лишь бы работало». Каждый раз, внося такое исправление, мы берём комок пластилина и прилепляем сбоку к уже существующей системе.
Таких исправлений может быть десяток, сотня, а то и тысяча. Куски пластилина лепятся хаотично, они разного размера и формы, их много. С виду всё продолжает работать, добавляются новые функции, исправляются ошибки, но изнутри система стремительно усложняется и превращается в бесформенный комок, состоящий из отдельных разноцветных кусков.
И вот, в какой-то момент, появляется задача, которая влияет на несколько составных частей системы. Привычным движением мы лепим очередной комок… Но вдруг осознаём, что у нас перестала работать какая-то совершенно другая функция. Мы исправляем её, налепив очередной кусок, и получаем ошибки ещё в двух. И это – цепная реакция.
В лучшем случае за ней следует глобальный, сложный и очень дорогой рефакторинг, который уничтожает всякие надежды на поставку системы вовремя и в рамках бюджета. В худшем – система поставляется «как есть», с огромным количеством ошибок и абсолютной невозможностью её расширения или модификации. За редким исключением, такой продукт проваливается на рынке, на руководителя (на мой взгляд, вполне заслуженно) накладывается епитимья, после чего он отправляется в изгнание.
Может ли быть то связано с тем, что не знаю ни одного js фреймворка, что нет опыта в CI\CD, облачных технологиях, не особо силен в юнит тестах, а так же во всяких Rabbit, Signal и тд?
Я такие пасты уже 1000 раз читал, это звучит красиво, но НА ПРАКТИКЕ ТО ЧТО? НА ПРАКТИКЕ!
Дошло до смешного, посмотрите на смдн, на их же репозитории из документаций, да та половина кода не рабочего потому что "ой что-то обновилось, а переработать не получается"
Вот только вчера смотрел на пример блазора клиент-сервер в котором поломался индентити в сигналР. ну и где ваши кубики если у вас сферические примеры в вакууме ломаются при обновлении фремворка.
а если я не прав, так ПРИМЕР покажите! ПРИМЕР! я не хочу слушать пространные речи о том как офигенно работать со структурированным, блочным, инкапсулированым кодом.
Приятно спору нет, только причем тут ваш интерфейс? Это гребаный списочек. И с интерейсом можно говно написать. И без интерфейсов можно сделать конфетку
Вот в с++ никаких интерфейсов вообще нет, и что? Теперь любой код в с++ это говнокод? НЕТ! Потому что ровно те же цели можно добиться другими более утилитарными способами.
Вот таким должно быть программирование, не хипстурским пространным и излишне усложненным.
Вот так я думаю.
https://docs.microsoft.com/en-us/dotnet/api/android.bluetooth.le.bluetoothleadvertiser?view=xamarin-android-sdk-12
к проекту на Xamarin Forms? Если это возможно вобще.
Мне надо вещать имя устройства по Bluetooth LE.
C#, PL/SQL, ASP/NET CORE MVC/API
ORACLE, PostqreSql, MsSql
HTML/CSS/JS/Bootstrap
Плюс три года коммерческой разработки. Да, легаси, поэтому у нас нет всяких модных штучек. Неужели этих знаний не хватит для устройства на работу?
>js фреймворка
Да. В вебе на C# фронт сейчас никто ничего не делает почти. То что было раньше уже почти умерло, то что есть нового еще очень сырое. Сколько я не видел, обычно C# идет в связке с чем-нибудь вроде Reacta или еще чего-то JS-сного. Т.е. ты можешь не знать досконально всех кишок, но написать простой компонент, подтянуть данные с бэка, отправить запрос и т.д. по мелочи должен уметь.
>>336247
>что нет опыта в CI\CD
Ну блин, это уже скоро станет обязательным как знание гита. Как минимум дернуть контейнер и запустить его, или настроить сборку в гитлабе нужно уметь.
>>336247
>облачных технологиях
А вот это сейчас разрабу нахрен не нужно. Это проблемы девопса.
>>336247
>в юнит тестах
Это как с манной кашей в детстве. Ты можешь их не любить и не использовать, но знать и применять обязан.
>>336247
>так же во всяких Rabbit, Signal
В большинстве случаев это выглядит, так. Приходишь на проект "О, у нас тут RabbitMQ мы его вот только внедрили/внедряем. Все будет круто и быстро". Через полгода, "Не, чет не получилось. Нормально настроить не получилось. Чет все медленно и падает. Ну его нахуй - будем по старинке анус БД дергать".
Все любят про это спрашивать даже не представляя нахрен зачем оно им надо.
Итого. Потрать 1...2 месяца на изучение JS-фреймворка. Несколько дней на CI/CD. И неделю...две на юнит тесты.
>Вот в с++ никаких интерфейсов вообще нет, и что?
Там есть абстрактные классы и множественное наследование, что по сути то же самое. И их именно в качестве интерфейсов все и юзают.
>НА ПРАКТИКЕ ТО ЧТО? НА ПРАКТИКЕ
а что на практике? на практике либо ты продумываешь и инкапсулируешь модули, либо получаешь гемор в виде каскадных багов при росте проекта выше определенной величины хаоса.
>И без интерфейсов можно сделать конфетку
можно конечно. ведь с интерфейсами, но единственной! реализации для него = без интерфейсов вообще.
(я сейчас не говорю про задачи, где без интерфейсов не решается в принципе)
>если у вас сферические примеры в вакууме ломаются при обновлении фремворка.
это ломаются реализации. интерфейс позволяет заменить реализацию, но не гарантирует что эта реализация не будет кривой.
Я повторюсь - если у тебя единственная реализация для каждого интерфейса, весь код твой, не используются тесты, ты кодишь один, проект малый или мало-средний, то никакой проблемы и нет от того, что ты перелопатишь половину кода (компилятор поможет в этом, а другой разработчик шею не намылит за то, что ты заставил его разгребать дикий конфликт)
Конечно можно и в больших проектах так жить, нужно только грамотно структурировать код....но это то, о чем и идет речь. Интерфейсы же помогают отгораживаться пряча детали.
>а если я не прав, так ПРИМЕР покажите! ПРИМЕР!
Ну если у тебя несколько различных классов с частичным совпадающим контрактом и тебе нужно их использоать с этим контрактом, то тут без интерфейсов само собой никуда. Абстрактные классы нельзя - нет множественного наследования.
Но такое и так понятно, что тут нужны интерфейсы или придется костылить знатно
Далее, если у тебя класс принимает реализацию, а не интерфейс, то в случае замены класса на другой ты вынужден будешь поменять все эти классы и все пути передачи этого класса без интерфейса.
Не особо беда, если не используются тесты (а это очевидно) и нет кого-то, кому ты сделал конфликт в CVS (либо он не знает где ты живешь)))
Беда будет если у тебя не тупо поменялся один класс на другой, а класс раздербанился на несколько, был частично заменен частями из других старых классов и тогда тебя ждет увлекательное путешествие по коду с целью почиинить все что поломалось. И, в зависимости от ситуации, это может быть очень много изменений (контракт похерился, может быть появились циклические зависимости и так далее).
И все это вместо того чтобы просто поменять в одном месте реализацию и сделать пару адаптеров если нужно.
Идем далее. Расширяемость. Вот тот же асп.нет кор (и либы вида Microsoft.Extensions.) активно юзает DI, при этом имеют единственную (дефолтную) реализацию интерфейсов.
Это позволяет расширять. Например, когда я захочу переделать убогую систему виджетов асп на нормальные компоненты, то я не буду делать форк, а просто сделаю свою реализацию нужных частей и зарегистрирую в services.Add и все заработает потому что асп дает такую возможность расширять. Не используй он интерфейсы - мне пришлось бы делать форк асп и тучи библиотек.
>НА ПРАКТИКЕ ТО ЧТО? НА ПРАКТИКЕ
а что на практике? на практике либо ты продумываешь и инкапсулируешь модули, либо получаешь гемор в виде каскадных багов при росте проекта выше определенной величины хаоса.
>И без интерфейсов можно сделать конфетку
можно конечно. ведь с интерфейсами, но единственной! реализации для него = без интерфейсов вообще.
(я сейчас не говорю про задачи, где без интерфейсов не решается в принципе)
>если у вас сферические примеры в вакууме ломаются при обновлении фремворка.
это ломаются реализации. интерфейс позволяет заменить реализацию, но не гарантирует что эта реализация не будет кривой.
Я повторюсь - если у тебя единственная реализация для каждого интерфейса, весь код твой, не используются тесты, ты кодишь один, проект малый или мало-средний, то никакой проблемы и нет от того, что ты перелопатишь половину кода (компилятор поможет в этом, а другой разработчик шею не намылит за то, что ты заставил его разгребать дикий конфликт)
Конечно можно и в больших проектах так жить, нужно только грамотно структурировать код....но это то, о чем и идет речь. Интерфейсы же помогают отгораживаться пряча детали.
>а если я не прав, так ПРИМЕР покажите! ПРИМЕР!
Ну если у тебя несколько различных классов с частичным совпадающим контрактом и тебе нужно их использоать с этим контрактом, то тут без интерфейсов само собой никуда. Абстрактные классы нельзя - нет множественного наследования.
Но такое и так понятно, что тут нужны интерфейсы или придется костылить знатно
Далее, если у тебя класс принимает реализацию, а не интерфейс, то в случае замены класса на другой ты вынужден будешь поменять все эти классы и все пути передачи этого класса без интерфейса.
Не особо беда, если не используются тесты (а это очевидно) и нет кого-то, кому ты сделал конфликт в CVS (либо он не знает где ты живешь)))
Беда будет если у тебя не тупо поменялся один класс на другой, а класс раздербанился на несколько, был частично заменен частями из других старых классов и тогда тебя ждет увлекательное путешествие по коду с целью почиинить все что поломалось. И, в зависимости от ситуации, это может быть очень много изменений (контракт похерился, может быть появились циклические зависимости и так далее).
И все это вместо того чтобы просто поменять в одном месте реализацию и сделать пару адаптеров если нужно.
Идем далее. Расширяемость. Вот тот же асп.нет кор (и либы вида Microsoft.Extensions.) активно юзает DI, при этом имеют единственную (дефолтную) реализацию интерфейсов.
Это позволяет расширять. Например, когда я захочу переделать убогую систему виджетов асп на нормальные компоненты, то я не буду делать форк, а просто сделаю свою реализацию нужных частей и зарегистрирую в services.Add и все заработает потому что асп дает такую возможность расширять. Не используй он интерфейсы - мне пришлось бы делать форк асп и тучи библиотек.
ох уж этот парсер. звездочки превратил в курсив
судя по тому что я не понял это :
>Беда будет если у тебя не тупо поменялся один класс на другой, а класс раздербанился на несколько, был частично заменен частями из других старых классов и тогда тебя ждет увлекательное путешествие по коду с целью почиинить все что поломалось. И, в зависимости от ситуации, это может быть очень много изменений (контракт похерился, может быть появились циклические зависимости и так далее).
И все это вместо того чтобы просто поменять в одном месте реализацию и сделать пару адаптеров если нужно.
Я еще не дорос до Солида, а точнее до уровня на котором солид нужен, я и тесты не использую
Ну...суть солида - помогать писать код, который легче сопровождать и расширять, в котором при добавлении новой фичи пришлось бы модифицировать как можно меньше кусков кода, что минимизирует вероятность "каскадного распространения бага".
Но это не значит, что "нет солида значит хаос". И софт и задачи разные бывают - не каждая система разрастается и не каждая фича прямо так вредит предыдущему слепленному кому
Просто это "авось пронесет". Но это в пет проектах (или пишу какую то утилиту) понятно что там будет. А в реальных проектах постоянно меняются требования в рэндомную сторону и если заранее не подготовил систему к расширению и не сделал слабосвязанной, то получишь нагромождение костылей и в итоге технический долг тебя раздавит. А это грозит потерей денег, а то и крахом проекта.
Потому если подразумевается что проет будет расти, лучше сразу писать в слабосвязанном стиле. А потом привыкаешь и пишешь так всегда.
>>336450
я ж говорю - фломастеры. Я выбираю VS - из-за Diagnostic Tools и Xaml дизайнера (хоть я пишу хамл руками). Ну и возможность интеграции с TortoiseHG, а не использовать родную для IDE работу с CVS
Как вы его оплачиваете? Жидбрейнс же свалили в Прагу и делают вид, что иностранная фирма.
Чекни на рутрекере в теме райдера 2020.2.4, там вроде на новые версии в обсуждении есть кряки
Bump.
последний раз ломался тем же, чем и пишармы разные. После этого не смотрел. пишарм/рубимайн/пхпсторм обновились и продолжили работать. Значит и райдер должен
Нахуя нужен райдер, когда есть божественный Vim?
Вот серьезно. Хоть одну причину назови, зачем нормальному человеку - райдер.
2021.3.1 Update
Download this https://www38.zippyshare.com/v/Xvt9Ve3t/file.html
Add in vmoptions -javaagent:/path/to/ja-netfilter.jar=jetbrains Note: this is now automated if you run scripts/install.sh on Mac/Linux or install-current-user.vbs on Windows.
Open your Jetbrains IDE. Click Activate by licence server and type in https://jetbra.in
Should now be activated
Вот это вот
Как вы учили гит?
Поддерживает же. 2021.2.1 уже поддерживала
2021.3.1 это от декабря того 21 года, поддержка есть
Но работает все только при первом заходе на страницу или при обновлении по Ctrl+F5.
Если просто обновить по ф5 или перезайти на страницу - не удается получить доступ к сайту ERR_FAILED.
Проект суть дефолтный шаблон, ничего в роутингах или эппсеттингс не менял.
Гугол не помог, куда смотреть?
А зачем она там?
git cli использую
>Result является прямым наследником AnimeMangaIdBase
Но не наследником или базовым классом для TData.
Это как блядь у тебя и 2 типа int и string, они тоже являются наследниками типа object, попытайся скастить один в другой.
Если тебе станет легче, такое говно с промежуточным кастом пишут все. Частично от этого иногда спасает какой-нибудь DI в проекте.
>Гугол не помог, куда смотреть?
Ссылку не дашь, код не покажешь. И как тебе помогать?
Попробуй повторить мануал.
https://developers.cloudflare.com/pages/framework-guides/deploy-a-blazor-site/
Я не помошник, просто в тред заглянул посмотреть что там у шарпистов.
Ну тогда и мне, балбесу, заодно помогите :-(
VS Community
Xamarin
Вроде нашёл, что мне надо: https://github.com/xabre/xamarin-bluetooth-le/blob/master/Source/BLE.Server.Droid/BleServer.cs#L45
Пытаюсь подсунуть в MainPage.xaml.cs - борода.
ругается, что нет пространства имён:
using Android.Bluetooth;
using Android.Bluetooth.LE;
using Android.Content;
using Java.Util;
Пошарился по остальным файлам в проекте - указанные выше библиотеки (большая часть) есть в MainActivity.cs
Добавил их там - на не найденное пространство имён не ругается.
Что мне надо сделать, чтобы перенести участок кода и сделать его доступным в MainPage.xaml.cs?
Ссылка на говно-проект: https://drive.google.com/file/d/1Aolw3VryI6Wm1pSRDftFuNB1UXhYU0t0/view?usp=sharing
Гугл подсказывает async/await. Но как мне в процессе работы потока передать ему данные или команду прервать работу?
ну тот же принцип как и HostedService работает (да и вообще все на свете)
Создай класс в котором по нажити кнопки стартанешь вечный цикл и передай ему ConaellationToken или заведи метод Stop/Cancel(). Корми его данными в рэндомные моменты через обычные методы этого класса (а внутри можешь использовать Channel).
Для ожидания окончания заведи у него поле Task Completion которое закончится при выходе из цикла. Ну или сделай Async версии методов StopAsync/CancelAsync
Как больше нравится в общем
А если это процесс, то стартуешь процесс и у него есть Process.WaitForExitAsync(CancellationToken) чтобы можно было подписаться на ожидание окончания его работы.
Ну а кормить его данными - тут уже выбирай любимый метод IPC
Ну хз, я так и не понял, например, как мне выкачать в произвольную папку файлы проекта по состоянию на такую-то дату.
Он только изменения показывать может, а мне это нахуй не надо.
Я думал, что раз я пользуюсь гитом, то могу смело ебашить стрёмные изменения в мой петпроект, а если что-то пойдёт по пизде, всегда смогу откатиться назад. А как оказалось - нихуя (ну либо я тупой, не знаю консольных команд). Пришлось короче в этом гитхаб десктом ручками смотреть все изменения и ручками их вносить.
Но опять таки возможно я просто тупой.
>>337361
Короче, при любых реализациях избежать бесконечного цикла не удастся.
>Создай класс в котором по нажити кнопки стартанешь вечный цикл и передай ему ConaellationToken или заведи метод Stop/Cancel().
Ну я что-то подобное делал: цикл проверял поле, в котором была ссылка на значение. Только получалась фигня, когда значение могло меняться быстрее, чем это детектил цикл.
Щас по пробую реализовать через события.
циклы(очереди) - они везде. Не нужно их избегать.
>Щас по пробую реализовать через события.
не усложняй. В CancellationToken тоже есть подписка. Было бы что подписывать.
вот тебе прототипы на коленке
https://pastebin.com/C7qv02G6
в EnqueueDataAsync добавляются данные в очередь и в цикле они выгребаются.
Service1 - там стартуешь и отменяешь токеном, а где то подписываешься на Completion
Service2 - это наследник BackgroundService тот который IHostedService. Там просто соединяется StartAsync/StopAsync в один токен, чтобы самоу то же самое не делать в каждом классе (посмотри реализацию и поймешь)
Можно и Start/Stop + Completion
Да как угодно можно. Тут ничего сложного
Ты же на винде я думаю работаешь. Дергай TerminateThread и живи спокойно.
Не на винде, но интересно как из Thread получить то, с чем можно вызывать TerminateThread
>>337467
Но если серьезно, то другого "правильного" способа, кроме как использовать CancellationToken - виндобляди не предоставили, после отказа от Abort. Что поделать?
Можешь вот это посмотреть:
https://docs.microsoft.com/ru-ru/dotnet/api/microsoft.visualstudio.threading.threadingtools.withcancellation?view=visualstudiosdk-2022
Я пока что не тестил, но судя по описанию, оно должно работать +- как нужно.
>другого "правильного" способа,
есть такое. это беда. если вызываю что то такое тяжелое то никакого способа отменить
>оно должно работать +- как нужно.
не. это одна из реализаций метода WithCancellation для операций, что не принимают токен. Просто делается TaskCompletionSource для токена отмены и далее Task.WhenAny. Если сработает таска от токена, то выходим. Но основная таска продолжает работать ничего не зная ни про какую отмену
Ага разобрался. Нужно получить тредайди
Thread.BeginThreadAffinity();
_treadId = GetCurrentThreadId();
Thread.EndThreadAffinity();
и дальше можно абортить
IntPtr ptrThread = OpenThread(1, false, (uint)_tread);
TerminateThread(ptrThread, 1);
пригодится. жаль только винда
даже сделал себе класс хелпер для поддержки TPL
https://pastebin.com/bm6jFU1G
Кстати, наглядный пример неудобства что void не тип - приходится писать 2 реализации с дублированием кода для Task и Task<T>.
Был бы дефолтный Unit в фреймворке - сильно бы легче было.
не. дохлый номер
поток умирает, но Thread остается жить и если сделать GC.Collect(), то падает рантайм
Fatal error. Internal CLR error. (0x80131506)
> поток умирает
Я краем глаза прочёл "котик умирает" и подумал, что ты тот ебанутый попрошайка, что носится по всем разделам. Уже хотел отправлять persistent data по коду 0x80131506, но вовремя перечитал пост.
Dictionary DictionaryProperty = {"A" = SomeEnum.One, "B" = SomeEnum.Two, "C" = SomeEnum.One}
Т.е. вопрос в том, т.к. это свойство класса контроллера, оно ж будет создаваться при каждом запросе и не сильно ли такое повлияет на производительность? Словари не большие, их максимум будет 4 по 10 значений. Не ругайтесь сильно, позязя, я нуб и боюсь слепить совсем не производительное говно
Я был удивлён, что оказывается нельзя оставить абстрактной реализацию abstract static метода интерфейса в абстрактном классе.
Тебе трудно отвечать, потому что ты вопросы по дурацки задаешь. Создается впечатление, что ты базовые вещи не занаешь, при этом просишь специфичную для замарина и андроида хуйню.
Сформулируй нормально что тебе и где надо.
>>336328
Посмотри это https://medium.com/enigmamx/how-to-integrate-bluetooth-le-in-xamarin-forms-2dcdf974703a
Я замарин последний раз в 2018 трогал и в те времена блютуз мне был не особо нужен. Суть. Замарин - говно без задач. Хочешь что-то для мобилок писать - бери жаву либо котлин и делай как человек. Инструмент для задачи, а не задача для инструмента.
>Хочешь что-то для мобилок писать - бери жаву либо котлин и делай как человек
ага. а еще свифт и свифтуи или комбине, делов то )
>В чем проблема?
Вот этой идеи не хватало
>Делай словарь статичным и ридонли.
А вечный словарик в памяти не слишком много сожрёть?
Как бы при любом POST на контроллер с жсоном в теле происходит парсинг этого жсона на объекты. В чем твое отличается от этого?
О чем разговор вообще?
>О чем разговор вообще?
Нуууу, смотри. Дело такое, есть нечто стороннее на пыхе, которое кидает жиссон с массивом различных объектов с некоторыми пересекающимися полями (в частности там есть поле "Type"). Плюсом в жиссоне идет такая особенность как Price: "100" т.е. числительные в кавычках, стрингой. (собираюсь использовать [FromBody] и не уверен что оно автоматически сможет спарсить такое в кавычках в decimal). Планирую принимать массив общих объектов со всеми стринговыми полями (ибо не уверен что Price: "100" можно сразу в десимал спарсить) и потом в зависимости от значения в Type парсить с , т.е. принимается массив
CommonObject
{
string Type
string Price
string Property1
string Property2
string Property3
string Property4
}
и затем каждый общий тип в массиве мапится на
Object1
{
int TypeId
decimal Price
string Property1
string Property2
}
Object2
{
int TypeId
decimal Price
string Property3
string Property4
}
Object3
{
int TypeId
decimal Price
string Property1
string Property4
}
Причем даже значение string PropertyN из общего объекта не всегда точно равно string PropertyN в конкретном объекте.
В связи с чем есть план запилить словарики какие стринги из стороннего входящего объекта равны каким значениям моих внутренних объектов
>О чем разговор вообще?
А это вообще хороший план со словариками, так быстрее работать будет? И если да, то пусть лучше эти словарики создаются каждый раз при запросе (пока запросы планируются не слишком частыми, т.е. нагрузка так себе) или сделать их статичными и пусть висят в памяти всё время работы приложения
Вот
>О чем разговор вообще?
Нуууу, смотри. Дело такое, есть нечто стороннее на пыхе, которое кидает жиссон с массивом различных объектов с некоторыми пересекающимися полями (в частности там есть поле "Type"). Плюсом в жиссоне идет такая особенность как Price: "100" т.е. числительные в кавычках, стрингой. (собираюсь использовать [FromBody] и не уверен что оно автоматически сможет спарсить такое в кавычках в decimal). Планирую принимать массив общих объектов со всеми стринговыми полями (ибо не уверен что Price: "100" можно сразу в десимал спарсить) и потом в зависимости от значения в Type парсить с , т.е. принимается массив
CommonObject
{
string Type
string Price
string Property1
string Property2
string Property3
string Property4
}
и затем каждый общий тип в массиве мапится на
Object1
{
int TypeId
decimal Price
string Property1
string Property2
}
Object2
{
int TypeId
decimal Price
string Property3
string Property4
}
Object3
{
int TypeId
decimal Price
string Property1
string Property4
}
Причем даже значение string PropertyN из общего объекта не всегда точно равно string PropertyN в конкретном объекте.
В связи с чем есть план запилить словарики какие стринги из стороннего входящего объекта равны каким значениям моих внутренних объектов
>О чем разговор вообще?
А это вообще хороший план со словариками, так быстрее работать будет? И если да, то пусть лучше эти словарики создаются каждый раз при запросе (пока запросы планируются не слишком частыми, т.е. нагрузка так себе) или сделать их статичными и пусть висят в памяти всё время работы приложения
Вот
Держать такой словарь в памяти (статика) это такая мелочь по сравнению с остальным, что просто ну ни о чем.
А если хочется тотальной экономии, то такой небольшой словарь можно всегда заменить на switch и потребление памяти будет нулевое.
Я думаю, стоит ли мне рашить сейчас и бежать на собеседования хоть куда-либо или подождать нормальной вакансии
Можешь для этих целей вебсокеты использовать. Правда зачем в контексте ХТТП это вот надо - я хрен знает.
Ну на js'e мб держать как-то коннект с сервером я хз. Вот пока читаю что на асп нет есть memberuser.isonline, правда пока не знаю что там под коробкой, да и мне на коре нужно.
Объясню - у меня петпроект прохождение всяких нестандартных нескучных тестов. Я пока точно не тестил, но прикинул что в теории юзер вполне может ебануться и залогиниться два раза в свою учетку с разными куками и это в теории может распидорасить сервак, как минимум мне кажется можно словить какой-то db concurrency update, ну или еще кучу всяких уязвимостей чисто моей реализации потому что я этого не предсказал. Самое тупое пока что я придумал - просто не пускать его в систему пока он залогинен, как например в веб версии телеги, правда там это в контексте пары вкладок. Мне показалось что асп нет коре что-то должно быть как например есть дебаг конект с самой студией.
HTTP - по своей сути - запрос-ответ протокол, в HTTP 1.1 по дефолту - сокет закрывается сразу после обработки запроса. "Подключение" к приложению строится обычно на базе сессий.
Так вот в контексте db concurrency update - тебе боятся нет смысла, оно не про это, а про попытку двух потоков обновить сущность, в твоем контексте - оно как может произойти даже если у тебя будет механизм отслеживания, так может и не произойти, даже если два одинаковых пользователя будут обновлять запись.
Если бы ты хотел фишку как в ВКшечке какой-нибудь, типа пользователь вышел и кружок стал сереньким, то это делается двумя путями: вебсокеты, либо реализуешь логику на стороне клиента, когда он раз в какой-то интервал времени шлет запрос, который означает, что он еще подключен, приложение обновляет статус клиента, если условно он минуту этот запрос не слал - считаешь его не в сети.
1. В коде есть app.UseHttpsRedirection(); Но в браузере при попытке открыть ссылку по http пик 1. Почему так?
2. В инсомнии (http-клиент) мне выдает ошибку Error: SSL peer certificate or SSH remote key was not OK. Как это работает? В моем представлении Visual Studio установил на компьютер сертификат разработчика, и все должно работать даже в инсомнии.
3. Роуты регистронезависимые, поэтому /demo и /DEMO выдают один и тот же результат. Вот только когда я в строке браузера задаю /DEMO - строка изменяется на /demo. Как это происходит? Я сначала думал, что это какой-то редирект, но в инсомнии никаких редиректов не отображает, обычный плеин текст, никаких подозрительных заголовков, один запрос на /DEMO и один ответ. Как браузер понимает, что /DEMO и /demo - это одно и то же, и нужно заменить в строке адреса /DEMO на /demo?
>Пытаюсь разобраться, как работает api
Просто закоментируй и убери пока строку app.UseHttpsRedirection();
чтобы не ебать себе мозг пока постигаешь и юзать обычный http. Потом когда поймешь, что и как вернешься и освоишь https и прочую шелуху.
Process = Process.GetProcessesByName(NAME_PROCESS).FirstOrDefault();
ModuleClient = Process.GetModule(NAME_MODULE_CLIENT);
ModuleClient = налу и Marshal.GetLastWin32Error() - выводит 0 (типо всё окей)
Самое главное что что меня интересует как РЕАЛЬНО написать какие-то тесты которые РЕАЛЬНО
Все эти гавкающие кошки и мяукающие песики из примеров это конечно хорошо НО меня интересует реальное применение, а не эта чушь.
Например когда представление возвращает not authorized это ошибка или нет? тест пройден или нет?
или вот мы получаем сущность с базы, а база пустая, или не созданая это как? ошибка или нет? Ну или иначе я что должен заполнять базу тестовыми значениями? ну а если у меня разные инстанции, тогда тесты не будут повторяемыми.
Короче все РЕАЛЬНО ВАЖНЫЕ вопросы не раскрыты, а везде пространные речи про солид, DI и котиков-собачек.
У Троелсена есть примеры, где машина разгоняется и у неё движок ломается, если превышает определенную скорость.
>Короче все РЕАЛЬНО ВАЖНЫЕ вопросы не раскрыты, а везде пространные речи про солид, DI и котиков-собачек.
А это типично. В инете миллионы статей где показано как решать простые случаи.
Из-за этого приходится мониторить ресы разные и класть в закладки норм статьи, чтобы потом не искать.
Ты немножко не понимаешь сути тестов и SOLID
Ты создаёшь объект с определенной целью, например сложения двух чисел. Что там накодил - вторично, для тестов важно только одно - полученные данные и возвращаемое значение. Если твой объект на 1+2 возвращает 3 - хорошо, возвращает 12, null или ExceptionError - тест не проходится. Всё.
>или вот мы получаем сущность с базы, а база пустая, или не созданая это как? ошибка или нет? Ну или иначе я что должен заполнять базу тестовыми значениями? ну а если у меня разные инстанции, тогда тесты не будут повторяемыми.
Гугли Mock-объекты
Просто сходи на реальный собес хоть куда
>Ну или иначе я что должен заполнять базу тестовыми значениями? ну а если у меня разные инстанции, тогда тесты не будут повторяемыми.
Нет, ты просто мокаешь бд в своих юнит тестах.
Насколько сложно пилить сервер на C#?
На линуксе проблем не будет?
сейчас Адама Фримана читаю, у него там есть пример тестов для мвс
https://github.com/Apress/pro-asp.net-core-3/tree/master/10 - SportsStore - Admin/End of Chapter/SportsSln/SportsStore.Tests
Ща тебе насоветуют.
Местные совершенно иначе понимают слово "сервер". Здесь другие ребята, здесь суровый ентерпрайз.
мимо ОП годотреда
Возможно стоит перефразировать вопрос: Как записать большое кол-во данных в БД?
Можно сконвертить в CSV-файл и читать как простой текстовый файл. Совместимость с VS Code присутствует.
Можно и тем же, можно одним запросом - инсерт инто таблица вэльюз (значения строки 1), (значения строки 2), ...
Пара тыщ строк это не сложная задача для БД.
Очевидный dbeaver.
Версия под мак - есть.
Подключенте к любой бд - есть
Импорт/экспорт в/из БД их любого говна - есть.
Смотри, есть два формата данных в office - xsl и xslx
XSL - это бинарник, тут всё сложно без библиотек
Но XSLX - это же обычный архив с кучей xml файлов, можно использовать как OpenXml, так и вручную через Linq to XML
Так это та же самая Postgre. Ввод данных тот же INSERT INTO
>>340199
Тоже подумал, что проще видимо парсить xml. Расчитывал, что можно это сделать без "сохранить как".
>>340248
1. Домашний пк на маке. 2. Далее потребуется воспользоваться одной либой для конвертации файлов, которая написана только под шарп с последующим наполнением БД.
И разве сейчас шарп не позиционируется как кросс платформенный? Даже при "хотели как на бумаге, да забыли про овраги", то выбор из подобных языков, по моему представлению, не велик, либо я так и смог корректно понять какой яызк для чего.
Джава полностью кроссплатформенна и работает одинаково на 3 миллиардах устройств.
'Axis object – Auto interval error due to invalid point values or axis minimum/maximum
как же эта хуйня заебала, я просто в рулетку какую-то играю
почему нахуй. почему я не могу просто взять и начертить график, надо ебаться с говном
я понял, там значение большое высчитывается после чего нулл хранится видимо
>Так это та же самая Postgre. Ввод данных тот же INSERT INTO
Там из csv есть импорт с кучей настроек и маппингом на нужные столбцы
Я за месяц прочитал Эккеля "Философия Java" и теперь лучше понимаю шарп, потому что таких книг чисто по шарпу нет. Тот же Троелсен очень поверхностно всё описывает и порой не понятно и что и зачем нужно.
Языки очень похожи и если знаешь один, то другой учится быстро.
Рассчитывал, что можно в более серьезном ЯП без преобразования исходного файла, открыть и сделать записи в объект и все.
T[] массив с данными;
int[] массив со следующими индексами;
int последний занятый индекс;
пулл со свободными индексами;
При создании я указываю "размер" этой структуры данных, тогда указанное количество массива со следующими индексами фиксируется под "начало". И дальше я обращаясь к этой структуре данных могу например на один и тот-же индекс добавлять много значений, внутри просто выстраивается однонаправленный линкед лист в массиве со следующими индексами. Данные добавляются либо в начало этого линкед листа, либо в конец, но порядок в целом не важен. При удалении в массиве со следующими индексами значение у предыдущего меняется на значение у текущего и возвращается в пулл свободных индексов.
В общем-то заебись, можно на один индекс складировать много хуйни и читать периодически. На разных индексах размер его "контента" может сильно различаться поэтому это было сделано как описано. Контент многократно чаще просто читается, а не меняется.
Вопрос: Как организовать здесь добавление/удаление данных в многопотоке?
Вероятность того что разные потоки будут дергать один и тот-же "стартовый индекс" довольно маленький, но не равен нулю. Но при этом нет никакой возможности сказать какой из потоков какой стартовый индекс будет дёргать, поэтому я не могу разделить их заранее.
Все идеи как это сделать у меня какие-то хуевые. Наверно лучшая это просто на время многопотока разбивать каждый отдельный индекс на свой отдельный массив и лочить его когда туда щемится какой-то из потоков, а в конце просто собирать их обратно. Но это звучит как-то так себе.
Что, предлагаешь просто нахуй всю хуйню лочить при изменениях в ней? Может ещё и чтобы потоки в самом начале лочили эту хуйню? Потокобезопасненько!
https://youtu.be/8Slzd1G7f9Q
Только вот мой тестируемый проект на базе приложение windows, а проект бенчмарка на базе консольного приложения. Собственно, на прикрилейтед ошибка, возникающая при попытке добавить ссылку на тестируемый проект. И как это разруливается?
Если из консольного приложения сделать приложение windows, то становится недоступна консоль.
>Вероятность того что разные потоки будут дергать один и тот-же "стартовый индекс" довольно маленький, но не равен нулю.
Это.
Короче, в свойствах проекта дописал магический ключ
Но причём тут переменная то. Если я для каждого отдельного индекса буду лочить что-то это проблему не решит. Если для удаления, или чтения, что-то из линкед листа ещё ладно хуй с этим сгодилось бы, то для добавления не особо, так как там уже общий массив для всех индексов.
Впрочем, медитация в потолок натолкнула меня на пару свежих мыслей.
>почему не работает?
Потому что ты тупой. Тебе же прямым текстом написано, что ты пытаешься в текущей области видимости объявить переменную с именем которое уже используется во внешней (по отношению к ней) области.
Сначала читать научись, потом лезь в программирование.
При добавлении-удалении -
var readlData = //твоя фигня которую ты собрался менять
while(true)
{
var localCopy = CopyDataMustBeChanged();
var expect = DoOperation(localCopy);
var real = DoOperation(realData);
if(expect == real){break;}
}
Криво написал, но суть я думаю всем ясна.
Гораздо элегантнее использовать тут цикл do - while
>как это исправить
Имя переменной process поменяй. Либо той которая в foreach, либо той которая снаружи.
В ASP с этим более-менее понятно, но вот как это всё выглядит в десктопе?
Там нету встроенного DI
Да ну какой же ты мидл без реального опыта. У тебя базовые знания.
Стажер максимум
Смотря какие лайфтаймы
Если лайфтаймы от DI типа OpenScope(), то это одно. Если что то типа IApplicationLifetime (как в асп) то другое. А "лайфтаймы - они везде", то это третье
Сама концепция лайфтаймов шикарна - никаких слабых событий и "а как вызвать диспозе и когда и кто". Каждый компонент имеет свой лафтайм и когда он дохнет, то все связанное автоматически диспозится и отписывается.
Вот тут вариант с пояснениями https://www.youtube.com/watch?v=ZzmK7K2ZIxI и типа репа https://github.com/saltukkos/lifetime-demo
Но опять же все по верхам по верхам конкретного применения.
Я же использую Jetbrains.Lifetime (https://www.youtube.com/watch?v=Sq_h5bVWJ0k) + DI от майков.
Это именно наши изобретения. Много лет спустя спросят, кто изобрёл лайфтаймы? А ответом будет - русские!
Потому что это верная концепция. IDisposable прост примитив, который никак не отвечает на вопросы
- когда вызывать dispose(). нам бы тут задиспозить, но мы передали зависимость куда-то, а вдруг она там нужна
- а если мне в конструктор передали зависимости и меня диспозят, то мне эти завимости диспозить или нельзя. Вступает в конфликт с предыдущим, в итоге никто не диспозит )
- как не забыть вызвать dispose()
А еще кривая концепция событий
Не выучишь. Там уровень материала "Рассказать новичку, чтобы он понял зачем это вообще нужно" и "Вспомнить зачем эта хрень, когда давно ей не пользовался".
Уровень где-то стажер, стажер+.
Нуу тогда это нужно искать проекты с контейнерами, но там обычно все "а вот создаем вьюмодели через контейнеры" и все. Сложные случаи типа scoped - редкость. А при scoped контейнер же уже похоже Lifetime из описанного выше. Но хуже, ведь scoped диспозит только скопед элементы, да и таскать контейнер везде бред. Поэтому вместо "а как же быть" лучше lifetime как отдельная концепция и реализация.
Пчел, это не ева с синхропакетами, нужен экспириенс.
Нууууу. Мидл-хуидл от конторы зависит.
Я работал в местах, где 2 программиста - там и это было уже ведущий, кек, и работал в местах, где 100+ человек кодеров, и там это даже чтобы собес пройти не подходило, если ты не студент какой-то(тип к еще студентам спрос меньше, можно взять посмотреть, вдруг что выйдет путнего). Так что да.
Чисто по своему ощущению, я бы людей с метанитом никак не оценивал, потому что он дает готовый кук-бук, а понимания что ты делаешь - не дает.
Для мидла я бы считал норм - основы (базовая информатика, алгоритмы, дискретка, динамическое программирование, это вот все), паттерны, немного архитектуры кода, сети (если в веб метишь: уровни модели OSI, какие еще модели были, можешь пояснить на каком уровне ты работаешь, пару протоколов назвать, можешь какой-нибудь SNTP-сервер нафигачить по спекам), железо (понимаешь что есть разные архитектуры и как минимум знаешь пару названий и особенностей, можешь привести примеры что нужно на одной учитывать чтобы код работал нормально), операционки (знаешь что такое, что оно за тебя делает, можешь пояснить как бы писал код, не будь у тебя операционки), многопточка (что, зачем, как там с шаред стейтом, вот это вот все); про работу общие вещи(методолгии, скрамы-хуямы, ватерфолл, спиральная, этапы разработки, можешь объяснить в чем разница между продакт-овнером и скрам-мастером), ну и умение решать задачки быстро, не отвлекать, гуглить и самому понимать, что от тебя хотят. Как-то так вот.
>можешь объяснить в чем разница между продакт-овнером и скрам-мастером
Один бесполезный хуесос, а другой бесполезный пидарас?
> У вас возникает чувство стыда, когда вы пишите на сишарпе?
У меня чувство хуйни, когда я пишу на годном и удобном сишарпе и понимаю, что вместо православного нативного кода у меня конпелируется богомерзкий МСИЛ и исполняется на подзондированном дотнете.
Ну почемууу не сделали нативный компилятор шарпа???
Как вы строки нумеруете? Через 10?
К примеру, так вот?
10 LET A = 0
20 FOR I = 1 TO 10
30 PRINT I
40 NEXT I
Ни разу что-ли не писал низкоуровневый код? С кем я тут сижу, нахуй? Давай, подумай логически, какая ос была у каких-нибудь компуктеров в 50-е 60-е? Небось и перфокарт не видел. Пиздец.
Та блин. Банальный бутлодер-то любой, кто мидлом себя называть хочет - должен был писать. Серьезно. Чем вы там занимаетесь-то? Жсоны в базу гоняет целыми днями, да с кабаном в курилке о премиях разговариваете?
Потому что для внутреннего пользователя нахуячить на впф - быстро и просто, быстрее и проще только на формах. А куче мелких и средних контор - дешевле нанять кодера, который им за условные 40-60к рубасов в месяц будет пилить то что им надо, чем платить условные 20к бачей в год за готовое решение, которое пилится под всех и ваши хотелки за огромный прайс и в порядке очереди.
Я так работал после универа за 15к, а потом, когда написал им все программки, мне сказали, что нам больше программисты не нужны. Пришлось уволиться.
Та я так же работал. Потому и сбежал в ОйТи контору. Просто предложений работы со стороны всяких мелких бизнесов таки довольно велико, да плотют там мало, культуры никакой, да и вообще, объективно говно там работать, но что поделать на первых парах.
Это весьма серьезный уровень, если всё так. Стронг-джун или мидл.
Большинство мидлов ни одной книжки, ни одного гайда до конца не прочитали. Просто изо дня в день копипастят со стековерфлоу из ответа с галочкой.
На самом деле, макаки любят причислять себя к интеллектуальной элите, обладающей недоступными большинству знаниями. По факту это не так. На каких-нибудь инженеров или врачей реально надо учиться многие годы. Готовый макакер же выпускается на рынок готовым к работе за 1-2 месяца, за это время он приобретает 80% своих знаний, которые ему когда либо пригодятся.
>Java
я не говноед. Конечно щас шарп чет одну хрень вводит в новых версиях, но предлагать вместо этого жаву...
Я бы еще понял котлин (хотя он поверх жавы и в этом его беда)
>Swing
Это может заменить разве что винформс.
>>342322
Там в исходном сообщение предлагалось на собесе спрашивать чего делать если нет операционки. Какой еще може быть ответ кроме как сначала написать ОСь???
Или вот ещё из смешного:
>OSI, какие еще модели были
Что за дурацкий вопрос? OSI сама по себе услованя и абстрактная классифицация так что в альтернативах нет смысла и их никто не знает и знать не хочет.
Винформс только под винду, а Swing полностью кроссплатформенный под 3 миллиарда устройств. Можешь и на Котлине всё писать, там можно также выбирать языки как в дотнете между сишарпом или визуал бейсиком.
>Винформс только под винду
а причем тут это. WPF тоже только под винду.
ты спринг притащил как кроссплатформенную замену WPF
Я же говорю что он может заменить лишь винформс и нисколько не является заменой для WPF
Avalonia замена да
Может быть jetpack compose для десктопа когда нибудь в далеком будущем
но не свинг.
в шарпе и так есть кроссплатформенные замены для винформса по тому же принципу что и свинг. и нет смысла брать богомерзкую жаву
>Можешь и на Котлине всё писать
угу можно. только там жава рантайм внутри от которого не уйти. Я пишу на котлине, мне припекает от type erasure (конечно может это несовершенство IDE который не может понять суть, но мне какая разница, кто мне палки в колеса ставит)
> Какой еще може быть ответ кроме как сначала написать ОСь???
Ну, напрямую работать с железом, кек. Или ты предлагаешь, допустим, для задачи вывода на дисплей часов текущего времени - целиком ОС писать?
>Что за дурацкий вопрос?
Нормальный вопрос. Для человека что жсоны гоняет - нужно чтобы он хотя бы понимал, что под ним там tcp, за ним ip, дальше наты-хуяты, роутеры, провода с сигналами. Я вот хуй знает как вы работаете, но ты не представляешь, какое "удовольствие", объяснять чуваку, что такое маска подсети, пояснять за наты-хуяты, про маршрутизаторы, когда ему тупо нужно поднять сервер для тестов, а он не в состоянии сделать этго сам.
> так что в альтернативах нет смысла
Кхм, есть более простая модель TCP/IP, поверх которой считай веб(и не только) и построен, и да, это тоже сетевая модель. И знать ее таки имеет смысл.
Сохронил, буду это потихоньку чекать помимо кодинга, чтоб хоть половину слов из написанного понимать
Самый простой способ - попробовать написать свой ХТТП сервер с сокетов, затем подумать, а как мне генерировать странички, а как мне отдавать жсончики, а как мне роутить маршруты, а как права разные для доступа к ресурсам и т.д.
Ну, собственно, так вот оно учится просто, потому что пока ты пилил такой вот сервер - ты понял что за тебя фреймворк делает и +- представляешь как, остается найти как называется та хуйня что тебе нужна.
Я раньше на РНР писал сайты, но тут что-то всё запутано.
Пишут типа давайте создадим модель и пишут класс, где куча свойств с гет-сет. И это модель? А откуда она данные берёт?
Дальше контроллер то же класс, который плавает сам по себе в коде и как он связан с хттп-запросами и другими действиями?
Представление вроде бы понятно, но раньше на РНР я формировал его программно, т.е. у меня была куча логики, которая по кусочкам собирала итоговую страничку, а не примитивный шаблон один на все случаи.
>Я раньше на РНР писал сайты, но тут что-то всё запутано.
идентично 1 в 1
все RoR подобные фреймворки - близнецы братья
> Пишут типа давайте создадим модель и пишут класс, где куча свойств с гет-сет. И это модель?
Да.
> А откуда она данные берёт?
Откуда угодно.
> Дальше контроллер то же класс, который плавает сам по себе в коде и как он связан с хттп-запросами и другими действиями?
В ASP есть роутинг по именам контроллеров и методов внутри них, если пометить их атрибутами. Ещё можно роутинг для контроллера пробросить в маршрутизаторе. Куча вариантов.
> Представление вроде бы понятно, но раньше на РНР я формировал его программно, т.е. у меня была куча логики, которая по кусочкам собирала итоговую страничку, а не примитивный шаблон один на все случаи.
В ASP страница тоже может собраться из кучи подшаблонов. Изучай вопрос более пристально. Монолитный WebForms забыт уже много лет, а Razor - очень крутая штука.
T Add(T x1, T x2) {
return x1 + x2;
}
И этот язык считает себя круче джавы?
А какие гарантии что у T перегружен оператор сложения ?
>Пишут типа давайте создадим модель и пишут класс, где куча свойств с гет-сет. И это модель? А откуда она данные берёт?
Ну да, это модель. Данные берет откуда тебе нужно. Хочешь - массивчик сделай, хочешь из базы тяни, в случае базы: если юзаешь EF - оно тебе смаппит.
Просто тут у тебя может быть проблема в том, что ты привык к тому что прямо в модели ты берешь данные откуда тебе надо, в дотнете обычно модель - анемична, а данные берутся из какого-нибудь репозитория(база, внешний сервис, файлик, до пизды в общем)
> Дальше контроллер то же класс, который плавает сам по себе в коде и как он связан с хттп-запросами и другими действиями?
А вот тут - как раз писал бы с сокетов - понимал, столкнувшись с тем, что заебало тебя руками роутить запросы.
Если конкретно про это вопрос, то под капотом есть условный ApplicationBuilder, который при старте - смотрит что ты там решил использовать, плюс рефлексией из сборки достает классы который от ControllerBase наследованны, строит маршруты. Я немного упрощаю и в кучу сваливаю, сейчас майки решили по SOLID работать и этот ApplicationBuilder - разбит на хуилион разных Features, Router, Middleware и прочего.
Ну, а дальше - все просто, пришел запросик валидный, гоним по мидлварям, и так до нужного тебе метода, если метода не нашли - возвращаем 404.
> Представление вроде бы понятно, но раньше на РНР я формировал его программно, т.е. у меня была куча логики, которая по кусочкам собирала итоговую страничку, а не примитивный шаблон один на все случаи.
Кхм. Так ведь для этого фреймворки и нужны, чтобы ты не занимался руками роутингом, проверкой кук и всем этим вот.
Та в этом плане да, пиздец какая хуйня. Бесит жутко посли плюсов(((
Но мне тут пытались пояснить, дескать это не баг а фича, вообще это круто, что ты не можешь сделать просто простую хуйню, а тебе приходится делать сложно, ведь сто пудов у вас будет вредитель, который сломает все с таким вот подходом. Только мой взгляд на проблему такой: вы пишете тесты, если вредитель завелся в команде и после него тесты падают - проще от вредителя избавится, чем надеяться на то что язык не даст ему хуйню творить. А потому нужно бороться не с штуками, которые позволяют долбоебу стрелять себе в ногу, а с долбоебами, которые видя курок - наводят дуло себе на ногу и нажимают на него.
100к - это всегда была норм зп для мидла, особенно вне ДС. х5 к среднегречневой зп в регионе, так-то.
С твоим подходом, тебе в JS или в петухоне самое место.
C# - это строго типизированный язык. И то, что тебе не нравится, то ты этого просто не понимаешь. Это супер фича, это своего рода аспект красоты языка, которая впрочем не доступна простолюдину.
Конечно, в ряде аспектов применение дженериков долгое время не было логически завершенным, но теперь, с приходом Generic Math и abstract static методов и свойств https://devblogs.microsoft.com/dotnet/preview-features-in-net-6-generic-math/ эта фича становится ультимативной.
Все это заучивается за пару недель. Это азы.
В IT до сих ломятся толпы, особенно сейчас, когда будущее Родины становится туманным, человеку хочется иметь международную профессию.
Там за забором вкатунов стоит на каждую вакансию по тысяче человек.
Зачем брать тебя?
Они подрючат по максимуму каждого и выберут лучшего.
Не значит конечно, что ты должен идеально ответить на всех их вопросы. Достаточно лишь, чтобы никто другой не ответил лучше тебя.
Хрюша плз
>И этот язык считает себя круче джавы?
Конечно круче. Нет type erasure и все проверяется на этапе компиляции.
В компаниях где я работал практически всегда была на самом деле весьма витиеватая схема оплаты труда: оклад, месячная, квартальная премия, годовой бонус, стимулирующий пакет, какие-то проценты с чего-то там, но не более таких-то сумм и т.п. Но более менее гарантированная часть - это оклад + месячная либо квартальная премия. И если на это смотреть, без учёта хитрых и нестабильных надбавок, то в среднем по рынку картина уже многие годы более менее стабильна: джун - 50к, мидл - 100к, синьор - 150к, начальник отдела - 200к. И я бы сказал, что это очень хороший доход в любом регионе РФ, даже в Москве. Если столько платят в регионе - то это ты удачно попал, в устойчивую и современную компанию. Обычно платят-то меньше. Потому что ну такой тут рынок труда и такие тут зп. Если ты самый умный, ну вали в москву, всем будет лучше, ты найдёшь своё место, а оставшиеся будут более сговорчивы. А уехать могут без серьезных последствий ну может 1 из 5. Хотя в Москве наверное намного больше мест, кроме IT, где можно столько же заработать.
Кто-то подумает, что на такую зп к вам пойдут только середняки, а лучшие пойдут в другие компании. Только на самом деле это хорошо, если ты хоть что-то понимаешь в менеджменте. Бизнесу нужны легко заменяемые работники, чтобы уход одного человека создавал минимум проблем. Никто не собирается в условном Златоусте или Каменско-Уральске создавать прорывной стартап, изменяющий мир, тут IT - это просто обслуга местного кабаничества.
> Как вы вообще на первую работу попадали
Пришел на завод, показал диплом, сказал что готов работать за миска риса, даже без кошка-жена. Отработал год - съебался на деньги и кошка-жена.
> Никто не собирается в условном Златоусте или Каменско-Уральске создавать прорывной стартап, изменяющий мир
Я собираюсь. Что ты мне сделаеш?
>Я собираюсь.
Ты московская корзиночка, жизни не видел и не знаешь.
Тут твоему стартапу дадут подрасти, набрать жирка, окрепнуть, а потом даже швабру показывать не придётся, даже вичовому сокамернику в СИЗО не придётся спускать штаны, чтобы ты всё оформил на уважаемого делового человека.
Проблема в том, что люди бывают создатели и разрушители. Разрушитель конечно может отобрать стартап у создателя, но создатель просто создаст ещё один стартап, но уже в другой стране (телеграм), а разрушитель приведёт отобранное к упадку (вк).
Ты когда деплоить на сервер начнешь,тогда и поймешь в чем фишка. А IDE и система, в которой ты работаешь это вопрос комфорта. Можно и на линухсе на шарпе Asp net прогать в VS code.
Я не знаю что это такое. В книжках про это не пишут.
Так фишка-то не в разработке, а в деплое. Писать можешь хоть на листочке.
А у меня на выбор только Razor Page, а MVC View Page нет вообще.
Сразу видно ньюбис, еще и спорит. 90% говна, которое предоставляет Visual Studio не нужно.
>>340722
Вообще, кстати, я сделал и даже работает вроде.
Ограничил через лок возможность потокам соваться в начало конкретного линкед листа, чтобы только один поток мог читать/писать/смотреть цепочку.
Каждый поток имеет свой собственный пул свободных индексов в основном массиве чтобы разные потоки не совались на один и тот-же индекс.
Когда пул свободных индексов заканчивается у какого-то потока я через ReaderWriterLockSlim пополняю запасы свободных индексов, или расширяю массив. Вот про этот лок я что-то долго вспоминал.
Вопрос: А в шарпе ведь нет никакого массива с локами? Чтобы я мог сказать "ну вот на этом индексе залочь". Я могу конечно сгруппировать как-то обжекты которые я лочу, которые репрезентуют индексы, но не хотелось бы плодить сущности.
Хуй знает. Я вот в свое время в универе принципиально делал лабы на Mono, ибо ебал я эту винду, и раз уж на сишарпе пишу, буду на моно делать. Нормально писал. В то время кстати еще не было коры. В те времена даже была такая штука как MonoDevelop для линукса, но имхо немного вырвиглазная, потому только vim, только хардкор.
Ну, а сейчас я чуть менее принципиальный, и .NET/.NET core - норм.
Студией никогда не пользовался.
Не понял что ты понимаешь под массивом с локами.
В шарпе у любого массива есть Array.SyncRoot
Если ты хочешь делать лок на элемент по индексу бери и лочь этот элемент.
ммм ну например я могу сделать
object[] myArray
напихать туда объектов и когда мне надо залочить конкретный индекс то я делаю
lock(myArray[index])
и тогда я лочу объект который как-то могу ассоциировать с конкретным индексом. но это по объекту на индекс. чето многовато.
ну а в шарпе к несчастью нельзя тип значений совать в лок же насколько я знаю. я не могу написать lock(index) потому что оно сконвертирует index в object и если я туда суну один и тот-же index то это будет два разных object
и изначальный массив я не могу использовать в том-же ключе по тем-же причинам.
и встроенные Concurrent коллекции сюда тоже не воткнуть, так как тут массив где только для его небольшой части нужен такой функционал по итогу
Ебанутый итт
Хотя мож я тут и хуню написал
https://stackoverflow.com/questions/71424052/concurrentqueue-in-a-concurrentdictionary-duplicate-error
Сделай уже собственную обертку над этим массивом, сделай у нее индексатор и в нем уже реализуй какие угодно локи. А снаружи у тебя будет обращение как к обычному массиву.
Но сдается мне, что твоя основная проблема не вот это вот все, а то что ты изначально неверную структуру данных выбрал для своей задачи и маешься хуйней.
хотел написать некоторые причины но ты и сам из нашел. да и так ли это важно? думой в рамках задачи!
>>344124
ну кстати а как сделать обёртку для lock? через делегаты чтоли?
я так то уже сделал и работает, просто я не в восторге от того что она через массив с обжектами работает. хочется вжух написать число и сказать "ну вот тут лок".
ну и кстати нет, структуру данных я менял не раз, я их много перебрал в процессе. изначально такая структура данных нужна была чтобы хранить "воксели". структ у которого указан тип, минимальная высота, максимальная высота. его позиция в массиве это его позиция в мире. и мне надо было складывать воксели быстренько друг на друга, проверяя их на пересечения. они там ещё при добавлении сортировались по нижним границам вокселя, чтобы удобней икать можно было.
варианты таких коллекций где внутри всякие словари с листами что-то как-то хуево справлялись с такими задачами чисто по производительности.
но а потом такая хуйня как-то разрослась до чего-то более самостоятельного. внезапно иметь коллекцию где я могу написать индекс и добавить к нему множество объектов это заебись. накидал туда ещё кода который бы собирал эту коллекцию в другого сорта пару массивов которые гораздо удобней линейно читать, добавил функционал для расширения базовых индексов, предикты и прочий вспомогательный код, теперь вот ещё чтобы в многопоточности работать могло и вообще заебись стало. довольно удобно собирать в ней какие-то однотипные данные в небольшие кучки.
вообще, если подумать чуть дольше, то мне не нужен как таковой массив с обжектами. я могу просто держать коллекцию с занятыми потоками индексами и перед тем как щемится в этот индекс я могу просто проверить через залоченную коллекцию имеется ли он там.
интересно какие есть хитрые методы для проверки "есть ли число Х в маленькой коллекции"
Расскажи про блэйзер сервер
>ну кстати а как сделать обёртку для lock?
Не над локом. А над массивом твоим или что-там у тебя за франкенштейн.
Делаешь класс, запихиваешь в него свою структуру данных, реализовываешь индексатор и через него уже пердолишь внутри любую свою логику. Внутри можешь сделать как хочешь, хоть через локи, хоть очередью, хоть еще каким вывертом. А снаружи ты будешь работать с экземплярами этого класса как с массивом, не заботясь о том, что он там внутри у тебя делает (если конечно все правильно сделаешь)
В том же РНР тебе дают простые кубики для взаимодействия с HTTP-протоколом, а всё остальное - это твоя логика. Делай как хочешь! А здесь надо заучивать все эти "приёмы" по написанию правильного приложения.
наркоман чтоли. очевидно что я это уже сделал? нахуй ты мне инкапсулировать это советуешь, если вопрос про реализацию?
как бы сам пишу, сам использую, если под капотом говна наделал, то говном и пользуюсь.
>>344319
пробовал, считаю им суммарное количество элементов в массиве, например. но тут наверно логичней будет SpinLock использовать.
хотел лол использовать ConcurrentDictionary где была бы пара поток-индекс, но оказывается у него нету ContainsValue.
Да у меня голова треснет. Чувство что я выбрал стул с хуями, причем конскими такими.
Все эти приемы сложные до тех пор, пока ты не вырастешь до мидла+. Кажется что "Хули тут всё за меня", да всё просто - майкрософт лучше тебя напишут ту же хуйню, которую ты будешь писать из раза в раз в каждом новом проекте. Вся структура максимально простая, а если ты хочешь углубиться то как это работает - source.dot.net
Это как методы Linq, ты их и сам можешь написать и обойтись даже без дженериков, только вот нахуя? Все залупки в асп настраиваются отлично и без мозгоебства, код стандартизирован и имеет одинаковую (почти) структуру во всех приложениях (т.е. времени на вкат в новйы проект на новой работе уменьшается), в то время как на пыхе каждый обрыган пишет так, как ему захочется и хуй кто там че поймет
Люди.Выбрать(Головы).Найти(2344705).Треск();
Стулья.Выбрать(СХуями).Найти(КонскийТакой).Посадить(Люди.Выбрать(Жопы).Найти(2344705));
>Байтоёб, спокуха.
это ты GC скажи
>Там шляпа покруче будет
что где-то еще хуже - ничего не меняет
>Вполне себе читаемо, да ещё и в одну строку.
оверхед не в плане читабельности. Как раз наоборот, сахар читабельные решения более ресурсоемки
>Ваще ПА ХУ Ю
поэтому и имеем что современный софт на компах в 100500 ядер и триллионы йотабайт рамы и сверхбыстрыми ссд работают с такой же скоростью, как софт на вин 95 на 32 метрах рамы (и умеет не больше)
>это ты GC скажи
Что ему сказать? Что он после первой же сборки мусора сожрет всю хуйню? Это он и без меня знает.
>что где-то еще хуже - ничего не меняет
Всё так.
>оверхед не в плане читабельности. Как раз наоборот, сахар читабельные решения более ресурсоемки
Байтоёб, спокуха. JIT в Release всё по кайфу делает, дай бог там 10 кб наберется этого сахара.
>поэтому и имеем что современный софт на компах в 100500 ядер и триллионы йотабайт рамы и сверхбыстрыми ссд работают с такой же скоростью, как софт на вин 95 на 32 метрах рамы (и умеет не больше)
Не поэтому, а потому, что какой-то долбоёб не умеет в типы данных и вместо условного поиска по дереву просто сделал выборку Where из линка потратив 500000 наносек вместо 1000.
>Что ему сказать? Что он после первой же сборки мусора сожрет всю хуйню? Это он и без меня знает
сожрет, а оно еще набежит. он еще сожрет, а оно еще набежит. а лучше бы спал и не просыпался пожрать.
>Байтоёб, спокуха. JIT в Release всё по кайфу делает, дай бог там 10 кб наберется этого сахара.
да елки палки. я говорю по оверхед ВЫПОЛНЕНИЯ. такая декларативность не дается бесплатно. Просто обычным формошлепам и "пишем бложик" на это плевать
> а потому, что какой-то долбоёб не умеет в типы данных
нет не поэтому. А потому что для всего берут фреймворки и либы где абстракция поверх абстракции поверх абстракции. Вон из-за этого веб стал тяжелым и тормозным - это отлично заметно что уже невозможно серфить на старых мобильных устройствах
А когда через 100 лет все на квантовых пк будут капчевать так же будешь ныть хули на некроговне не работает ПО нового столетия?
Аноны, сделал лабу, хочу у вас спросить, правильно ли я её сделал.
Основной вопрос, главным потоком можно назвать то, что держит сам процесс (окно) программы?
Блять, пришлось под таск все переделывать, потому что waitall для треда не нашёл.
Таск это тоже потоки открывает или это другая хрень?
вот через 100 лет и приходи
а пока что закон мура перестает действовать
а с акумами так вообще полный швах
и да - по осталось прежним. браузер остался браузером и особо не изменился. Изменилось количество говна которое ему приходится выполнять чтобы открыть сайт.
>waitall для треда не нашёл
Join() для каждого потока и есть WaitAll
>Таск это тоже потоки открывает или это другая хрень?
в классе Task там есть фабрика для старта, которая стартует либо на пуле либо отдельным потоком как и new Thread(), что делает new Thread() нужным только если нужен не фоновый поток
Ну и шоркат в виде Task.Run
Ну а сам объект Task никакого отношения к потокам не имеет.
В чем суть. На работе юзаю MS SQL к которому подключаюсь через SqlConnection.
А дома у меня нет MS SQL, поэтому делаю копию базы данных в обычном MS Access, к которой подключаюсь через OleDbConnection. (как вариант можно через SQLite - а там тоже свой класс)
using ( MyConnection connect = new(connectionReleaseStr))
Где MyConnection становится нужным мне классом.
Как это сделать? Да, знаю что есть всякие EE, но сложно, да и уже куча кода набита и работает - а работает, значит не трожь
Вылетает исключение при File.Copy с таким текстом... Да насрать мне что там SMB1, это мой личный комп, это моя личная локальная программа.. Как мне блядь скопировать файл?
Ты хоть бы написал на чем ты пишешь. Я когда-то делал класс-обертку для контекста.
В какой системе?
Если в той, где лежит файл - то нельзя, там и сам комп древний (с какой-то древней виндовс-сервер времен XP), и пара XP компов туда же лезут.
Хочу: в окно вывести изображение. Изображение скалируется под размер окна, это понятно, но изображение во много раз больше окна.
Поэтому при нажатии мышкой должен происходить эффект лупы, то есть изображение увеличивается, и движением мышки можно двигать обзор (как в просмоторщиках изображений).
Как сделать с минимальным велосипедством и время-забратами? Может что-то готовое есть (желательно бесплатное)
Спс
string str1 = "Strasse";
string str2 = "Straße";
bool areEqual = string.Equals(str1, str2, StringComparison.Ordinal);
Console.WriteLine(areEqual);
areEqual = string.Equals(str1, str2, StringComparison.InvariantCulture);
Console.WriteLine(areEqual);
areEqual = string.Equals(str1, str2, StringComparison.CurrentCulture);
Console.WriteLine(areEqual);
В первом варианте должно быть false, в остальных двух true. Но Мелкософты поменяли библиотеку локалей NLS на ICU в .NET 5.0 в угоду кроссплатформенности и теперь везде получается false. Прогуглил весь Гугл и нашел только вариант с включением NLS обратно - тогда все работает, но при этом теряется кроссплатформенность. Что надо сделать в текущей версии .NET, чтобы и с ICU буква ß раскрывалась как ss и во втором и третьем варианте получалось true?
то тралинг был
>Что надо сделать
Забить хуй.
Определить базовый набор символов, на все что за него выходит кидать отлуп.
Пусть на отдающей стороне ебутся с нормальизацией данных.
кто вообще решил что ß == ss
бред какой то
поэтому зачем возвращаться к бреду если новый вариант правильнее
Почему sizeof(System.Char) == 2, а Marshal.SizeOf(System.Char) == 1?
Гуглю. Вопрос популярный. Проблема в том, везде копипастят однотипные тупорылые ответы, типа:
>Marshal.SizeOf returns the size after the type has been marshaled, whereas sizeof returns the size as it has been allocated by the common language runtime, including any padding.
Как это вообще работает, когда банально (int)'ж'=1078? Это вот вообще никак и нихуя не влазит в 1 байт.
var row = dbContext.TestTable.AsNoTrackable().First(); .
Будет ли это разные области памяти или будут ссылка на одну? Если разные - можно ли как-то реализовать так что бы инициализировалась только одна область в памяти? Все записи из бд условно ридонли и меняться во время работы не будут.
inb4: грузи сразу всю таблицу в память.
> такая декларативность не дается бесплатно
Какая даётся дешевле?
Поподробнее с этого места, плиз.
Значит наоборот включи СМБ1 в своей новой системе. В десятке. Самостоятельно найдешь? Или скриншот кинуть?
такая же, но с оптимизациями
например перегрузка ToList, которой можно передать размер если его знаешь.
Или же учитывать, что может быть не только IEnumerable, а сразу списки. Вон внутри ToList используется интерфейс IIListProvider, который дешевле позволяет делать, но разве обычный List<T> хоть где то реализует этот интерфейс
ну а для особо упоротых что то типа https://habr.com/ru/post/648529/
Спс, почитаю.
while (Interlocked.Read(ref counter) > 0)
Thread.Sleep(1);
Пока в других потоках дёргается этот counter.
А какие ещё альтернативы? как сделать то-же самое но через WaitHandle, например?
блин на самом деле всё здорово, но он же сигналит при достижении 0 если судить по документации.
а у меня может быть 0 с самого начала.
Да, мощный ответ, спасибо.
На русском глубокие ответы со знанием дела. На английском только мусор, копипаста документации без осмысление. Будущее программирования за РФ.
и он сразу будет в нужном состоянии. из доки
"Если initialCount значение равно 0, событие создается в сигнальном состоянии."
С указателями на статические методы всё вроде просто.
Но можно ли как-то через fixed или ещё как получить указатель на метод инстанса?
И команды, познакомился с ООП и тд*
Задолбался, ни один пример не могу сделать по книжке Фримана, ASP.NET полностью поменялся и старые примеры не работают, выдают миллион ошибок.
ну если не ошибаюсь, то в первом случае компилятор просто сгенерит ламбду и впихнет ее как статик метод в этот же класс (потому что нет захваченных переменных инстанста), а во втором будет каждый раз создавать делегат
В настоящем же ООП стиле надо стремится всё делать через конструкторы, передавая более маленькие сущности большим, как бы оборачивая простой функционал более сложным. К примеру,
A a = new A(
new B1(
new C()
),
new B2(
new D1(), new D2(), new D3
)
);
a.run();
yegor256 (Yegor Bugayenko) вы тредом ошиблись. Жабисты двумя этажами ниже.
Или я не понимаю как это работает?
Почему он налл, и как это фиксить?
никто от конструкторов не отказывался. это бред. родной DI контейнер от майков вообще в принципе не умеет в свойства.
Просто сделали сахар для случаев когда нужно использовать именно поля - удобнее и защита от потенциальных JIT проблем.
все понимают. чего там не понимать то. По факту просто анонимные функции без имени - только параметры и тело.
а придумали чтобы на каждый чих не создавать отдельные методы. Попробуй LINQ с методами писать - запаришься
не говоря уже о том, что лямбды можно кешировать
Откуда там параметры берутся? В обычной функции мы делаем явный вызов и передаём ей значения для обработки, а тут какие-то левые параметры всплывают и куда потом результат идёт и что является результатом?
>Откуда там параметры берутся?
из сигнатуры делегата же.
где то что то принимает допустим Func<string,char, int>
из чего следует, что это сигнатура метода принимающего строку и чар и возвращающий int
ему можно скормить метод
int <MethodName> (string a, char b) - это сама себе сигнатура подходящая под Func<string,char, int>
или же лямбду
(a, b)=>42
тут типов нет, но лямбда не может существовать в вакууме. Она ассоциируется с какой то сигнатурой.
ты не можешь написать var func = (a, b)=>42, ведь так компилятор реально не знает что за a,b
поэтому только так
Func<string, char, int> func = (a, b) => 42;
то есть func требует чтобы ей присвоили что-то подходящее под сигнатуру Func<string, char, int> (делегаты же)
Так и при передаче лямбды в метод. Там есть ожидающая сигнатура. и типы будут взяты из сигнатуры Func<string,char, int> (поэтому компилятор подсказывает типы) и если лямбда не нарушает (допустим возвращает не int, а bool), то все будет работать
Попробую даже понятнее
Вот кто-то принимает Func<int, int, bool>
Конечно ты можешь передать ему метод
private bool Foo(int a, int b) => a>b;
но писать каждый раз именованный метод ради использования в 1 месте и засорять им класс (а в многоэтажном LINQ такого может быть навалом и все это как методы делать еще и имена придумывать)...ну такое себе
Поэтому рождаем метод на месте. Сигнатура у нас уже есть - Func<int, int, bool>, а значит нам нужно предоставить реализацию. При этом компилятор знает количество и типы параметров и тип результата. И область видимости не нужно. И имя - делегату на имя плевать.
Поэтому просто выбрасываем все лишнее для реализации
private bool Foo(int a, int b) => a>b;
и что же остается...
(a, b) => a > b;
хз о чем ты, но похоже тебе нужен просто RestClient, только не такой декларативный как refit, а что-то вроде удобного https://github.com/jgiacomini/Tiny.RestClient
>>345825
Как оказалось, существует метод:
Marshal.GetFunctionPointerForDelegate
Он легко позволяет получить указатель на метод инстанса. Например, вот так:
Func<char, char> del = Some_instance_method;
void fptr = Marshal.GetFunctionPointerForDelegate(del).ToPointer();
delegate<char, char> pointer_to_some_instance_method = (delegate*<char, char>)fptr;
Этот код валиден. Но проблема в том, что нигде нет оператора fixed. Как GC поймёт, что не нужно пока удалять делегат, или же тот инстанс, на метод которого он ссылается???
Func<int,int,bool> это сигнатура с 2мя параметрами. На имена параметров ему плевать. Типы он сам знает.Так что a, b в ламбде берутся оттуда же, откуда и в методах - просто придумываешь как назвать параметры.
никак не поймет. поэтому в справке к Marshal.GetFunctionPointerForDelegate есть заметка
"Делегат необходимо вручную не собирать сборщиком мусора из управляемого кода. Сборщик мусора не отслеживает ссылки на неуправляемый код."
А как туда конкретные значения попадают? Обычную функцию мы вызываем явно, а тут как она вызывается?
точно так же, как попадают в метод, если мы передаем метод.
>Обычную функцию мы вызываем явно
не вызываем мы ее явно. Кто-то ждет Func<,,> и мы передаем ему метод, но этот кто-то работает с делегатом. В этом и есть смысл - делегат он как интерфейс, только для методов. И мы можем подсунуть ему существующий метод или создать анонимный на месте (лямбда)
> а что дальше ?
1. Сделай калькулятор.
2. Сделай КРУД-менеджер домашних финансов.
3. Сделай бочку (игра про пилотов-асов).
4. Выложи всё сделанное на гитхаб, добавь ссылку в своё резюме.
5. Воруй, убивай, еби гусей, жди ответного гудка.
>>345858
Вот тут всё можно увидеть интерактивно, как это выглядит:
https://sharplab.io/#v2:D4AQTAjAsAUCDMACciDCiDetE+UkALIgLIAUAlJtrjSAKwA8AlgHYAuANIq2wHyIAzCFwFgR8ANzUaOaTKGIAvIlIAPSov6rEAKkSqpMGbjk1RSleqVbd+2wdMmjxwUmUBlAI6GXiRzhAIAE5SIVIIAAYI8nIfF0CQ0XComLjjBND4ZOjYuQBfOULnAIgANm52RC9SHn1KLGKZEAB2Oz0HRoKYPKA===
Для моего кейса разница 20% в пользу указателей на функцию по сравнению с делегатами.
Не в разы конечно, но тоже стоит иметь ввиду.
https://pastebin.com/2MpdzDTq
Спасибо.
Вставил код из бенчмарка. В каком месте DelegateArrow() там без аллокаций, если он делегат аж через целый дополнительный класс разворачивает?
и кеширует его в статическом поле <>9__0_0
А что там сложного-то?
Если классический - то это тот же SQL, только селект не в начале, а в конце.
Если тот что через Fluent, ну, тоже не понимаю что тут такого страшного, если каким-нибудь fluent-билдером пользовался, то суть должна быть ясна.
А по сути - ну вот ты бы без линку писал:
public IEnumerable<T> Where<T>(IEnumerable<T> source, Func<T, bool> predicate)
{
foreach(var i in source)
if(predicate(i))
yield return i;
}
Кто отказался и где?
Или ты предлагаешь в анемичной модели и DTOшках конструкторы лепить, чтобы сериализаторы и мапперы - просирались, а тебе приходилось это говно руками хуячить?
В остальных случаях - все и везде юзают конструкторы. То что обычно он один - это другой вопрос.
Ну серьезно. Я не понял с чего ты это взял. Я вообще за последние лет 5-7 нигде не видел, чтобы люди в своем коде что-то типа:
myApplicationContext.Logger = serviceProvider.GetLogger();
myApplicationContext.Repo = serviceProvider.GetRepo<User>();
А раньше такая хуйня - повсеместно была. И хорошо если такая, а не хуйнть синглтон и уже в самом классе тащить все что хочется через него, ууу, бля, как вспомню...
Не понял зачем.
Тем более что в примере того что ты приводишь - это выглядит как обычный жсон, который ты буквально можешь вот без лишних движений получать апи-контроллерами.
Если у тебя какие-то более специфичные штуки, типа данные из форм или вообще какая-нибудь залупа хитрая, то ты лучше так и пиши, а то на текущий момент я не понимаю почему ты не можешь сделать так:
[ApiController, Route("products")]class MyController: ControllerBase{
[HttpPost]public void PostProduct(ProductModel model) => Console.WriteLine(model.Username);
}
нужно создать временный файл, куда все записать и запустить как ShellExecute путь к этому файлу file:// и он откроет в дефолтном браузере
Можно без временных файлов, открыть сервачок на локалхосте и передать шеллу ссылку на него.
Да.
> получать апи-контроллерами
Да. Но мне не нужно получать. Мне нужно давать. Я не понимаю как составить post/put/patch запрос со сложным content`ом
Ладно, я разобрался. В либе автор накрутил хуйни поэтому я не мог понять как фиксить. А это просто жсон
6. Вкатывайся в пятерочку
Дак там не на русском
Да вот этот способ интересует.
Где-то, возможно даже здесь, видел код в одну строчку, без всяких созданий файлов, который запускал браузер и выводил hello world из консольного приложения C#.
Но не могу теперь найти.
>>346372
1. Винда иногда рандомно блочит программное создание и перезапись файлов, ну может в мои документы и roaming ещё можно из васянопрограммы срать, а больше никуда нельзя.
2. Мусорить файлами, а возможно даже изнашивать ресурс SSD, мне не очень нравится.
в темп же писать. для этого эта папка и придумана
А запускать вебсервер - это HttpListener расчехлять. Ну или kestrel, но кто знает как его запускать в десктопном приложении как просто дополнительный модуль, а не как вот асп.нет сделано? никто не знает. Я видел способ на гитхабе, да потерял.
Nick Chapsas
Хотя какие нахуй виоблогеры? Ты по ним не вкатишься, это пузатымм сениорам когда скучно можно посмотреть
Или чтоб с еще большей скоростью плодить новые микросервисы, которые отваливаются как сучки и это называют "фолт толеранс"?
560x944, 0:24
жаль что потом и вся бутылка до дна не приблизит , но все равно выпьется
Мне нужно для сохранения мотивации
Не. Не помогает. Никакие манипуляции с encoding не дают нужного результата
Вот у меня есть евент который после какой-то логики рендерит часть представления страницы.
И есть джс который должен что-то с ней сделать.
Каким образом блазор должен узнать что конкретный див уже отрендерил на станице и можно безопасно вызывать функцию которая на нем оперирует?
1. Добавьте .NET 6 и C# в шапку
2. Добавьте нормальную аватарку, а не этих блядей крашеных попущеных
>1. Добавьте .NET 6 и C# в шапку
Сам добавь.
>2. Добавьте нормальную аватарку, а не этих блядей крашеных попущеных
Сам добавь.
>а вы перекатчики
Торжественно принимаем тебя в перекатчики. Теперь можешь не только указывать.
sorta govna
вбив.рф?
> только vim, только хардкор
А там можно навести мышку на класс или на метод и получить всплывающей подсказкой краткую документацию по использованию? Нет? Ну вот и пшёл нахуй.
Выполнять дотнет-код можно только в одной "ос" на дотнет-платформе. А вот сама платформа доступна сейчас на нескольких ос. Это интерпретатор. Это скрипты. Хоть их джит-компилятором назови, хоть виртуальной машиной. Суть та же, что и во времена хтонических пращуров на фортране.
Получается на линуксе запускается эмулятор винды и в нём выполняется дотнет-код?
В некоторых моментах, да. Прям чувствуется винда. Виндовс-вэй.
Все понял, Console.Read() возвращает char, который при конвертировании в double конвертируется в ASCII-код символа. Console.ReadLine() возвращает string, которая уже конвертируется нормально
Да я чет думал, что разница между Read и ReadLine в том, что ReadLine после ввода делает перенос строки, а Read нет. Ну типа как Write и WriteLine, а оказывается нихуя не так
>Какой фреймворк учить: ASP.NET Core, ASP.NET Core MVC или ASP.NET Web API?
ASP.NET Core включает в себя MVC и Web API.
Почему обычный C# без проблем изучается, а этот ASP.NET какой-то взрыв мозга? Какие-то конфигурации, маршрутизации, логирование, хуирование. И это всё ещё ни как не приближает к собственно к самому написанию приложения, где ещё надо соблюдать магию соглашения, которые работают по левой пятке разработчиков.
Когда пытаешься написать свой сайт, то каждый раз спотыкаешься, потому что просто не знаешь как это сделать, а чтобы понять как надо изучать 100 страниц мануалов. А потом следующую фичу и ещё 100 страниц. В итоге знаешь дофига всего про кишки ASP.NET, но сайт так и не написан.
Кто вообще этот бред придумал? Может ему лечится надо, а не фреймворки разрабатывать.
Написано - Children - это не статическое свойство, и может применяться только с экземпляру класса (что логично, откуда у статичного класса потомки?)
Потому что всё это облегает жизнь когда ты начинаешь понимать это. Сам ведь наверняка ахуевал с линка и его удобности, тут тоже самое. Вместо говна из жопы на пыхе майкрософты дали нам костяк и основу того, как выглядит веб приложение. В итоге код написанный для веб приложения может повторно использоваться в каком-нибудь десктоп приложении.
>А вот сама платформа доступна сейчас на нескольких ос
WPF/UWP тоже часть дотнет. как мне выполнить их на линукс?
у тебя есть экземпляр!!! Canvas на форме ( у него еще имя вида Name=""/x:Name="" в XAML)- в него и добавляй. Чего ты в статический класс добавить пытаешься.
Ну, при остром желании - можно.
Только вот нахуя? Если ты нормальный кодер - чужое апи ты изучаешь перед применением, а свое пишешь так, чтобы никаких подсказок нахуй нужно не было.
Серьезно. Вот я спизжу в описании своего апи или тупо забуду в ходе фикса обновить описание, ты заюзаешь, обосрешься, полезешь гуглить. Если бы был нормальным человеком - ты бы сразу загуглил что за апи, как работает и миллион подводных камней еще до применения запреметил и писал бы нормально. А в командах так вообще писать комменты - дурной тон.
Нет не часть.
У дотнета есть спецификация. WPF-UWP-Forms - это технологии которые поверх нахуячили. Как и ASP кстати, но ASP - портировать таки ЧУТКА легче, чем разбираться с зоопарком графических апи.
А так - ну, ворд на плюсах написан, хули я не могу ворд на линуксе запускать? Плюсы не кроссплатформенные штоли?
> разбираться с зоопарком графических апи
Нынче графические тулкиты собраны по уму. Сразу генерируешь шаблон исполняемого файла, в котором указано, что на винде подключить WPF, на линуксе GTK, на маке - что там маковское, на андроиде - что там андроидовское.
И всё.
Затем ты описываешь платформонезависимое окно, которое собирается как библиотека-зависимость для вышеуказанных частей общего шаблона. Ваще заебись придумано. А майкрософт так не смог.
Я про System.Windows.Threading.DispatcherTimer
Выглядит как рывки, хотя если в абсолютно такой же ситуации запустить через бесконечный цикл в делеем, то все збс. Что такого в этих таймерах и для чего они нужны?
Делаю так:
private void Begin()
{
DispatcherTimer Timer = new DispatcherTimer();
Timer.Interval = new TimeSpan(5);
Timer.Tick += Update;
}
private void Update()
{
Debug.Print(Mouse.GetPosition(Canvas1).ToString);
}
На самом деле я бейсикоблядь и завидую, что вот эта хуйня:
AddHandler Timer.Tick, AddressOf Update
у вас пишется так:
Timer.Tick += Update
Честно, заебался простыни писать, особенно когда надо подписаться на пятерку эвентов, а потом еще и отписаться.
... Еще забыл стартануть таймер в коде, ну вы поняли.
Правильно я понял, что таймеры нужны для долгосрочных работ, где важно малое влияние на батарею и частота должна быть начиная от 1мс и выше?
А если надо что-то быстрое и точное, вплоть до тиков, то лучше юзать бесконечные циклы.
>Если ты нормальный кодер - чужое апи ты изучаешь перед применением
Да изучаю, только мне нахуй не уперлось держать в памяти описание тысячи методов и каждого параметра к ним.
>А в командах так вообще писать комменты - дурной тон.
Ой, а вот за это - сразу нахуй.
Мое любимое развлечение придя в новую команду, доебывать старожилов на тему "а почему тут вот так сделали, а не так", "а чем отличаются вот эти два метода", и т.д. Ну и хуесошу их на тему того, что "одна строчка коментов на тему почему здесь так, а не иначе, сэкономила бы тебе целый час пиздежа со мной."
Коменты не нужны там где идет простая алгоритмика, а вот там где у тебя предметная или бизнес-логика, то ты охуеешь в этом говне разгребаться. Особенно если аналитики на пару с заказчиками мудаки и для них проблема составлять внятное ТЗ и инструкции.
Я вот его и смотрю. У меня наклевывалась виза в Канаду, думал легко там устроиться в первую попавшуюся компанию .net разрабом за еду, но в одном видосе он рассказывает, что в Канаде дохрена безработных прогеров и дикая конкуренция.
А когда ты кому-нибудь признаешься, что пишешь на шарпе, то у тебя не возникает чувства стыда?
Раньше возможно, но после появления Core шарп дал пососать всем конкурентам, в СНГ он уже обошел Джаву. Главное, что за спиной шарпа стоит величайшая ИТ компания вселенной.
>в СНГ он уже обошел Джаву
Чем же, блять? Вы можете сидеть в манямирке, в котором ява - говеный язык, фи-фи-фи, но уж в СНГ количество вакансий на яве и зарплата явистов побольше будут, чем у шарпистов. Это просто факт нахуй. Да и по миру в целом это тоже так, вроде.
>оличество вакансий на яве и зарплата явистов побольше будут
что не отменяет факта что ява говно
и будучи жавистом - будешь жрать это говно бочками без вариантов.
Недавно встретил знакомого на улице и он спросил чем сейчас занимаюсь. Я почему-то не решился сказать, что изучаю шарп и ляпнул, что изучаю джаву, хотя на самом деле учу шарп.
А взявшие Иисуса отвели Его к Каиафе первосвященнику, куда собрались книжники и старейшины. Петр же следовал за Ним издали, до двора первосвященникова; и, войдя внутрь, сел со служителями, чтобы видеть конец. (…) Петр же сидел вне на дворе. И подошла к нему одна служанка и сказала: и ты был с Иисусом Галилеянином. Но он отрекся перед всеми, сказав: не знаю, что ты говоришь.
Когда же он выходил за ворота, увидела его другая, и говорит бывшим там: и этот был с Иисусом Назореем. И он опять отрекся с клятвою, что не знает Сего Человека.
Немного спустя подошли стоявшие там и сказали Петру: точно и ты из них, ибо и речь твоя обличает тебя. Тогда он начал клясться и божиться, что не знает Сего Человека. И вдруг запел петух. И вспомнил Петр слово, сказанное ему Иисусом: прежде нежели пропоет петух, трижды отречешься от Меня. И выйдя вон, плакал горько.
>ява говно
Похуй. О том, какой язык лучше, пиздят двачата и швабродебилы, устраивая массовые холивары. Адекватному человеку вообще похуй, как часто новые обновления, какие там фичи, какой там перформанс, критерий один - многаработы и многаденег. И джава ебет шарп в этом плане, даже вы это не отрицаете. Ну вот и все нах.
Конкуренции тоже много. Миллионы индусов, китайцев, СНГ итд итп знают Java идеально.
С недавнего времени еще и негры добавляются
Например, я хочу наследовать Controls.Grid, но чтобы при изменении свойства .Width автоматом менялось свойство .Height. Я не ебу как они там под капотом работают, чтобы переопределить целиком.
В переопределенном методе вызываешь метод родителя, а после этого пишешь свой код
>какие там фичи, какой там перформанс, критерий один - многаработы и многадене
поэтому мне и жаль жавистов. шарпист зарабатывает столько же, но писать куда приятнее.
Особняком стоит котлин. Самому дико нравится его выразительность (но не рантайм ибо это жава рантайм), но мы то говорим о жаве
На котором только цифры, математических операций нет. Эксклюзив для зумеров, миллионы скачиваний, видосы на тик-токе.
Ты что, сейчас модно по отдельному приложению на каждую цифру с синхронизацией через облако.
> одна строчка коментов на тему почему здесь так, а не иначе, сэкономила бы тебе целый час пиздежа со мной
Угу. И в коменте - пиздежь, потому что коммент писался под первый кейс, а спустя 100500 итераций - от того кейса нихуя не осталось.
Тем более что ты спизданул про предметную логику - на все ответ будет: потому что вот такой кейс, вот тебе ссылка на тикет. Все.
И да, если ты не способен писать нормальный код, который понятен без коментов, то ты еблан. Коменты допустимы исключительно в случаях хаков и всяких костылей по обходам багов, в остальных случаях их пишут только хуесосы и студенты.
Его нельзя "выучить". Огромный фреймворк.
За неделю
> На котором только цифры
Хороший сарказм, но не наблюдательный. Я в юные годы освоения кодинга, как этот анон тоже такие калькуляторы делал. Одни массив на кнопки, с одним обработчиком, второй массив на операции, с другим обработчиком.
Дааа... Были времена.
> я бейсикоблядь и завидую
> Честно, заебался простыни писать
Первый шаг к становлению на путь истинный. Что тебя останавливает? Тупо привычка. Вместо
> sub foo()
> end sub
пишешь
> void foo()
> { }
Это же так просто!
А как божественнен сишный for! Хоспаде! Вызывает мгновенное привыкание!
> for ( объявляешь переменную цикла; объявляешь условие выхода из цикла; объявляешь выражение итерации переменной цикла) { }
Просто охуенно!
Вот такие пидоры как ты, как раз и ленятся, не то что коменты актуализировать, а даже ссылку на тикет указать. И в коммит-меседжах пишут хуйню вроде "пофиксил баг".
Нахуй путешествуй.
Даже не помню, когда последний раз использовал for со счётчиком
Да я знаком с синтаксисом шарпа, и так уже гуглю ответ для него.
Просто уже пишу проект на VB, и переходить на середине — тупо. Приходится иногда ЗАВИДОВАТЬ.
> sub foo()
> end sub
У студии автокомплит, я пишу только первое. Зато визуально знаю где конец класса, где конец метода и где конец цикла. В C# без наведения курсора не разберешься. Да знаю я, что если написал столько вложенной хуйни, что уже непонятно, то это уже вызывает вопросы.
А еще точку с запятой считаю натуральным каргокультом. В бейсике если мне нужно написать несколько строк в одной визуальной строке, то только тогда я ставлю идентификатор конца строки. В си подобном синтаксисе нужно в 95% случаев дрочить точку с запятой, чтобы это пригодилось в 5% случаев.
Но все это решаемые проблемы автоматическим дополнением. На C# я пранирую перейти, как только закончу свой проект. Я и так с VBA перешел, для меня VB.NET - сплошные ништяки.
>Timer.Tick += Update
вот только евенты в шарпе неудачное решение. Вроде бы очевидное - "хотим добавлять методы как хендлеры и вот вам немного сахара", но дико неудобно вышло
Чому класс PathGeometry спокойно наследует Geometry, а я получаю пизды за такое?
Пикрил1 — метаданные PathGeometry. Пикрил2 - мой класс.
Да хотя бы классический Subscribe возвращающий IDisposable токен. + перегрузка принимающая lifetime
зе сейм
Ясно. Извне никак не наследовать.
Есть устройства: принтеры, лампочки, розетки, колонки, чайники.
Я хочу сделать приложение, в котором пользователь бы мог все это добро подключить, а затем управлять, настраивать, смотреть состояние, мутить скрипты.
Так вот. Я сделал базовую имплементацию: устройства сами могут зарегистрироваться. Я могу все это делать.
Проблема. Все это сделано отдельными приложениями, которые на шарпе, одно по модбасу шлет пакетики, другое по snmp, третье жсоны гоняет. У каждого устройства, в зависимости от протокола - нужно сначала настроить к какому приложению слать запросики. Ну и дальше - проблема в том, что протоколы придумывали баки и они между собой так себе совместимы: в одном - 1 == true, 2 == false, в другом 1 == true, 0 == false, в жсоне - true == true ну вы поняли. А какие-то специфичные данные, типа яркости лампочки, так это же пиздец, вот по такому модбас-адресу лежит яркость.
Пока что для себя - я как ЭКСПЕРТ - знаю что и куда слать, допустим - 255 максимальная яркость, 0 - выключить лампочку. По такому-то OID - посмотреть количество чернил в принтере. Но хочется какой-то универсальности, чтобы я мог какую-то дашборду иметь и данные не зависили от протокола и типа устройства.
Но как это сделать?
Я думал о такой вот структуре:
есть абстрактное устройство. Device
у него есть абстрактный набор данных, методов и событий(Data, Actions, Events)
Данные - что можем почитать или иногда записать
Действия - что можем сделать, например выключить лампочку или перезагрузить роутер
События - некий триггер(настраиваю я) или инициативное сообщение(если устройство в него умеет), который нужен чтобы не пропустить что-то(например, чайник закипел - чайнки перешел в состояние закипел - я это считал и на дашборде - вывелось - "чайник закипел")
Но вот как это связать с конкретными устройствами и протоколами? Вот допустим в SNMP - есть дохерища текстовых конвенций, типа никаких тебе дробных чисел, тебе прилетит Integer и если у него синтаксис fixDiv100 - то это значит что надо на 100 разделить, чтобы валидный результат получить, если там IPAddress - нужно посмотреть длину строки октетов, понять что прилетел IP-адрес такой-то дилны или такой-то и потом привести его к виду IPv6 или IPv4, в Modbus - 255 - это вообще что угодно может быть в зависимости от спецификации устройства, смотри карту регистров и понимай.
Так вот. Может быть у вас есть какие-то предложения относительно того как это можно ООПшно и конфигурируемо сделать? Ну, типа допустим я смотрел как делают опенсорсные проекты похожего толка - и там либо руками все это прописали, либо - делают основу в виде форматтеров-конвертеров и хитрых конструкторов, но это ж пиздец заебешься настраивать, если у тебя нет базы по нужным устройствам.
Есть устройства: принтеры, лампочки, розетки, колонки, чайники.
Я хочу сделать приложение, в котором пользователь бы мог все это добро подключить, а затем управлять, настраивать, смотреть состояние, мутить скрипты.
Так вот. Я сделал базовую имплементацию: устройства сами могут зарегистрироваться. Я могу все это делать.
Проблема. Все это сделано отдельными приложениями, которые на шарпе, одно по модбасу шлет пакетики, другое по snmp, третье жсоны гоняет. У каждого устройства, в зависимости от протокола - нужно сначала настроить к какому приложению слать запросики. Ну и дальше - проблема в том, что протоколы придумывали баки и они между собой так себе совместимы: в одном - 1 == true, 2 == false, в другом 1 == true, 0 == false, в жсоне - true == true ну вы поняли. А какие-то специфичные данные, типа яркости лампочки, так это же пиздец, вот по такому модбас-адресу лежит яркость.
Пока что для себя - я как ЭКСПЕРТ - знаю что и куда слать, допустим - 255 максимальная яркость, 0 - выключить лампочку. По такому-то OID - посмотреть количество чернил в принтере. Но хочется какой-то универсальности, чтобы я мог какую-то дашборду иметь и данные не зависили от протокола и типа устройства.
Но как это сделать?
Я думал о такой вот структуре:
есть абстрактное устройство. Device
у него есть абстрактный набор данных, методов и событий(Data, Actions, Events)
Данные - что можем почитать или иногда записать
Действия - что можем сделать, например выключить лампочку или перезагрузить роутер
События - некий триггер(настраиваю я) или инициативное сообщение(если устройство в него умеет), который нужен чтобы не пропустить что-то(например, чайник закипел - чайнки перешел в состояние закипел - я это считал и на дашборде - вывелось - "чайник закипел")
Но вот как это связать с конкретными устройствами и протоколами? Вот допустим в SNMP - есть дохерища текстовых конвенций, типа никаких тебе дробных чисел, тебе прилетит Integer и если у него синтаксис fixDiv100 - то это значит что надо на 100 разделить, чтобы валидный результат получить, если там IPAddress - нужно посмотреть длину строки октетов, понять что прилетел IP-адрес такой-то дилны или такой-то и потом привести его к виду IPv6 или IPv4, в Modbus - 255 - это вообще что угодно может быть в зависимости от спецификации устройства, смотри карту регистров и понимай.
Так вот. Может быть у вас есть какие-то предложения относительно того как это можно ООПшно и конфигурируемо сделать? Ну, типа допустим я смотрел как делают опенсорсные проекты похожего толка - и там либо руками все это прописали, либо - делают основу в виде форматтеров-конвертеров и хитрых конструкторов, но это ж пиздец заебешься настраивать, если у тебя нет базы по нужным устройствам.
Ну тебе нужны интерфейсы и какой нибудь паттерн: строитель или фабричный метод. Настраиваешь шаблоны под разные ситуации, а как еще?
Потому, наверно, у каждой компании свой набор устройств со своими стандартами.
А ты хочешь замутить что-то универсальное для всего на свете, но вроде как еще никто этого не смог сделать. Да еще хочешь сделать это в одно рыло.
Адаптер шатает уже созданное. Это чтобы состыковать нестыкуемое, а анон на стадии зайчатия своей идеи.
Внимательно его пост перечитай. У него куча девайсов с драйверами от разных вендоров, с разным АПИ в драйверах.
>Вот допустим в SNMP - есть дохерища текстовых конвенций, типа никаких тебе дробных чисел, тебе прилетит Integer и если у него синтаксис fixDiv100 - то это значит что надо на 100 разделить, чтобы валидный результат получить, если там IPAddress - нужно посмотреть длину строки октетов
Делаешь класс для каждого такого случая: SNMP, fixDiv100, IPAddress. И основываешь их на интерфейсе (абстрактном классе) типа IProtocol. А как еще? Если каждый из них тоже имеет кучу вариаций, то дробишь еще на более мелкие классы и так же объединяешь общим интерфейсом.
У тебя в итоге должны быть типа наборы c общей абстрактной базой, которые ты перетасовываешь в зависимости от нужной конфигурации, которую ты сам удачно описал.
>>351667
Адаптер служит чтобы рихтовать классы, которые трогать уже нельзя, потому что он уже активно используется повсюду. При чем здесь он?
>>351684
>У него куча девайсов с драйверами от разных вендоров, с разным АПИ в драйверах.
Адаптер это декоративная хуета, он не является стратегией. Грубо говоря, нужен чтобы милицию переименовать в полицию, но эта полиция все так же будет выполнять обязанности милиции.
Надеюсь меня не посадят на бутылку за данную аналогию.
>Грубо говоря, нужен чтобы милицию переименовать в полицию
(я другой анон).
Как бы это и требуется. Никто не ожидает от принтера что он начнет варить кофе.
Задача элементарная
1 определяем общий(е) интерфейсы. IDevice если нужно так обобщать или IPrinter, Ичайник и так далее, если нужно работать с ними по разному. Придумывается общий контракт
2 Для тех устройств что есть что-то готовое пишется обертка для реализации этого общего контракта (собственно сами адаптеры)
3Для тех, для кого нет ничего, пишется реализация на основе этого общего контракта. И будет ли это прямо реализация на месте (автор упарывается в YAGNI) или "немного подумаю сделаю обособленную реализацию и свяжу через адаптер то есть как в пункта 2"...зависит (с)
ps2: да гребанная кнопка стикеры поверх вводимых букв. Какого хера она делает поверх тектареа ввода текста
>ps2: да гребанная кнопка стикеры поверх вводимых букв. Какого хера она делает поверх тектареа ввода текста
Дизайнер — уебан. Стикеров давно нет, а счетчик символов можно опустить на панель инструментов. А пока приходится ставить пробелы, которые забываешь убрать и каждый раз поучается вот такая пустая ебала ↓
>2 Для тех устройств что есть что-то готовое пишется обертка для реализации этого общего контракта (собственно сами адаптеры)
Насколько я понял, готового нет. У него наоборот нейминг может сохраняться, а вот внутрянка имеет разную логику в зависимости от спецификации устройства. Собственно из-за этого и бугуртит.
У него есть функция Trigger. Но вариантов обработки её аргументов великое множество:
а) 1 == true, 2 == false,
б) 1 == true, 0 == false,
в) true == true
Я кажется понял к чему ты предлагаешь адаптер. Если функция имеет базовую логику и ПЛЮС к ней надо добавить еще какую-то логику, то тогда адаптер нужен. Вообще тут зависит от задачи анона. Если ему нужно поменять логику после работы функции, то Адаптер подойдет, а если до, что я бы использовал Строитель. А на самом деле и то и другое.
Вообще эти паттерны ебень какая-то. Сферический конь в вакууме.
>Если ему нужно поменять логику после работы функции, то Адаптер подойдет
ты путаешь с декоратором. Адаптер нужен для того чтобы реализовать контракт. Язык же со статической типизацией.
>Вообще эти паттерны ебень какая-то
Паттерны суть задокументированные общие решения. Прочитав их форматируешь мозг так структурировать код и понимать чужие структуры. Но это не значит что без чтения книжек нихера не знаешь - вовсю используешь паттерны, просто названия им не даешь
Так что сила паттернов в коммуникации и метафорах.
Паттерн дает семантику. Указав в названии класса Adapter ты даешь понять что это адаптер, и посторонний (или ты через год) понимает что делает класс и почему он вообще был создан и его функционал.
>Но вариантов обработки её аргументов великое множество
вообще хз о чем ты. Ему нужен унифицированный доступ к подмножеству девайсов. А значит очевидно унифицированный контракт (интерфейс) - а уже от него все пляшет
https://github.com/saifaustcse/dotnet-developer-roadmap
https://github.com/MoienTajik/AspNetCore-Developer-Roadmap
В чем разница и куда податься, чтобы взяли на галеру за 300ккк в наносекунду?
>у Geometry internal конструктор
Хочу объединить класс RectangleGeometry с классом MyProperties в один единый класс (пикрил).
На самом деле задача иметь RectangleGeometry с доп свойствами. Раньше я брал RectangleGeometry и в свойство Tag(Object) пихал класс MyProperties. Но подумал, может есть более эстетичный вариант? Мне даже не нужны все методы и свойства RectangleGeometry, а только небольшая их часть.
Сперва я подумал, что можно просто создать свой класс EbanoeGeometry, внутри которого создать экземпляр RectangleGeometry и к нему уже обращаться. Но все бы ничего, только вот для какого нибудь Canvas, мой класс это неведомый зверь, потому что в чилдрены Canvas могут добавляться только наследники класса Geometry.
А делать что-то типа такого Canvas1.Childrens.Add(EbanoeGeometry.GetGeometry) чет не хочется. Хочется, чтобы это выглядело прям как собрат RectangleGeometry.
Такое вообще возможно?
>А делать что-то типа такого Canvas1.Childrens.Add(EbanoeGeometry.GetGeometry)
... кроме всего прочего я еще и растеряю дополнительные свойства, это даже не даункаст получается, а кастрация какая-то. Не то чтобы я собирался с Кэнваса получать объект, но мне дурно от такого.
>В чем разница
А те не похуй? Там родмап длинною в жизнь. Пока ты туда дойдешь, уже тыщу раз сам решишь что релаьно нужно.
Просто выдумай себе проект и пытайся максимально по уму сделать, некоторые вещи сами собой начнут напрашиваться. Можешь родмап использовать как основу для выдумывания проекта.
А если сидеть вот так по пунктикам заучивать без привязки к реальным задачам, то быстро вылетит из головы.
Так я пока только базу синтаксиса знаю и могу делать простенькие консольные приложения. А на галеру надо притащить уже целое готовое веб-приложение, развернутое на сервере, наверное еще и с мордой на тс с каким-нибудь фреймворком. Между этим большая пропасть, которую хз как пройти без подобного роадмапа, я понятия не имею, как подступиться вообще дальше.
Кстати кто-нибудь может объяснить почему каждая вторая вакансия на NET это фуллстак? Это из-за того, что шарфик преподают с первого курса и в среде работадателей знание платформы считается дефолтным навыком и типа возможно потребовать себе универсального кодера?
Потому что у нас одни шарашкины конторы? Любая мелкая фирма не может позволить себе большой штат сотрудников, поэтому нанимают себе и швеца, и жнеца, и на дуде игреца. Предполагается, что ты будешь работать за пятерых, а платить тебе будут 0.2 от зарплаты одного.
Даже среди дизайна такая же херь. Я сначала гордился, что и рисовать могу, и 3д делать, и в CADах работать, и даже программировать. А потом оказалось, что таких как я только в шаражки и берут. Но тут нюанс в том, что таким фирмам нужно знать все, но на поверхностном уровне.
С другой стороны это вписывается в логику обучения: от общего к частному. Учишь все на свете поверхностно, с такими скилами тебя зовут в шаражку, где ты оттарабаниваешь несколько лет, а потом уточняешь специальность и переходишь в более приличное место. Ну это я с точки зрения профессии десигна пишу, но думаю везде так.
Если захочешь наебать систему и задрачивать со старта что-то одно, то полно примеров среди художников, которые задрачивали онли пошив одежды и щас глубоко соснули, потому что заказов нет, а перебиться на чем-то менее прибыльном не в состоянии из-за отсутствия других знаний. Короче, жизнь тебя обязательно выебет, так что не парься и решай задачи по мере их поступления.
Сам умею в стандартный шарп, Рихтера перечитывал недавно и выучил фишки из новых версий.
.Net Core web api
Entity Framework новый тоже подучил.
Умею работать с CQRS, Mediatr, Automapper.
Виндовс формочки, куда же без них.
SQL тоже знаю.
В принципе знаю, где меня на собеседовании могут выебать, ибо уже до ковида ходил на собесы, но не получилось из-за проблем с военкоматом, сейчас все куда сложнее наверное будет.
Что посоветуете подучить?
и когда не любят EF со всеми его заморочками. Есть огромное количество других ORM
Ну так-то первоначально калечный вариант хранить класс со свойствами в тэге дает куда больше возможностей.
А вот это как раз уже и выглядит как костыль
Правда тут проблема именования ведь Tag как то по названию не подразумевает "доп свойствА",но по факту для этого придуман.
Ну если зырить в корни, насколько я помню, в vba тэг был стринговым. Это в .NET его сделали объектом, а в MDSN так и пишут
>Хранит дополнительную информацию об объекте.
Лучше бы они какую нибудь хуету замутили, чтобы можно было делать обертку поверх класса не трогая базу. И все эти ваши Декораторы и Адаптеры проблему не решат.
Алсо, я экстеншн метод сделал и у меня идет обращение не к тэгу, а к Properties, да еще и возращает нужного типа.
Кстати, нет какого нибудь сахара с приведением к типу на лету?
А то мне приходится всегда делать так:
Object sender
Rect R = sender
R.Width
А вот так иногда может выдать ошибку:
sender.Width
Теория на ASP.NET собес:
1) Пайплайн стандартных middleware и что делают: CORS, Authorization, Model binding, Model validation, Action filters, Exception filters. Зачем понадобится написать кастомный middleware.
2) Model validation: как реализована, ModelState (структура и API), FluentValidation nuget.
3) Model binding: атрибуты FromQuery, FromBody, FromRoute, FromService, зачем может понадобиться custom model binder.
4) Dependency Injection: Singleton/Transient/Scoped.
5) Action filters (зачем и примеры стандартных). Exception filters.
6) HTTP/REST: принципы, семантика глаголов, коды ответов.
7) Authentication: OAuth/OpenID flows (Implicit, PKCE), Azure Active Directory, JWT (refresh/access token), SSO, ASP.NET Identity.
8) OData.
9) Microservices: monolith vs microservice (pros/cons), как реализовать распределённую транзакцию (2PC, SAGA), коммуникация (HTTP, message bus), CAP теорема, как реализовать high availability.
10) Нормализация данных: что это и зачем, нормальные формы, как организовать 1-to-1/1-to-many/many-to-many отношения в SQL бд.
11) SQL: View vs Materialized View, Index (когда ставить, когда не ставить), операторы (отличие UNION/UNION ALL).
12) Entity Framework: __EFMIgrationHistory, как смапить сущность без первичного ключа (SQL View), какие ограничения, трансляция деревьев выражений (как реализовать кастомные операторы, как зафорсить client evaludation), AsNoTracking(), ChangeTracker, FluentAPI vs Data Annotations, Disconnected graph management (кейс: смержить 1-to-many дерево пришедшее с клиента в бд через EF).
13) Unit testing: отличие in-memory provider EF от реальной бд (Include-ы). XUnit (отличие от NUnit/MSUnit).
14) Знания/опыт работы с Cloud Computing провайдерами (AWS, Azure, GCP): знакомые сервисы, сертификаты.
Задачи на ASP.NET:
1) Как реализовать валидацию на уникальность Email и вернуть клиенту JSON с остальными ошибками стандартной валидации.
2) Есть REST Web API на ASP.NET Core + Entity Framework Core, есть веб-клиент, который с ним общается через JSON. На клиенте отображается pageable грид. Как будет выглядеть формат JSON-объекта-запроса, JSON-объекта-ответа. Как реализовать "страничную" выборку данных на бэкэнде используя EF Core. Как реализовать сортировку по любому полю JSON-объекта.
3) Есть REST Web API на ASP.NET Core. Веб-клиент постит на разные endpoint-ы JSON-объекты, в которых есть строковые свойства. Как централизованно затриммить (убрать пробелы с начала и конца) все строковые свойства принимаемых JSON-объектов. Чтобы в базу вдруг случайно не попали одинаковые текстовые entry, отличающиеся только количеством пробелов с начала или конца строки.
4) Как глобально перехватить все необработанные exceptions и вернуть клиенту модифицированный JSON с добавлением какой-то кастомной проперти.
5) Клиент аутентифицируется используя JWT + implicit flow. Как реализовать принудительный revoke сессии (инвалидация refresh token-а ~ "бан пользователя админом").
6) SQL/EF: как реализовать аудит сущности.
7) EF: optimistic concurrency implementation.
Теория на ASP.NET собес:
1) Пайплайн стандартных middleware и что делают: CORS, Authorization, Model binding, Model validation, Action filters, Exception filters. Зачем понадобится написать кастомный middleware.
2) Model validation: как реализована, ModelState (структура и API), FluentValidation nuget.
3) Model binding: атрибуты FromQuery, FromBody, FromRoute, FromService, зачем может понадобиться custom model binder.
4) Dependency Injection: Singleton/Transient/Scoped.
5) Action filters (зачем и примеры стандартных). Exception filters.
6) HTTP/REST: принципы, семантика глаголов, коды ответов.
7) Authentication: OAuth/OpenID flows (Implicit, PKCE), Azure Active Directory, JWT (refresh/access token), SSO, ASP.NET Identity.
8) OData.
9) Microservices: monolith vs microservice (pros/cons), как реализовать распределённую транзакцию (2PC, SAGA), коммуникация (HTTP, message bus), CAP теорема, как реализовать high availability.
10) Нормализация данных: что это и зачем, нормальные формы, как организовать 1-to-1/1-to-many/many-to-many отношения в SQL бд.
11) SQL: View vs Materialized View, Index (когда ставить, когда не ставить), операторы (отличие UNION/UNION ALL).
12) Entity Framework: __EFMIgrationHistory, как смапить сущность без первичного ключа (SQL View), какие ограничения, трансляция деревьев выражений (как реализовать кастомные операторы, как зафорсить client evaludation), AsNoTracking(), ChangeTracker, FluentAPI vs Data Annotations, Disconnected graph management (кейс: смержить 1-to-many дерево пришедшее с клиента в бд через EF).
13) Unit testing: отличие in-memory provider EF от реальной бд (Include-ы). XUnit (отличие от NUnit/MSUnit).
14) Знания/опыт работы с Cloud Computing провайдерами (AWS, Azure, GCP): знакомые сервисы, сертификаты.
Задачи на ASP.NET:
1) Как реализовать валидацию на уникальность Email и вернуть клиенту JSON с остальными ошибками стандартной валидации.
2) Есть REST Web API на ASP.NET Core + Entity Framework Core, есть веб-клиент, который с ним общается через JSON. На клиенте отображается pageable грид. Как будет выглядеть формат JSON-объекта-запроса, JSON-объекта-ответа. Как реализовать "страничную" выборку данных на бэкэнде используя EF Core. Как реализовать сортировку по любому полю JSON-объекта.
3) Есть REST Web API на ASP.NET Core. Веб-клиент постит на разные endpoint-ы JSON-объекты, в которых есть строковые свойства. Как централизованно затриммить (убрать пробелы с начала и конца) все строковые свойства принимаемых JSON-объектов. Чтобы в базу вдруг случайно не попали одинаковые текстовые entry, отличающиеся только количеством пробелов с начала или конца строки.
4) Как глобально перехватить все необработанные exceptions и вернуть клиенту модифицированный JSON с добавлением какой-то кастомной проперти.
5) Клиент аутентифицируется используя JWT + implicit flow. Как реализовать принудительный revoke сессии (инвалидация refresh token-а ~ "бан пользователя админом").
6) SQL/EF: как реализовать аудит сущности.
7) EF: optimistic concurrency implementation.
>чтобы можно было делать обертку поверх класса не трогая базу
ну мс вообще противник расширения и потому делает интернал и sealed все на свете. Приходился кое что выдирать весь исходник и юзать или обходить рефлексией
>И все эти ваши Декораторы и Адаптеры проблему не решат.
ну да. принтер плохо варит кофе, значит принтеры бесполезны )
>нет какого нибудь сахара
Есть всякие динамик и экспандообжекты но это если свой класс делаешь
Убрал строчку, где я создаю контейнер Canvass и всё заработало, хз почему, буду признателен если кто-то объяснит
все не так. во первых, свой код нужно размещать после InitializeComponent. Во вторых, определяешь канвас в хамл и далее просто обращаешься по имени, а в своем коде ну создал ты инстанс канваса, ну заполнил и...конструктор закончился и GC его скушал. В третьих, не давай имена локальным переменным с большой буквы, котята дико орут от котятоцида. В четвертых, зачем там Array? вот создаешь ты массив кнопок, кладешь в него кнопки чтобы...тут же из него сразу эту кнопку достать, а в конце массив просто выбросить и все. В пятых - нахрена эта строка поиска на панели задач, что ты там ищешь что ей можно отдать столько места, да еще и виджет погоды, уууу
база
> Во вторых, определяешь канвас в хамл и далее просто обращаешься
Не надо, сначала в коде научится как, а потом в хамл переходить
>Не надо, сначала в коде научится как
Бесполезная трата времени. 99% будешь использовать хамл, а 1% код, но поскольку хамл это тот же код, выраженный в виде хмл, то там не сильно сложно.
>нахрена эта строка поиска на панели задач, что ты там ищешь что ей можно отдать столько места, да еще и виджет погоды
В последних шиндовсах можно заменить на иконку залупы, практически так же быстро ищется, но место занимает гораздо меньше.
>виджет погоды
Последнее чем я буду интересоваться в своей берлоге. И уж тем более, эта информация не заслуживает немедленного оповещения.
(если только ты не в деревне, а у тебя понос и сортир на улице, тогда виджет погоды я бы поставил)
Ну тогда удачи в стрельбе себе по ногам
>Как будет выглядеть формат JSON-объекта-запроса,
Блин настолько уже привык с odata работать, что вот эту вот ззуйню забыл совсем.
Бля, я только половину из этого отвечу наверное.
Нет, в процессе обучения это всё само собой потрогается и посмотрится, поскольку это основа основ. По сути как циклы, условия, массивы - всё это основа которая в процессе изучения сама появляется как нужность
Первые 13 пунктов уже гарантировано мог бы заюзать. Это сразу больше половины списка, не говоря уж о том, что можно ебануть апишку и это сразу вся оставшаяся часть. Даже если проект десктопный - инструменты те же абсолютно, меняется только вьюшка грубо говоря и немного структура приложения, так что непонятно что ты там за мессенджер делал
Я если что не доебываюсь, у меня у самого уровень на написания диплома был ниже говна из жопы, но это я так, просто к слову о том, что ту хуйню выше учить долго
> хамл
>>352378
> XAML
>>352414
> Декларативность
Декларативность это заебца. И в хамле она неплохо реализована, но у хамла есть один минус, как и у любого потомка хмл - дичайшее количество мусорных символов. Когда набираешь его по схеме в студии, проблем нет, интеллисенс тебе всё автодополняет и подстанавливает. А вот когда надо поправить в блокноте, тут-то и вылезает дичайшая жопоболь.
Мне больше по душе ЖСОН. Но к сожалению, на нём очень мало тулкитов. Из найденных мной только один поддерживает кодбихайнд в связке шарпа с жсоном, это... Eto!
Но воще хотелось бы ещё более простой (но декларативный) язык описания интерфейсов. Эх, посаны, знаете, хочеца как-то вот так:
object Form
[TAB] name = "MyForm"
[TAB] title = "My Helloworld Form"
[TAB] size = [800,600]
[TAB] object Label
[TAB][TAB] name = "Label1"
[TAB][TAB] text = "Hello, world!"
[TAB]object Button
[TAB][TAB] name = "Button1"
[TAB][TAB] text = "OK"
Это в теории, а на практике соснешь от любого нестандартного пука в сторону, и тут начинается полный балаган. И уже хуй поймешь почему скругления кнопочек находятся в XAML, а отступы находятся в C# и почему ты должен как обезьяна в анекдоте бегать туда-сюда. Вместо того, чтобы в одном месте реализовать все настройки.
Ну так-то некоторые вещи я использовал, но особо не вникал даже. Да и велосипедов насочинял достаточно.
В общем буду летом НОРМАЛЬНО делать, теорию учить и по собесам похожу.
Опыт смежный есть год ковыряния легаси ERP на MS dynamics ax, параша та ещё
В общем. Я столкнулся с острым желанием это делать. Но вот дела, программулины стартуют ОООООООООООООООЧ медленно. Иногда раздупляется эта фигня до двух минут, иногда даже дольше. Еще и первое время кучу потоков плодит, память как-то странно выделяет на пустом месте. Аналогичная программулина на плюсах - стартует мгновенно и сразу нормально работает, шарповская же - раздупляется довольно долго, как раздуплилась - разница уже не такая большая, порядка 3-4 раз в пользу плюсов, но это уже не так существенно в данных кейсах.
В общем. Вопросы к гуру. Есть ли какой-то способ это вот раздупление ускорить и вообще поясните, чому так. Так-то я бы на плюсах хотел писать, но сейчас в команду - хрен плюсовиков найдешь, а дотнетчиков местный вуз плодит в бешенных масштабах, что легче на них скинуть какую-то некритичную фигню.
> Yaml
Википедия: Следует заметить, что наличие варианта записи в однострочном формате делает JSON допустимым подмножеством YAML.
Ништяк! Я вактически уже его выбрал.
>>352697
> Ну для этого и придумали недавно мауи. Больше никакой ебли с хамл. Разметку ебашишь на шарпике и балдеешь
Впереди лжец.
C# долго раздупляется на старте из-за того, что компилируется в промежуточный язык CIL, и уже потом при старте программы собирается в бинарник. Именно поэтому на старте долго, но быстро в процессе. Это сделали ради универсальности, но вот такой вот минус. Но вроде как стартовать только первый раз должно долго, и если ты не пересобираешь проект, то другие разы должны быть быстрее.
>Есть ли какой-то способ это вот раздупление ускорить
Выкинуть малинку к хуям. Сколько она щас стоит, тысяч 20?
Ты осознаешь, что можешь купить за эти деньги планшет на виндовс, у которого будет ТАЧ ЭКРАН, БАТАРЕЯ, КАМЕРА. И если хочется, законнектить по USB ардуину — для пинов. И представляешь? Оно не будет греться и будет мощнее.
Я просто в ахуе. Ебаные маркетологи подсадили ребятушек по соусом "компактно и дешево", а оно уже давно не дешево нихуя. Это уже оскорбительное безумие, потому что плюсов от росбери нет вообще: ни цены, ни простоты, ни удобства, ни красоты.
>Выкинуть малинку к хуям
Малинка это чтобы понимать мощности. А малинка используется исключительно чтобы быстро можно было закинуть программулину и посмотреть как оно на близком к реаному железу работать будет до того как получим реальные образцы(как же с этого горит на деле, типа блядь, выдать пару экземпляров разрабам - хуй, собирайте из говна и палок что-то сами, завод, хули).
Ну и да. Стартует-то не только в первый раз долго. Любой холодный старт оно чет-там раздупляется. Опять же, создает потоки хрен пойми зачем. Памяти выделят тоже больно много. Я думал, что возможно дело в том, что дотнет что-то там JITом делает, плюс че-то "подгружает" в процессе, ну, типа как я знаю ваши женерики - генерируются в момент первого вызова(как минимум мне дотнетчик так рассказывал), вот я и хочу узнать - что там да как, можно ли как-то это все дело сделать шустрее. Говорю ж, я - плюсовик, и дотнет использовал только когда нужно было на формах какую-нибудь утилитку быстро накидать чтобы потестить что-то, но плюсовиков сейчас хрен найдешь, а дотнет и под ARM стало можно запускать, дотнетчиков - дохрена вокруг, вот и было принято решение, их привлекать к работе, но чет первые тесты с работой на устройствах - не впечатляют, даже в качестве вспомогательного инструмента.
>Малинка это чтобы понимать мощности
>как оно на близком к реальному железу работать будет
Тогда совершенно непонятны твои вопросы про C#. Используй С.
Малинка не близка ни к чему вообще, это просто недоразумение.
>но плюсовиков сейчас хрен найдешь, а дотнет и под ARM стало можно запускать,
Я на своем самом бюджетном китайском планшете не замечаю долгих загрузок, разве что по первой. Ты пробовал запускать пустое приложение или консольное?
>дотнетчиков - дохрена вокруг
А психологов еще больше, можно поискать среди них)
> Ты пробовал запускать пустое приложение или консольное?
Это должен быть демон обычный, который своей фигней заниматься должен. Проблема как раз в том, что чтобы остальные демоны стартовали - этот тоже должен, ну и соответственно если эта вот хрень стартует 2 минуты, потом несколько таких будет в перспективе, то пока вся система проинициализируется - может хрен знает сколько времени пройти.
Ну и да. Это не мое решение на шарпе это все делать. Мне нужно теперь вот думать как, мать его, на малине мутить это все.
> также будет никому не нужной
Ставлю бочку солёных дотнетцов на это. Майки опоздали со своим мауи года на джва. Уже есть несколько популярных юи-фреймворков, которые в рот и под хвост выебут твой мауи.
>от любого нестандартного пука в сторону, и тут начинается полный балаган
довольно редкая вещь.
>а отступы находятся в C# и почему
конечно не поймешь, ведь они не должна там находиться
>>352697
>Больше никакой ебли с хамл. Разметку ебашишь на шарпике и балдеешь
не знаю как в мауи, на андроиде у такого подхода слабая часть это превью в редакторе, ведь для нее должен выполниться сам код. Да и разметка на шарпике...выразительная мощь скоупов котлина даже не рядом, ну больше похоже на swift combine - ну на мобиле можно. а на десктопе элементов в экран влазит поболе . (ну разве что писать имбецильные мобильные приложения под десктоп
>>352992
>как думаете, MAUI выстрелит или также будет никому не нужной
для мобил почему бы и нет. jetpack compose вышел ня и swift combine тоже неплохо, но это для мобил
Я пробовал jetpack compose для десктопа...не не не.
Как эта хуйня собирается конкурировать с флаттером, электроном и вот этим https://youtu.be/-X8evddpu7M я не представляю. Мертворожденный проект
Очевидно
Не все хотят писать на говножс и таком же дарт
Если бы не флаттер дарт нах никому не нужен
Аналогично и с жс
Учитывая, какой пиздец творят майки с сишарпом с 2017 года, мысль писать на современном жс/тс уже не кажется хуевой
А какой пиздец они творят?
а какой творят? выбросили половину шарпа? да нет. вроде все на месте
жалко только AppDomain и Thread.Abort
Не, до уровня блейзора не опустится.
Просто со временем заполнит те 0,3% рынка, которую сейчас занимает замарин, который пиздецки устарел.
Майки как обычно. Подождали несколько лет пока все ниши займут и решили начать влезать.
А что конкретно в замарине устарело? Вот WPF стар и что? - он все равно мощнее своих новомодных альтернатив по фичам.
>Вот WPF стар и что?
Вот это
>в замарине устарело
потому что он ни разу не
>мощнее своих новомодных альтернатив по фичам.
Все новые фреймворки уже предлагают декларативный гуй с хотрелоадом, нормальную среду разработки на любой платформе (2/3 мобильных разрабов, даже ведроидеры, гоняют с маками) и нормальную экосистему либ.
Первые 2 пункта предлагает MAUI, третий VS для мака, четвёртый без коммьюнити не запилить.
>Вот это
что вот это? еще раз - по фичам WPF мощнее современных замен, которые выглядят в лучшем случае как урезанный WPF, а то и вообще винформс
>нормальную среду разработки на любой платформе (2/3 мобильных разрабов, даже ведроидеры, гоняют с маками)
я думал ты про исполнение, а ты про разработку. Ну да ну да - мир это только мобилы конечно конечно. Впрочем, можно ли в студию это какие такие другие фреймворки имеют нормальную среду разработки на другой платформе
Можно ведь и не стрелять себе в ноги и не сидеть на маке. мак это как ходить с айфоном, а можно ведь не мешать самому себе.
>Первые 2 пункта предлагает MAUI
Только вот он еще не существует. И даже когда выйдет - он наследник замарина со всеми его "кастрированный WPF". Или для тебя "десктоп давно умер"?
>и нормальную экосистему либ
ммм. это о чем? причем тут WPF?
все твои аргументы не касаются мощи WPF, а относятся к сопутствующим вещам
Я не спорю что с кросс на шарпе плохо
мне не нравится что WPF винонли и я с радостью бы перешел, но альтернативы просто слабее - того нет, этого нет, это вырезано, это нужно делать через лютые костыли и т.д.
Но мне не нужно писать кросс и потому я сравниваю исключительно по "а мне вот нужно вот так и как это закодить"
Там где на WPF просто пишешь и получаешь результат - в других нужно ля с конями вприсядку
А когда решил покодить под мобилу для себя, то попробовав замарин (ну ведь тот же хамл и шарп ура ура) - я в итоге выучил котлин и jetpack и юзаю их.
Только что смотрел на синтаксис MAUI (который MVU) - как и ожидалось, ограничения шарпа дают свои плоды и получится разве что на уровне свифт комбайн, а значит все равно останусь на jetpack
C# Shell (C# Offline Compiler)
Правда там asp.net core 2.2 максимум. Но для учебы пойдет.
Есть редактор с подсветкой, компиляция. Можно собирать apk-шки или dll-ки. Для asp.net-а запускает локальный хост. Можно нюгеты дергать.
Правда для комфортной работы нужно купить (ну или спиздить), но он какие-то смешные деньги стоит (по крайней мере полгода назад стоил)
> Правда для комфортной работы нужно купить (ну или спиздить), но он какие-то смешные деньги стоит (по крайней мере полгода назад стоил)
Купить ничего невозможно совершенно, только на Айфоне есть способ, и то убрали один из двух уже
На 4пда ломаные были вроде.
Скачай книжку по шарпу на телефон и почитай эти дни. Гораздо полезнее будет.
Inb4: запили апи и обращайся к нему, запили свой UserManager.
А в чем проблема-то? Для каждой зависимости манагера есть дефолтная реализация.
Второе. В ассемблерном виде код будет следующим:
Для 10*0.5
L0000: vzeroupper
L0003: vmovsd xmm0, [0x7ffd04220458]
Сначала происходит обнуление 128 битов (16 байт) командой vzeroupper, а только потом уже присваивается значение
Код для 10 / 2:
L0000: mov ecx, 5
Тут нихуя не обнуляется, сразу перемещается число 5 в регистр.
Ответ мой очень неточный так как я не программировал никогда на ассемблере.
>>353706
Погуглил, я обосрался. https://stackoverflow.com/a/4125074/17025310
А может и нет. Хуй знает.
Но ведь си шарп не в ассемблер компилируется, а в IL-код для стековой CLR-машины.
>все твои аргументы не касаются мощи WPF
Пиздец, сам приплёл WPF и сам же на что-то сгорел.
>Ну да ну да - мир это только мобилы конечно конечно.
Нет, но вот MAUI именно про них. Десктоп и ко там как у флаттера — пришили сбоку потому что могут, но никто не юзает (и не будет).
>все твои аргументы не касаются мощи WPF
Потому что я про него ничего и не говорил, кек.
>А когда решил покодить под мобилу для себя, то попробовав замарин (ну ведь тот же хамл и шарп ура ура) - я в итоге выучил котлин и jetpack и юзаю их.
Бля, так зачем же нужен MAUI? Ведь замарин настолько WPF В мире мобил, что даже пробитые биллибои вроде тебя с него бегут.
>ограничения шарпа дают свои плоды
Какие ограничения? Ты по синтаксису выбираешь, пчел?
>и получится разве что на уровне свифт комбайн
А ты эти базвроды в глаза-то видел?
А эта виртуалка работает в вакууме?
Вся хуйня компилируется в конечном итоге в ассемблер. C# -> IL (intermediate language) -> ASM
10 >> 1
По сути да, ассемблер, но не по факту. По факту есть виртуальная машина с виртуальным процессором, не идентичная реальному железу. Она выполняет ассемблероподобный код в своём формате.
А сделано это для того, чтобы
1. Избежать проблем современных архитектур. Нативный машинный код, который выполняется недостаточно быстро на реальном железе, выполняется быстрее на виртуальной машине.
2. Машинный код виртуальной машины универсален везде, где запускается виртуальная машина. Разраб один раз делает реализацию виртуальной машины на ранее неизвестной аппаратной платформе - и вуаля, весь багаж приложух становится доступен там.
По факту они 14 лет делали CLR для линупсов
Этому
>>353706
и этому
>Ответ мой очень неточный
Он пиздец какой неточный.
Во первых в clr оптимизация идет не только при переводе шарп кода в IL код, но и при дальнейшем переводе IL кода в ассемблерный код конкрентного проца.
Во вторых ты изучаешь как переводятся операции с литералами в IL код. Копмилятор в этом случае будет по максиму пытаться заменить их константными значениями. Поэтому он и пихает вместо 10/2 сразу 5. Т.к. целочисленное деление 10 на 2 всегда будет давать 5. Если поставить именно две переменных и их разделить друг на друга, то выглядеть это все будте уже по другому. Он их сначала кинет на стек, потом совершит операцию и заберет результат со стека.
В третьих как я выше написал это разные действия в одном случае это действие с плавающей точкой в другом это целочисленное деление, так что результат тоже будет разный.
В четвертых большинство конечных компиляторов давно уже умеют при целочисленных операциях заменять все эти разделить умножить на 2 или 0.5 на обычный сдвиг на бит влево/вправо и в конечном итоге вообще похуй.
Основной вывод который тут нужно сделать, то что заниматься такой оптимизацией имеет смысл только и только тогда, когда ты знаешь на каком конкретно проце будет крутиться твоя программа и ты достаточно уверенно знаешь набор его команд и как компилятор умеет с ними обращаться.
Ты можешь например дохуя времени потратить на подбор оптимального способа извлечения квадратного корня, а потом окажется, что на целевом проце это все выполняется одной командой, которая будет работать в разы быстрее всего, что ты придумаешь.
Поэтому не страдай хуйней, а изучай лучше сам шарп.
1. Переименуй на нормальные имена
2. В исключении на втором скрине всё написано
Хоть ты и обращаешься к инициализированному массиву длинной 100, однако этот массив пуст. Грубо говоря есть 100 ящиков, но все они пустые. Соотвественно у пустого ящика (объекта класса Kniga) отсутствуют поля nazvanie, avtor, god, obyom.
Класс это контейнер, где хранятся свойства. Ты лезешь в контейнер и где там у тебя массив?
Ты либо объявляй в классе массив, либо создавай массив из своих классов (это наверно правильнее).
Тебе нужно пройтись по всем ячейками и создать дял каждой новый экземпляр класса "kkkNigga"
Как заставить его детектить инструкции внутри делегатов? Код на скрине не возвращает тела делегатов совсем.
>Пиздец, сам приплёл WPF и сам же на что-то сгорел.
да. я начал с того, что WPF по фичам лучше других. и от своих аргументов не отказывался.
>Нет, но вот MAUI именно про них
вообще то задумка мауи - привнести десктопы в замарин. А иначе бы просто сделали очередную версию замарина. Возможность писать "и на десктопах" - одна из основных причин "почему мауи"
>Потому что я про него ничего и не говорил, кек.
ок. значит не был аргументов против моего, что WPF фичастее. Так просто рядом походили. принимается.
>Бля, так зачем же нужен MAUI?
десктопы, батенька, десктопы. "одна UI на все системы". И решили взять за основу замарин и добавить в него десктопы.
> Ведь замарин настолько WPF В мире мобил, что даже пробитые биллибои вроде тебя с него бегут.
WPF это WPF, а замарин это замарин. Нечего их по фичам сравнивать. замарин изначально вообще проект левой конторы. Конкретно в замарин мне не понравилось
1 долгий запуск (не касается фич да)
2 на момент моей пробы физически не было возможности сделать "лонгтаплистенер" на нужно мне элементы. Я почитал советы "а ты сам напиши"
3 ну и что AppShell всегда держит первый скрин в памяти. Потом я понял что этот идиотизм и на андроиде, но было уже поздно, тем более, что в compose это не так
>Какие ограничения? Ты по синтаксису выбираешь, пчел?
это разные вещи. синтаксис это вкусовщина. А ограничения определяют дизайн кода. В compose блоки это функции и свободно манипулируешь ими, дробишь как угодно, определяешь где угодно и как угодно стейты. Гибкость невообразимая.
в шарпе и свифте это классы (структуры в свифте, но разницы нет) и вот уже ты должен определять стейты именно так, код писать именно так. Жить можно конечно. но гибкости меньше
>А ты эти базвроды в глаза-то видел?
видел. мне как то подарили айпхон + айпат + макобук с целью пересадить меня и "наставить на путь" и мой путь в мобилописание в MVU я начал именно с swift combine (ну сразу после того как в замарин уперся с лонгкликом) ибо "мне для себя и нах учить древности, поэтому только самое новое".
В итоге экосистема эпл меня запарила и я убежал обратно на андроид, а там уже котлин и compose. И я считаю compose гибче и заслуга в этом именно котлина с его скоупами, делегатед проперти и так далее.
>Пиздец, сам приплёл WPF и сам же на что-то сгорел.
да. я начал с того, что WPF по фичам лучше других. и от своих аргументов не отказывался.
>Нет, но вот MAUI именно про них
вообще то задумка мауи - привнести десктопы в замарин. А иначе бы просто сделали очередную версию замарина. Возможность писать "и на десктопах" - одна из основных причин "почему мауи"
>Потому что я про него ничего и не говорил, кек.
ок. значит не был аргументов против моего, что WPF фичастее. Так просто рядом походили. принимается.
>Бля, так зачем же нужен MAUI?
десктопы, батенька, десктопы. "одна UI на все системы". И решили взять за основу замарин и добавить в него десктопы.
> Ведь замарин настолько WPF В мире мобил, что даже пробитые биллибои вроде тебя с него бегут.
WPF это WPF, а замарин это замарин. Нечего их по фичам сравнивать. замарин изначально вообще проект левой конторы. Конкретно в замарин мне не понравилось
1 долгий запуск (не касается фич да)
2 на момент моей пробы физически не было возможности сделать "лонгтаплистенер" на нужно мне элементы. Я почитал советы "а ты сам напиши"
3 ну и что AppShell всегда держит первый скрин в памяти. Потом я понял что этот идиотизм и на андроиде, но было уже поздно, тем более, что в compose это не так
>Какие ограничения? Ты по синтаксису выбираешь, пчел?
это разные вещи. синтаксис это вкусовщина. А ограничения определяют дизайн кода. В compose блоки это функции и свободно манипулируешь ими, дробишь как угодно, определяешь где угодно и как угодно стейты. Гибкость невообразимая.
в шарпе и свифте это классы (структуры в свифте, но разницы нет) и вот уже ты должен определять стейты именно так, код писать именно так. Жить можно конечно. но гибкости меньше
>А ты эти базвроды в глаза-то видел?
видел. мне как то подарили айпхон + айпат + макобук с целью пересадить меня и "наставить на путь" и мой путь в мобилописание в MVU я начал именно с swift combine (ну сразу после того как в замарин уперся с лонгкликом) ибо "мне для себя и нах учить древности, поэтому только самое новое".
В итоге экосистема эпл меня запарила и я убежал обратно на андроид, а там уже котлин и compose. И я считаю compose гибче и заслуга в этом именно котлина с его скоупами, делегатед проперти и так далее.
В 95% случаев достаточно будет гитхаб с этим проектом показать.
Если так уж хочешь - берешь самый дешевый сервак, либо покупаешь у провайдера статический АйПи и разворачиваешь на своей пекарне.
Относительно фронтенда. Взял бутстрап в зубы и быстро заебенил на каком-нибудь Vue по двум туториалам.
> я начал с того, что WPF по фичам лучше других
Ты начал с того, что приравнял замарин к впф-у, пчел. Я про впф вообще нихуя не писал, ты просто порвался от своих же шизовысеров.
>вообще то задумка мауи - привнести десктопы в замарин.
Да, именно поэтому они не могли сделать
>очередную версию замарина
>А иначе бы просто сделали очередную версию замарина
Заюзать полусгнивший бренд который вызывает отторжение и выпустить под ним хуиту цель которой — дропнуть это легасиговно. План надёжный как швейцарские часы, хорошо что в мс не догадались.
>десктопы, батенька, десктопы. "одна UI на все системы". И решили взять за основу замарин и добавить в него десктопы.
Молодец что ответил на свой же вопрос, есть одно но — десктопы в целом полумёртвые.
>WPF это WPF, а замарин это замарин. Нечего их по фичам сравнивать
Так эту хуйню ты начал с первого сообщения
>>353212
>А что конкретно в замарине устарело? Вот WPF стар и что?
> шарпе и свифте это классы (структуры в свифте, но разницы нет) и вот уже ты должен определять стейты именно так, код писать именно так. Жить можно конечно. но гибкости меньше
У тебя в голове это создаёт какие-то ограничения, проблему понял.
>видел. мне как то подарили
Ок, всем похуй.
>Ты начал с того, что приравнял замарин к впф-у, пчел
бред. ничего я не приравнивал на старте. я просто на примере WPF показал что возраст не коррелирует с "устарел выбросить".
Замарин устареет только при выходе мауи, вот только мауи - не что то совершенно кардинально иное, а выглядит как развитие замарина с добавление десктопа.
вот цитата от мелких
".NET MAUI is the evolution of Xamarin.Forms, a cross-platform mobile first framework for Android, iOS, and UWP."
>дропнуть это легасиговно...Да, именно поэтому они не могли сделать
Ага. Так не могли, настолько разные что
"You don't need to rewrite your Xamarin.Forms apps to move them to .NET Multi-platform App UI (.NET MAUI)."
>Так эту хуйню ты начал с первого сообщения
а ты перечитай. А если не понял, то я повторю - WPF стар но все равно мощнее альтернатив по фичам, в том числе и MAUI. Кроссплатформенность это одна сторона медали, а когда ты упираешься в "я не могу это сделать потому что not supported" - это уже недостаток функционала. Да, я понимаю аргумент что "WPF на линуксах вообще ничего не сделать" (впрочем на MAUI тоже не особо), но с точки зрения предоставленного функционала "хочу этакую кнопку с блекжеком и шлюхами и чтобы вот так вот и не натыкаться на "это не поддерживается" - то тут WPF мощнее других"
Сам то я WPF сменил ибо в нем не фиксят баги, но все замены только усложнят жизнь, а не принесут ничего
>У тебя в голове это создаёт какие-то ограничения,
вменяемые аргументы закончились. ясно )
>Ок, всем похуй.
как и мне. просто я, практик, спорю с теоретиком.
закрыли тему
>бред. ничего я не приравнивал на старте. я просто на примере WPF показал что возраст не коррелирует с "устарел выбросить".
Единственное что WPF показывает — так это то, что десктоп просто стагнирует в полумёртвом состоянии.
А замарин показывает, что в мобилах жизнь бурлит, и проёб времени закончился тем, что уже быстрее запилить 2 нативных приложения на SwiftUI/Combine чем 1 на замарине, чего уж про флаттер и рн говорить, которые мс уже не потеснить.
>WPF WPF WPF MAUI WPF
Спок, шиз.
>вменяемые аргументы закончились. ясно )
Они появляются когда есть что аргументировать. Ты высрал что-то хуйню — вот результат.
>просто я, практик,
написавший 2 хэловорда.
Давай, уёбывай в психушку.
>В 95% случаев достаточно будет гитхаб с этим проектом показать.
А как я без разворачивания своего сервака научусь с ним взаимодействовать в коде и вообще пойму, как оно все устроено?
>Давай, уёбывай в психушку.
у тебя проблемы с логикой и аргументами. прыгаешь с одного на другого, а потом еще критикуешь будто я притащил, как голубь в шахматах.
А теперь еще раз по ОСНОВНОМУ ВОПРОСУ - чем "пиздецки устарел" замарин?
При всей моей нелюбви к нему - ему на замену идет мауи который выглядит так же (не удивляюсь даже что там активно переиспользовалась кодовая база) + поддержка десктопа.
Это как прицепить мигалку на машину и говорить, что "это абсолютно новое и заменяет обычную машину, теперь вот круто стало, а то вообще ездить было невозможно"
combine/compose предлагают кардинально новый подход. мауи же брат близнец замарина. Как альтернативу там пилят MVU подход, но старый (который по твоим словам пиздецки устарел) никуда не делся.
мауи - просто эволюция замарина в сторону десктопа и MVU. Разработка для замаринцев в большей части останется прежней.
никакого "пиздецки устарел и вот вам кардинально новое" - покажи где
1) Покупаешь самый дешевый VPS, с самым дешевым доменом. Изучаешь IIS, настраиваешь и потом напрямую из студии делаешь туда publish и можешь показывать, что хочешь, кому хочешь. Туториалов в сети полно.
2) Если ты прицеливаешься на чистый бэк, то изучи swagger. На нем, поковырявшись в настройках, можно вполне неплохую чисто утилитарную морду сделать, которая даст доступ ко всему api с описанием и позволит его конкретно пощупать.
>научусь с ним взаимодействовать в коде
С чем ты там помимо api который сам выставляешь взаимодействовать собираешься? Тебе вообще должно быть похуй, где и как он развернут, ты просто посылаешь запросы и получаешь ответы.
Ты можешь его вообще как сервис в винде развернуть и он будет у тебя в фоне постоянно крутиться - взаимодействуйся нехочу.
Что так сложно то. Есть же ngrok и даже как расширение к студии
И даже если vps то iis лишнее
>ngrok
Если стоит цель выкладывания проектов для того, чтобы хрюшки и собеседователи его могли посмотреть в любой момен, то использовать для этих целей свои локальные ресурсы, пусть даже и через туннель - ну такое себе.
>И даже если vps то iis лишнее
Честно говоря хуй знает. Я пару лет назад день поковырялся, настроил себе - с тех пор оно и крутится. Когда нужно что-то выложить, просто создаю новый поддомен, жмякаю кнопку в студии и проект уже там. Работает и хуй с ним. У меня там помимо всяких тестовых проектов и проектов для резюме еще своя всякая полезная мелочь крутится. По принципу закинул и забыл.
>дешевый VPS
>Изучаешь IIS
Дешевый vps на винде? Это фантастика. Да и зачем? Пет проект можно и голым кестрелом выставить в интернет. Ну, если хочется поебаться, то энжинксом прикрыть.
Проснулись? Отвечайте!
Все что мне нужно, это свойства .X и .Y — они есть у всех.
Но как только я делаю операции через этот ваш обобщенный тип T, пытаюсь достучаться чем-то вроде T.X, мне в ебало прилетает вот это:
X не является членом T
И че теперь?
Тред можно закрывать.
с 2х часов ночи страдаю. Хост вроде не заблокирован (пингуется же) но не качает инсталляционные файлы.
Один раз при сотне перезапусков что то там начало качать, думал заработало но хер
вернее даже не пингуется, а там апи отвечает (вот этот апи https://download.visualstudio.microsoft.com/download/pr/), но вот конкретно ссылки никак.
Ты вероятно не знаком с конструкторами классов. Гугли что это, ты когда пишешь New, то при создании экземпляра срабатывает дефолтный метод внутри этого экземпляра, который и заполняет все свойствами, и вообще делает все что твоей душе угодно.
В этом же конструкторе ты и можешь так же требовать от пользователя, какие данные ему нужно передавать в обязательном порядке. Да хоть письмо по почте отправлять при каждом создании экземпляра.
Несмотря на то, что ты его не писал раньше, он там есть, просто дефолтный и не делает ничего (а должен делать).
//-------------------------------
НО, ты можешь обойтись без конструктора — тогда ты должен заполнять поля класса вручную, после создания экземпляра:
MyClass HuiPizda = new MyClass();
HuiPizda.Djegurda = 666;
Но как ты понял, в случае с массивами это говно не очень удобно и придется буквальной пройтись по каждым ячейкам и назначить данные. Лучше бы это делать на ходу, а для этого и нужны конструкоры (да и вообще, чтобы каждый раз не париться с этой хуйней, особенно когда у тебя внутри этого класса куча других экземпляров класса)
Я недостаточно продвинут, чтобы понять данную шутку.
>а откуда там возьмутся данные?
Из источников данных. К которым ты будешь делать запросы. А результаты запросов мапить в модели. Ручками или через маппер.
Вот этого >>354459 не слушай. Пихать в конструктор что-либо сложнее прокидывания зависимостей или инициализации коллекций - долбоебство и признак гнилой архитектуры.
Я для примера сказал, что в конструкторе можно все т.к. это обычная функция по сути. Просто для понимания. Но в данном случае ему как раз и нужно инициализировать коллекции (или другие экземпляры классов внутри класса).
Просто это ему надо сделать для массива из 100 экземпляров. Он забил массив экземплярами, а сами экземпляры пустые. При обращении к каждому выдает ошибку и ему придется пройтись по каждому экземпляру и забить его изначальными данными, хотя он мог это сделать на стадии конструктора.
>Далай интерфей IHasXAndY
Ебань какая-то. Я хочу передать этой функции обычную структуру Point или Vector, а вместо этого я должен буду их приводить к интерфейсу, прежде чем передать.
Собсно код
//Интерфейс
public interface IPoint
{
double X { get; set; }
double Y { get; set; }
}
//Метод
public static void Perpendicular<T1, T2>(T StartLine, T EndLine, ref T2 Target)
where T1 : IPoint
where T2 : IPoint
{ ... }
//Вызов не работает по причине:
//Аргумент типа "Point" не наследует или реализует строгий тип "IPoint".
{
Perpendicular<Point, Point, Point>(P1, P2, P3);
}
Выще писали. Или в прошлом треде
>не наследует
Ну ты наследуй. Или не наследуй, выкинь генериеи и сделай перегрузки под конкретные типы как это сделано в System.Math
В забуграх тоже не обновляется. Скорее всего тетя Лаура моет сервер обновлений, подождем.
А зачем на винде? Все ж должно быть кроссплатформенное, нет? Я планировал накатить какой-нибудь бубунту-сервер и там крутить что мне надо.
>Пет проект можно и голым кестрелом выставить в интернет. Ну, если хочется поебаться, то энжинксом прикрыть.
Мунспик.
>Ну ты наследуй.
Я пытаюсь упростить себе жизнь. Лучше уж конвертировать поинт в вектор, если на то пошло.
>выкинь генериеи и сделай перегрузки под конкретные типы как это сделано в System.Math
Ну вот моя функция принимает 3 аргумента, а еще есть как минимум 3 возможных типа: Point, Vector, Vector2. Это сколько мне надо сделать перегрузок, чтобы реализовать все вариации? 3^3?
Как обычно погромистский сферический маняприем не работает по факту. Держал в голове эти ваши обобщения, а когда надо, так они не применимы. Это еще надо дождаться, когда звезды сойдутся, чтобы случился определенный момент под определенным углом, чтобы обобщения заиграли светом и я воскликнул "настал ваше время, дженерики!".
Почему Object позволяет обращаться к свойствам, которые присутствуют только у его потомков, а обобщенный тип — нет? Загадка.
А для кого Source Generator придумали?
Я кстати не понял почему вдруг не работает интерфейс ну да ладно
>implicit cast
Отсутствует в VB, но эт опо сути просто конвертер типов. Я тоже самое сделал через расширения.
>>354619
>Я кстати не понял почему вдруг не работает интерфейс ну да ладно
Мне кажется это слишком сложно для чего-то, что должно быть простым. Это будет такая же библиотека как System.Math, которая считает перпендикуляр. И она ща будет тянуть интерфейсы за собой.
Кряк выложен на гитхабе
93.184.215.201 download.visualstudio.microsoft.com
что там майки чудят блин
Вот нашёл: https://github.com/github/VisualStudio/issues/2591
Такая же проблема. Видимо баг самой вижлы.
Минусы:
1) Нету либ (заинтегрять либу из npm не очень просто).
2) Ебалово с интеропом (просто так написать JS-скрипт нельзя).
3) Webassembly js размер бандл слишком огромный.
4) Производительность так себе.
Плюсы:
1) Кодовая база клиента и сервера шарится (переиспользование кода).
2) Стек технологий, которые необходимо знать значительно короче, чем в React/Angular/Vue мире.
Сюда по нашей конторе Блейзор использовани только для каких-то внутренних (не публичных) приложений клиента.
У меня тупо нет кнопки "локальный репозиторий". Может это ограничение бесплатной версии и она только в платной?
Не подскажете есть ли у вас на проектах или у знакомых на слуху какие-то проекты, где блокчейн используется как инструмент для решения какой-то проблемы заказчика? Может слышали какие вообще есть реальные области применения блокчейна как инструмента для более эффективной реализации чего-либо?
Спасибо.
Сейчас везде это используется с CQRS, конечно же.
https://www.youtube.com/watch?v=dK4Yb6-LxAk
-Через студию (окно git changes)(очень кастрировано).
-Через лубую прогу для гита(кракен, сурстри и т.д.)(кастрировано, но для основных операций хватит)
-Через консоль гита
Дак при нажатии кнопки "Отправить" вылазит окно с гитхабом и там нет пункта "Локальный репозиторий"
Я не понимаю эти пуши, коммиты. У меня только кнопка "Отправить" и всё, а там выбор только гитхаб или азура.
Я думал, это выпадающий список, а не кнопка. Как всегда не очевидный интерфейс вижлы...
Спасибо, теперь всё получилось без гитхабов.
> Ебалово с интеропом (просто так написать JS-скрипт нельзя).
Спасибо анон, а вот с этого места поподробнее? Я разве не могу написать скрипт и просто в странице подключить его?
Я работал с таким проектом. Подробностей рассказать не могу, т.к. госзаказ и НДА. Блокчейн там используется для цепочки "компоненты -> сборочные единицы -> сертификаты". Возможно еще подписание ЭЦП там завязано, но не уверен.
Насчет эффективности не знаю, не разбирался.
>Я не понимаю эти пуши, коммиты.
Терпеть не могу работать с такими ушлепками. Если такого подключают к проекту, то начинается лютый хаос в ветках и коммитах, пока им пиздюлей не выдадут, либо не пидорнут нахуй.
>язык который не собирается без крестов
хорошо наверное работать с несамодостаточным говном?
Плохо. Девки не дают, пацаны на районе не уважают, родители из дома выгоняют, прохожие плюют в след. Эх, надо было ассемблер учить. Вот там сила, там дух старой школы.
Серьезно - 2К20 на дворе. Кому должно быть не похуй?
>>354912
А чё с интержопом такого? Да, в нет мвц или разор страницах проще конечно, но и здесь норм
В индекс хтмл добавляешь
<script>
window.copyClipboard = () => {
navigator.clipboard.writeText('ОП ХУЙ');
}
</script>
В .разор.кс пишешь
await JSRuntime.InvokeVoidAsync("copyClipboard");
На, вот тебе на котиках объяснение:
https://girliemac.com/blog/2017/12/26/git-purr/
проще некуда.
хуета какая-то
Может кто-то объяснить почему разработчики читов для игр cheathappens используют .NET для своих поделок?
Писали, что у C# дела с доступом к памяти гораздо хуже, чем у Си или крестов. А тут на тебе...
Прочитал половину и пытаюсь написать сам простой сайт, но ни черта не выходит. Я просто не понимаю как связывать модели с контроллерами и представлениями. У меня есть класс пустышка, а как туда загрузить данные? У Фримена так и не нашёл места, где он туда запихивает данные, т.е. нет явных операторов new над объектом. Оно типа как-то само создается?
Почему нельзя было сделать нормально без этой неочевидной фигни? У меня горит уже от этой магии. Кто вообще этот ASP.NET придумал? Может ему самому надо лечиться, а он ещё не знает об этом, не представляет.
Иногда люди где-то услышат бред с одной стороны, потом бред с другой стороны, затем эти два бреда объединяют в единое целое и этой концентрированной хуйней ставят в ступор специалистов, типа "Вот известно же, что белки срут кверху жопой, но как тогда они варят кумыс?"
Да хуй знает! Ну раз делают, значит проблемы преувеличены.
Школьники на перемене поспорили.
Вот: https://2ch.hk/b/arch/2016-11-01/res/139077463.html#139085777 (М)
Мнение сеньора-разработчика из /b/
>>355093
>Ну раз делают, значит проблемы преувеличены.
Дык, пытаться в байто-ёбство на шарпе изварт или нет? это чем-то обосновано - выбор в пользу шарпа, весто крестов и си?
Не хочешь вызывать сборщик мусора — используй структуры, вместо классов, не требующие после себя сборщика. Ах да, это превращается в НИУДОБНА.
А что cheathappens это игровой движок и его задача 60 раз в секунду обсчитывать сцену?
Во многих играх вон вообще скриптование на Lua или что то подобное используется, что еще медленнее
BenchmarkDotNet
Benchmarkdotnet
https://youtu.be/8Slzd1G7f9Q
Я больше запутался, чем открыл для себя. Уже тупо гадание на гуще.
Замечательный фреймворк! Нельзя сделать, чтобы на одной странице была форма и результаты. Видите ли модель может быть только одна! Почему на РНР я как угодно могу комбинировать страницы, формы, чтобы выводить, а тут всё прибито гвоздями? И это передовая технология!? Вот реально охота плюнуть в рожу разработчикам.
Если тебе так стремно, зачем ты лезешь-то? Сидел бы дальше на уютном ПэХеПе и горя не знал бы.
Я слышал, что РНР-программистов заставляют переучиваться на сишарперов.
Но я представить не мог, что в ASP.NET всё настолько плохо.
Вот взять ViewBag. Это что такое? Они считают программиста какой-то красной шапочкой, что он должен складывать "пирожки" в корзинку, чтобы передавать данные от одной части приложения к другой? И вся привязка моделей по сути такая же "корзинка". Ладно бы тут была офигенная гибкость, но нет, всё прибито гвоздями. У меня только одна корзинка, а вторую я взять уже не могу. В итоге я вынужден подстраивать организацию веб-приложения под систему фреймворка, потому что он видите ли по-другому не умеет.
бред какой-то
нет никакой разницы в подходах. все RoR подобные фреймворки близнецы.
Исключение - питон, в силу его особенностей (модули) и типа Nette (на пхп) где немного другой подход (который лучше кстати и печально что в асп.нет он не такой)
Как мне передать на страницу компонент .razor данные со стороны сервера типа OnGet()? Я не хочу делать на каждый чих ебучее апи и контроллеры, я хочу хранить и доставать данные из сессии и инитить страницу ними при загрузке.
Почему нельзя было объединить эти подходы?
спросил он в интернете )
И я не знаю как сделать сортировку наиболее эффективным образом.
Анончик, отчитай меня!
Если тебе чисто язык с нуля, то вполне. Если язык знаешь и нужен advanced левел, то ищи что поновее.
Голосуйте здесь за Visual Studio for Linux
https://developercommunity.visualstudio.com/t/visual-studio-for-linux/360479
> отчитай меня
Могу ещё вычитку произвести (читать нараспев, по церковному):
Гооосподи Боже святый всесущий всеведующииииииий
Ныне и присно избави раба божьего Анонимаса от тупняка в его головееееее
И ниспошли ему откровение как древа цифровые ему отсортироваааааать
И чтобы он перестал на двачах вниманиеблядствовааааааааать
Сап, дотнетогоспода.
Нубыч здесь.
Поясните, пожалуйста, за практическое применение следующей хуйне:
1) Небезопасный код
2) Модификатор extern
3) Рекорды (records)
И если на реальной работе применяли, расскажите вкратце про ситуацию, где это может применяться.
Спасибо
1 - например при обработке изображений может применяться, для существенного ускорения.
2 - ни разу не попадалось
3 - если архитектура по DDD, тогда полезно.
Какие то странные вопросы.
1 небезопасный код вызывать понятно зачем - а как еще использовать то, что не написано на шарпах, хотя бы тот же винапи. Если это вопрос про unsafe, то это оптимизации ибо разница значительная. Тем более в до-span-овую эпоху. И даже спаны это медленнее из-за лишних проверок.
2 хз. ну он нужен для вызова внешних функций. А значит никуда без него. Для обычного чела, что не пишет биндинги - все равно время от времени пишет свой класс NativeMethods (если кодит под десктоп) для вызова винами и пасется на сайте https://www.pinvoke.net/
3 иммутабельная херь. Мне будет полезна при многопотоке. мелкие давно выкатили иммутабле пакет, но там только коллекции и вручную кодирование иммутабельных классов напрягает. Конечно рекорды не полные классы, но все же уже лучше.
>Небезопасный код
Оптимизация говна из жопы. https://www.youtube.com/watch?v=JB_6NslNDVg&ab_channel=CODEBLOG
>Модификатор extern
Когда надо вызвать метод из C++ DLL-ки например, ну или из любой другой dll. Гугли p/invoke
>Рекорды
Нужно, чтобы не изменить случайно то, что не должно измениться. Просто удобная фича для того, чтобы код было приятнее писать. По сути как модификаторы доступа, как бы можно все сделать public, но это неудобно с точки зрения разработки.
>Небезопасный код
Ну, вот выжал ты все из алгоритмов, а все еще медленно, у пидорасов что на плюсах пишут в 10 раз быстрее при более хуевых алгоритмах - берешь в зубы и хуяишь.
> Модификатор extern
Ну вот купили давно в вашей конторе либу на плюсах, либа всем либам либа, только вот те у кого купили сдохли, теперь у вас есть либа и желание ее в шарповский проект вхуячить, т.к. своя реализация годы займет - берешь и хуячишь.
> Рекорды
Ну вот надо тебе гонять данные и быть увереным что просто так они не изменятся - вот бери рекорды и хуячть. DTO те же самые, оч удобно.
Держи наиболее оптимальную сортировку!
void Sort<T>(T[] input, Func<T, T, int> comparer, out T[] sorted)
{
int l = input.Length;
sorted = new T[l];
input.CopyTo(sorted, 0);
for (int i = 0; i < l - 1; i++)
{
for (int j = i+1 ; j < l; j++)
{
if (comparer(sorted, sorted[j]) >= 0)
{
T temp = sorted;
sorted = sorted[j];
sorted[j] = temp;
}
}
}
}
Тогда у некоторых компаний исчезнет причина покупать винду, оно им надо? А визуалку по цене винда+визуалка покупать вообше не будут.
Потому что в первом случае 1 приводится к строке автоматически, а во втором это инт, можно писать 1.toString()
Когда в выражении первый или второй член (точно не помню правила, можешь поиграться) является строкой, то всё выражение приводится к строке. А char это не строка.
BUMP
Если уверен, что обработчик прикреплен к кнопке, то так
var button = (Button)sender;
если может быть другой источник события, то
if(sender is Button button){
button...
}
Спасибо
Point CurPoint = new Point();
CurPoint.X = 10;
Но если у меня в экземпляре класса есть свойство типа Point, то я уже не могу отдельно менять .X, и .Y — они становятся чем-то вроде ReadOnly, при этом пометки таковой нет, но компилятор ругается, что присвоить им ничего нельзя. Что-то похожее есть во всяких свойствах .Location контролов — там ты не можешь отдельно изменить одну из осей.
Почему так?
Официально, бенчмарк дот нет — это пикрил(1).
Сделал три замера и везде результат разный. Хрен с ним со временем, это может быть в рамках погрешности, но чому Rank меняется?
А еще
CurPoint.X = 10; CurPoint.Y = 10;
по времени тоже самое и порой даже медленнее, чем
CurPoint = new Point(10,10);
И ответ почему нельзя менять отдельно свойство .X, если поинт находится в классе, я так и не нашел.
Конструировать свою кнопку. Я вообще делаю на основе любого другого элемента, типа canvas. Только там нет события клика — они разбиты на ButtonDown и ButtonUp. Ну и последующий гемор, например пользователь может зажать кнопку мыши на одном элементе, сдвинуть курсор и отпустить кнопку мыши на другом элементе.
Но умные люди говорят, что надо все это дело сооружать на xaml, делать свой стиль. Я пока не дошел до этого. Где-то даже есть пример переделки всего мультибокса.
Неужели лучше срать в тред, чем прочитать базу по шарпу? Потому что поинт это структура, т.е. значимый тип. Ты из свойства получаешь копию.
>Конструировать свою кнопку. Я вообще делаю на основе любого другого элемента, типа canvas
Зачем? Если это WPF (или иже с ним), то там основной принцип что "как работает" отделено от "как выглядит" и настраивать внешний вид элемента по своему есть норма
Потому что у тебя в твоём классе Point это скорее всего проперти, т.е ты получаешь КОПИЮ структуры и хуй ты чё поменяешь в оригинале. Если так хочется внутри класса менять, то сделай Point приватным филдом и к нему прикрути проперти для доступности этой стракты наружу класса.
Это сделано как костыль от выстрела себе в хуй.
Ну вот потому и предложил шатать другой элемент, типа image, canvas или panel. У тебя будет по сути плоское что-то без каких либо паразитных подсветок и эффектов, к которому ты так же привязываешь события по клику мыши, добавляешь иконки и свою подсветку.
Но это все для даунят-новичков, которым нужен результат здесь и сейчас, и которые не прочь соорудить велосипед из куска хлеба и спичек.
>>356254
>>356247
Да про это я и писал выше. Но я по какой-то причине органически не перевариваю html\xml-подобную разметку, как будто у тебя есть автомобиль, у которого не поворачивает руль вправо. Это надо сесть и погрузиться конкретно в эти дела.
> Но я по какой-то причине
по причине визуального шума конечно же
я как гляну на хамл портянку - уууу
но все же читается на порядок легче чем код.
Пиздец. Попросил знакомый, что еще в универе учится написать простенький Make-файл. И пиздец. Я не помню как это делается. Часа 4 все либы подключал и вспоминал как там инклуды на плюсах подрубить.
Как же хуево. Мозг просто разжижается от этих ваших нугетов и прочего говна.
> Я с шарпом вашим деграднул знатно.
Значит перестал жрать засохшее говно страуса, поздравляю.
> Make-файл
Хуета нечитабельная. Один раз написал универсальный под структуру проекта и таскал его потом везде. Чем сложнее процесс билда, тем больше магии в этом мейке. И ладно примитивный написать просто, но чтоб он каждый раз не пересобирал заново и не приходилось хардкодить сорцы это надо изъебнуться.
> Часа 4 все либы подключал и вспоминал как там инклуды на плюсах подрубить.
Так большинству похуй, они абсолютный путь указывают и мейком это как-то собирают, тупа хардкодя имена сорцов. Нет чтобы по-человечески сделать.
Разумеется я сам нагуглю инфу и про метатнит конечно знаю. Но если вы можете что-то на эту тему из собственного опыта подсказать чё где как учить, мне бы это лишним не было
Могу посоветовать professorweb.ru, там хоть C# и старых версий, но тему изучается более углубленно.
Расскажите, какая архитектура была у этих приложений, откуда какие данные шли и какие инструменты использовались при разработке?
> Используете ли вы Async суффикс в именах асинхронных действий контроллера?
Да
> использование nameof() для создания путей, генерирует не очень красивые пути example.com/comment/AddAsync/.
Ну так не делай так, лол
Допустим, у меня есть грид 10 на 10. Возможно ли как-то работать с ним, как с массивом? Обращаться к элементу контейнера по индексам, не зная название?
String Format(IFormatProvider? provider, String format, params object?[] args)
и метод инстанса например Int32.ToString(...):
String ToString(string? format, IFormatProvider? provider)
работают по разному и дают разный результат? Хотя по смыслу ожидаешь строго идентичного поведения.
См. приложенную картинку.
2. Есть ли какой-то вообще смысл в том, как сейчас устроен IFormatProvider? Он принимает Type и возвращает Object. Т.е. имеем и рефлексию и отсутствие типизации. Зачем оно так сделано в строго типизированном языке? Это ж уровень джаваскрипта и питона.
Спасибо анон, не знал о нём <3
Всё, понял, произошёл затуп
Все дело в методе GetFormat.
>Он принимает Type и возвращает Object
В нем в параметре formatType указывается, что нужно вернуть
string.Format ожидает что вернется что то реализующее ICustomFormatter - и только ему принадлежит метод Format
А ToString() у инта ожидает что тот вернет NumberFormatInfo (региональные настройки форматирования числа),
"Параметр provider — это объект, реализующий IFormatProvider интерфейс. Его GetFormat метод возвращает NumberFormatInfo объект, предоставляющий сведения о формате, зависящее от языка и региональных параметров, о формате строки, возвращаемой этим методом. "
например
new NumberFormatInfo() { NegativeSign = "~" };
и он ничего не знает про ICustomFormatter и его метод Format
>Зачем оно так сделано в строго типизированном языке
ну родилось оно еще в первом дотнете, а дженерики позже подвезли.
Мне вообще-то нужно что-то вроде структуры Thickness из четырех свойств, но только применительно к четырем углам прямоугольника (Rect не предлагать, это не то).
Да блин, я думал есть стандартные.
А зачем реализовывать интерфейс? Можно же просто структуру.
>Да блин, я думал есть стандартные.
Так и это есть стандартное. При передаче массива или списка подразумевается, что количество данных там неопределенно.
>А зачем реализовывать интерфейс? Можно же просто структуру.
Привычка.
Скорее нет, чем да.
А кортеж можно ограничить по числу элементов? Мне-то нужно сообщить пользователю метода, что нужно передать четыре параметра.
Ладно, я уже сделал свою структуру.
кортеж, как и любой класс с конструктором или структура с конструктором, потребует этим конструктором задать все значения, коих 4 штукенции
Картеж тут не поможет
Картеж хорош для возврата значений
(bool ok, string result) MyFunction()
Потом делаешь var c = myFunction(),
И потом легко получаешь доступ к t.ok и t.result без лишних движений.
А я всегда передавал аргументы по ссылке, если нужно было возвратить больше одного значения.
И как сделать чтоб он отсекал асинк?
<form method="post"
asp-route="someRoute"
asp-action=@nameof(KekController.LolAsync)
выдаст .../LolAsync/..
Это же дичь. Как минимум эстетически.
> Позиция треда по .NET MAUI ?
Сколько десятков тысяч строк в десятках манифестов там генерируется, чтобы написать хеллоуворлд? Напомни, а то я запямятовал.
угу там все на конвенциях. не самое лучшее решение
Можно написать свои хелперы, которые отсекут Controller/Async
Бамп вопросу.
> А кортеж можно ограничить по числу элементов?
Он всегда ограничен, до 16 максимум кажется. По-сути кортеж это просто структура, которая объединяет n переменных, ничего более. Ты с таким же успехом можешь в отдельном файле сделать свою структуру.
Как выше уже писали, их удобно юзать как контейнер для возвращаемого результата. Но также можно и в качестве аргумента передавать, не то чтобы это сильно удобно и красиво, но можно.
> Мне-то нужно сообщить пользователю метода, что нужно передать четыре параметра.
Пойдет любая структура с конструктором, который принимает твои 4 параметра, в том числе кортеж.
Хотя нет, спиздел про ограничение до 16, с другим попутал.
Например запускаю я сервер и у меня наружу выставлен один только маршрут POST \api\CreateRoute
Я ему в бади отсылаю имя нового маршрута (например MyNewRoute), тип и образец того, что он должне отдавать (джейсончик какой-нибудь например)
И если все норм, то на этом сервере появляется еще один маршрут GET /api/MyNewRoute который будет отдавать то, что я задал.
Цель сделать мок сервис для тестов, который можно конфигурировать на лету, без пересборки и перезапуска сервака.
Развивай мышление. Найди и устрани. Изи же.
его передадут извне.
а какой смысл делать out параметр? религия?
Comparer - это Func<T, T, int>
Func<T, T, int> - это любая функция вида int F(T t1, T t2)
Подразумевается, что это функция получит два объекта и вернет -1, если t1>t2, 0 если t1=t2 и 1 при t1<t2.
А можно нормальную сортировку, без бубнов с подразумевания...
я вот вообще не понял как это работает
Я хочу красивый метод где в одному метсе одним параметров входит не отсортированный, а в обычном старом добром сишном ретурне выходит отсортированный.
Мне алгоритм нужен а не псевдоСахар.
ну или поясни в чем фича.
Понял, всё он сортирует, но по возрастанию просто
Как мне тогда преобразовать запрос в лист?
Уже починил, надо было просто ToList() раньше делать, сразу после места где был запрос в бд. А в пикрелейтеде у меня уже преобразование полученных из бд сущностей в объекты бизнес логики
> поясни в чем фича
Метод анона универсальный. В этом фича. Туда подаётся на вход два массива специализированного под требуемый тип и функция сравнения под этот тип. И метод сортирует что угодно.
Пойми, типом могут быть абстрактные конструкции, которые сравниваются по сложным алгоритмам. Метод анона легко обработает такие типы.
Это у автора поста надо спрашивать.
Бамп вопросу
В фильтрах смотри значит
Допустим есть ряд железок уровня малинки.
Вооот.
Допустим у меня есть приложение, которое может к этим малинкам обращаться. На разных малинках - разное ПО крутится. Какие-то используются чтобы включать лампочки в подъезде, какие-то для того чтобы поливалку в огороде. Часть - следит за температурой и влажность в ванне и включает вентиляцию. Ну и какие-то еще хотелось бы присобачить для того чтобы можно было настроить разогрев чайника по таймеру, чтобы еду я домой, а оно мне уже горячий чайник вскипятило, а я чайку попил.
Ну, собственно, у меня есть сервер домашний с белым АйПи к которому я могу подключиться. Проблема на стороне малинок. Суть, я использовал готовые решения для всяких модбасов, чтобы этим всем управлять. Ну, и собственно столкнулся с тем, что мне приходится на стороне моего сервера - дублировать эти вот протоколы, но уже на шарпе. А т.к. я шарп люблю - возникло острое желание - и в малинках его крутить.
Собственно и вопрос-то в чем. Кто-нибудь подобное делал? Насколько это жизнеспособная система? Т.е. условно одна библиотека с реализацией протокльной части для устройства и сервера. С телефончика я услоно шлю по рест-апи на сервер запрос, допустим вида: [post]{"command":"switch_relay", "device_id":10, "delay":"00:00:30", "commandId":"1"}; сервер уже - преобразует это в запрос по протоколу - отправляет на устройство, а потом мне по веб-сокету - на телефоне приходит уведомление, что что команда принята на исполнение, а после этого еще и что выполнена. При этом протокол у устройства и сервера - на шарпе написан и соотвтетственно в малинке - дотнет. Что может пойти не так и вообще, что думаете об этом?
>Что может пойти не так и вообще, что думаете об этом?
Запустил ты чайник с работы, приезжаешь, а дом сгорел.
А если серьезно то уже года 3 нет проблем с запуском .net core на малине. Можно напрямую, можно в докере (правда я не в курсе как там из докера с доступом к gpio). Из явных подводных долгий холодный старт и потребление памяти, но в твоем случае это не должно быть сильным минусом.
>возможно, чтобы в ходе работы программы в окне появлялись и исчезали элементы интерфейса?
Да
>Как такое сделать?
Изучить какой-нибудь фреймворк вроде WinForms или WPF в зависимости от твоих потребностей.
Это пустая книга и я уже прочитал по 8 версии. Знаний из неё извлёк очень мало.
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:SportsStoreProducts:ConnectionString"]));
Что это? Куда это? При этом у меня это не компилируется, потому что метода UseSqlServer просто нет.
Вот нахрена так писать, что ничего не работает. Нельзя было сделать проще? Обязательно надо сделать всё через длинные портняки непонятного кода?
ASP.NET вообще такая параша. Что он вообще упрощает? Надо заучивать миллионы такой вот хрени, чтобы запустить простое веб-приложение, когда на том же РНР тоже самое достигается парой строчек абсолютно понятных команд.
Я вот просто не знаю как его изучать. Все старания разбиваются об стену того, что ничего невозможно сопоставить. В книге пишут одно, на деле совершенно другое. В каждой версии разрабы-придурки ещё раз 100 всё поменяют, чтобы гарантировано ничего не работало. Какой-то бред...
> Что может пойти не так и вообще, что думаете об этом?
Серверный скрипт гораздо короче клиентского. Ради 3.5 строчек кода тянуть тяжелый дотнет на портативную железку я бы не стал. Наверняка в этих ваших малинках есть портативные сервера искаропки, я бы потратил энное время в часах, но не более пары дней на изучение имеющихся искаробочных решений и просто сделал бы клиент на шарпе. И протокол свой, с требуемыми типами запросов и ответов. И реализовал бы его на сервере скриптами. И всё.
> Обязательно надо сделать всё через длинные портняки непонятного кода?
Вот тут с тобой согласен. В книгах надо писать подробно расписывая всё по строчкам для новичков и опционально в конце давать однострочный вариант. Как-то так:
> HurrDurr builder = new HurrDurr();
> DBOptions options = new DBOptions();
> config = Configuration["Data:SportsStoreProducts:ConnectionString"];
> options.UseSqlServer(config);
> builder.Services.AddDbContext<ApplicationDbContext>(options);
Or if you're not derp:
> builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:SportsStoreProducts:ConnectionString"]));
https://youtu.be/5ULrXLwhFe0
Ну в пшп это крон. А в АСП нет коре что? Нагуглил Quartz.NET. Его нормальные пацаны юзают чи есть что другое по проще и по лучше?
> чи есть что другое по проще и по лучше?
Я бы на твоём месте отталкивался от платформы, на которой у тебя АСП-сервер крутится. В ней, стало быть я бы вызвал стандартный для платформы планировщик, тот же крон для линукса. И далее по накатанной.
И вот еще пять секунд в гугле
https://stackoverflow.com/questions/61372133/how-to-run-cron-job-every-day-in-asp-net-core-application
пасаны насоветовали собсна и твой кварц и ещё два конкурента, и громоздкое решение от майков в стиле майков.
А вижла её найдёт? Мне надо, чтобы ещё шаблоны создавала старые, а не из 6 версии, где всё испортили.
А на что именно мне оттуда может пригодиться? У меня не так много времени, чтобы учить всё.
Я забыл упомянуть, что эта "БД" должна быть просто локальной программой, никакого майэскеля там не нужно, никаких браузеров и веба. Только простая локальная программа и всё.
Вызывать этот какой-то класс из вьюмодели, которую ты к хамлу забиндил, например
С шаблонами скорее всего будет облом, впрочем надо ставить и смотреть. Я этого за тебя делать не буду. В самом тяжёлом случае, просто скачай шаблоны с форумов каких-нибудь МСДН-шных.
> Мне надо, чтобы ещё шаблоны создавала старые, а не из 6 версии, где всё испортили.
Вот ещё тебе совет из гугла:
1. Создаёшь проект такой командой: dotnet new имяшаблона --framework net5.0
2. Открываешь файл csproj
3. Меняешь <TargetFramework>net5.0</TargetFramework> на <TargetFramework>net6.0</TargetFramework>
4. Профит.
The C# Player's Guide - какое на данные момент актуальное издание?
Хватит ли b2 лвл, чтобы осилить? Или стоит почитать перевод?
Если будет линк на актуальную pdf + тебе в карму анон. Спасибо!
ну в 22 поправили для асп.нет коре проектов эту хероту и там при создании можно поставить галку
> какое на данные момент актуальное издание?
5
> Хватит ли b2 лвл, чтобы осилить
Да
> Или стоит почитать перевод
Его нет
> линк на актуальную
https://libgen.is/book/index.php?md5=028E9A86F3D3CA10B2DE8F883D6198B3
Благодарю анон!
Второй день бьюсь и не могу его примеры с базой запустить. Абсолютно ничего не работает.
Кварц, нормальная тема.
https://docs.microsoft.com/ru-ru/ef/core/modeling/keyless-entity-types?tabs=data-annotations
Либо тупо через чистый sql, в принципе так даже быстрее. Т.к. обычно работа с такими таблицами идет по следующей схеме: "Закинуть сырые данные" -> "Изменить/связать сырые данные с актуальными" -> "Перекинуть их в целевую таблицу"
Такое проще единым sql запросом делать либо напрямую из кода, либо как хранимую процедуру дергать.
Ну не пизди, а. На днях только 2022-ю студию поставил, все там есть. И сдк и шаблоны.
Sqlite тогда смотри.
Нужно предотвратить случай, когда 2 пользователя пытаются одновременно оплатить заказ.
Сейчас делаю, как на скрине, оба платежа прерываются.
Если делаю transaction.Rollback(), то ошибка "This SqlTransaction has completed; it is no longer usable.".
Нормальное решение или нет ? Если нет, то подскажите, как реализовать ?
Это не должно быть проблемой, ты используешь статический класс? Покажи как имплементирована бизнес логика.
И вообще, нахрена тебе там транзакция, для простого добавления рекорда создавать транзакции не нужно, ентити сам это делает.
А где собственно проблема кроме попытки роллбека выполненной транзакции?
Кстати в обоих случаях оказывается оба платежа проходят. Думал мб поставить как-то в EF уровень изоляции serializable.
Я не понимаю проблему, если не хочешь что бы добавлялись одновременно сделать статический класс и очередь, нет не делай статический класс и очередь. можешь нормально объяснить в чем проблема?
Зачем ты вызываешь DIspose, если он автоматически вызовется при выходе из using?
Ну если одновременно отправить 2 запроса на сервер чтобы обновить одну и ту же запись в таблице (снять деньги со счета), то оба запроса обработаются. Пробовал добавлять таблицу, в которую заносятся счета, которые в данный момент используются в операции и проверку (используется ли сейчас счет), но при одновременном запросе это не помогает.
По идее ведь изоляция транзакций уровня serializable должна решить эту ситуацию, но хз пока, как в EF её настроить, чтобы проверить.
Забей, я еблан, показалось, что это каким-то чудом помогло, но на самом деле нет
Скинь текущий код, который не работает, тогда
Аноны , на связи зеленый джун. Написал тут простенькое wpf приложение на работе. Как сделать так , чтобы после развертывания приложения при помощи установщика можно было обновлять версии приложения без переустановки программы?
Насколько я видел в других прогах, отдельным приложением работает проверяльщик — он стучится на сервер и если там есть новый апдейт, то он скачивает его и переустанавливает основную программу.
1. Основная программа при старте запускает проверяльщик
2. Если проверяльщик нашел что-то новое на твоем сервере, то спрашивает у пользователя разрешение на установку.
3. Если пользователь соглашается, то проверяльщик закрывает основную программу, скачивает обновление, переустанавливает, запускает основное приложение и закрывает себя.
Так же и эррор репортинг часто находится отдельным экзешником (все это, конечно находится в основной директории, а не разосрано в програм файлс)
Ну я это для теста делал. В реале ведь к базе вообще с разных устройств будет обращение.
Еще проверку на существование других экземпляров программы проверь, а то мало ли — пользователь не сохранил работу и все похерится.
Обычно программы требуют пользователя закрыть все проекты перед обновлением. Например вижуал студия.
Всмысле один заказ?
В таком случае в реальном мире выносят это дело на сторону базы. А как ты хотел? Вешаешь constraint и триггеры, делаешь хранимку по оплате, которая должна падать, если товар уже оплачен, избегая таким образом блокировок накладываемых сверху транзакцией.
Есть инфа, что ты уже сегодня можешь создавать полнофункциональные кроссплатформенные приложения уровня пикрелейтеда на стабильном и документированном UI-тулките.
https://github.com/picoe/Eto
В VB есть волшебное слово и никакого визуального мусора.
Property Var as Integer = 5
А еще я сегодня узнал, что можно один проект на шарпе написать, а другой на бейсике и вместе это работает. Какой я у мамы молодец, непонятно нахуя, но забавно ломать пустой мозг.
>Как же жопно в шарпе объявляются свойства. Нет дефолтного Set и Get.
Ты тупой?
public string PropertyName {get;set;}
или
public string PropertyName
{
get
{
if(...) ///
}
set
{
// if(...)
_propertyName = value;
}
}
Ты разве не видишь, что {get;set;} это далеко не property?
Чисто механически слово набирать проще, чем микс из слов и символов. Да, можно юзать помощник VS, который поле конвертирует в свойство, но все равно я считаю пососной реализацией. Я помощник использую только для конвертации в полноценное свойство, как у тебя на втором примере.
Ну и укороченная версия все равно мусорно выглядит, если так по факту-то. Удивлен, что нет ключевого слова Property, это же гораздл чище и читабельнее.
Зато у вас int вместо Integer.
Ни в коем случае. Твои любимые зумер баззворды MVVM и XAML там есть.
>есть инфа от инсайдеров, что MAUI взлетит и займет 40% рынка мобилок
Не взлетит и не займет. Этот ваш ксамарин - раздутый, сложный медленный и ну очень долго запускается. И всратый ксамл вместо всем знакомого html, с убогой поддержкой css. А еще майки его сознательно кастрировали, лишив поддержки линукса, чтобы виндовс у них лучше продавался. Мертворожденная технология, причем намеренно. Типа, си-шарперу будет быстрее изучить условный реакт, получив при этом больше скорости и кросплатформенности, чем понять, как там ваш маюай делать.
>>360169
>А книжки напишут по MAUI?
Это просто переименованная новая версия ксамарина. Уже миллионы книжек написаны.
> си-шарперу будет быстрее изучить условный реакт
Вот с этого момента поподробнее, плиз. Давно присматриваюсь к нему, но никак руки не доходят. Есть годные гайды/туториалы для быстрого вката?
>А еще я сегодня узнал, что можно один проект на шарпе написать, а другой на бейсике и вместе это работает.
Через какую же задницу ты гланды удалял изучал VB и C# если этого не знал. Это буквально одна из базовых особенностей .net-а
Не, ну вот первый пик на мой взгляд очень охуенный. Все просто как топором вырублено, без всяких пидорских завитушек, скруглений и прочей поебени. Люблю этот старый win3.11 стайл
>И всратый ксамл вместо всем знакомого html, с убогой поддержкой css
Нашел что сравнить
html - чисто язык разметки, а xaml - выражение кода через хмл.
Я знаю про промежуточный язык IL, но я думал это удобно для переваривания операционной системой конечного продукта.
К тому же, в теории там что-то совместимо, а на практике даже в конкретном языке может встретиться какое нибудь НО, которое перечеркивает все, типа как запрет наследования. С чего бы и тут не стоял бы какой нибудь менеджментский припон?
Вот взять DLL, а там не все так универсально. Библиотека на .net идет нахуй т.к. она управляемая. Вот тебе НО.
>К тому же, в теории там что-то совместимо, а на практике даже в конкретном языке может встретиться какое
Во первых полной 100%-й совместимости в разных платформах не бывает нигде и никогда.
Во вторых для решения этих вопросов и был придуман CTS. Если твои поделия ему соответствуют, то они будут совместимы.
>>360430
>которое перечеркивает все, типа как запрет наследования.
Это вообще мимо, т.к. решение, что запечатать принимает разработчик.
>>360430
>С чего бы и тут не стоял бы какой нибудь менеджментский припон?
Ага, еще жидорептилоидов приплети.
>что запечатать принимает разработчик
Не важно кто и почему, важно что в итоге возникает преграда, обрубающая определенные возможности. И вопросы уровня "а ты и не знал, что .net совместим" — хуета. Возмущает сам факт обвинения меня в том, что я посмел усомниться в совместимости.
>Ага, еще жидорептилоидов приплети.
При чем тут жидорептилоиды? Я просто пишу, что в 90% случаев всплывает какая-то хуйня, которая делает невозможным совместимость, потому я даже и не пытался совместить проекты на разных языках.
Не. Так можно делать с любым енумом. Но почему-то через генерик не даёт.
Генерик это вообще весьма частный случай. Я так же не смог через генерик достучаться к свойствам. У меня был поинт и вектор, и у обоих есть свойство .X, нот хуй там.
Спасибо, двач, как всегда не помог.
Ну тот код это просто для тестирования. А так задача простая: провалидировать значение енума. С нефлаговым все просто: IsDefined<T>. С флаговым сложнее: надо, чтобы для enum Foo { A = 2, B = 4}, значения -1,0,1,3,8... определялись как недопустимые и валидатор мог работать с любыми енумами. Вот и ебусь. Не я знаю про способ !value.ToString().All(char.IsDigit), но плодить строки это же фу.
Благодарен
Какую иерархию? Это уже готовые структуры. Мне предлагали свое делать, а так каждый дурак сможет и без этих ваших обобщений.
Тащемта секретов тут нет. Чем мельче контора, тем меньше сотрудников в шате, тем сильнее им необходим универсал. Ну и зарплата и качество знаний по каждому вопросу там меньше.
Я думаю, что в теории ты должен знать все огульно, а дальше углубляешься во что-то конкретное. Стартовать тебе все равно придется с шарашек.
никто. ибо для винформс мввм не подходит. там подходит MVP
Представь, что у тебя на клавиатуре вместо одной кнопки delete, будет delete folder и delete file. Удобно? Ну вот, мне надо, чтобы пользователь указал, что ему нужно удалить: это может быть файл, а может быть папка, а может все вперемешку.
Да. Но решилась это апдейтом студии
у WPF вообще беда с этими диалогами
https://github.com/dotnet/wpf/issues/438
из представленного там...
- винформс OpenFileDialog может мультивыбрать, но отдаст только имена файлов
- https://www.codeproject.com/Articles/5255769/Csharp-Select-FolderDialog-for-NET-Core-3-0 если убрать флаг FOS_PICKFOLDERS и добавить FOS_PICKFOLDERS, то можешь мультивыбрать, но получение результата нужно переписывать. Как? хз
- ookii-dialogs-wpf там типа уже сделано получение мультирезультата, но если убрать FOS_PICKFOLDERS, то все равно ((IFileOpenDialog)dialog).GetResults(out IShellItemArray results); возвращает только файлы. Так что тоже тупик. Там еще есть ((IFileOpenDialog)dialog).GetCurrentSelection но хз че с этим делать.
так что ничего нету.
Смотрите какие сущности я вижу:
IAcceptor - тут все просто, метод Accept - принимает входящие соединение
IConnection - собственно само входящее соединение, имеет метод Open, Close, Input - стрим из которого приложение получает данные этого самого соединения, Output - тут приложение пишет данные и потом под капотом реализующий соединение - отправляет их куда-то
С этим понятно, аксептор нужен для сервера, IConnection - используется и сервером и клиентом.
Но дальше - я придумал выделить сущность IProtocol, которая нужна для того чтобы можно просто было ждать именно Сообщений.
И вот тут уже чет проблемы.
Как я это видел:
interface IProtocol<TMessage, TContext>
{
Task<TMessage> ReceiveMessage(Stream input, TContext context, CancellationToken ct);
Task Send(Stream output, TContext context, CancellationToken ct);
}
И меня смущает во первых - контекст. Я TContext использую, т.к. некоторые протоколы - Stateful и в зависимости от текущего состояния сессии - нужно всякое разное делать, в том числе - при парсинге - учитывать, что этот поток байт вообще этого протокола чи нет.
Во-вторых, то что оно вот так вот размазано. Потому что в коде который я вижу в интернете от, бессомненно, более умных и талантливых людей, обычно просто есть TCPServer, TCPSession и сбоку TCPClient, там просто хендлеры на Receive, Send, а протоколы делаются путем наследования и создания уже внутри клиента или сессии своих особенных штук.
>Пацаны. Помогите спроектировать правильно библиотеку для работы с TCP/IP
А чем встроенная плоха?
Тем что слишком низкоуровнево.
Я хочу в конечном счете получить что-то типа:
var application = TcpServerBuilder
.Use<SocketListener>(80)
.UseProtocol<HttpProtocol>()
.MapMessages(m => MyApplicationRouter.Map());
application.Run();
Меня пугает обилие синтаксического сахара в сишарпе, который надо будет заучивать и в каждой новой версии они ещё накидывают. А вот джава медленно меняется и учить надо меньше и можно по старым книжкам, которые хорошо всё разжёвывают.
>и учить надо меньше
и, как следствие, использовать. Там где шарпист обойдется 1 строкой - на жаве будешь городить огород, причем не всегда этот огород будет эквивалентен.
Тебя, по хорошему, должно пугать только то, что шарп все еще детище MS и эти черти слишком уж любят ломать через колено то к чему уже привыкли и что работает, просто потому что один из управленцев решил получить повышение, протолкнул какую-то хуйню и теперь вот у нас так. А вы как-то живите с этим.
Времена начала времен кора - оч это иллиюстрируют, когда нам сказали - теперь вы JSON'ами пользуетесь, потом - ой, чет json-хуйня, давайте обратно к XML. Или куча фигни - сломать, чтобы потом героически починить.
В жаве в этом плане - такое происходит реже и постепенно.
А синтаксис и прочее - ну, это конечно важно, но на самом деле - нихуя. Учится оно по мере использования, и учится на самом деле быстро.
А что там такого в LINQ-то? Обычный Fluent(https://ru.wikipedia.org/wiki/Fluent_interface) если мы про обычное использование. В старом варианте - там да, инородная хуйня, похожая на SQL, но тем кто с SQL знаком - даже удобнее было.
ну так готовь капельницу. в жава тоже есть такое - Java Stream API
но да - там ДОХРЕНА чего нет.
>провалидировать значение енума.
Зачем валидировать флаговый enum ?
Ты работаешь только с теми битами которые ты в нем определил, на остальные тебе должно быть насрать. Даже если там, что-то левое приходит, просто не учитываешь это и все.
Ну вот так вот получилось. Кстати стоковый EnumDataTypeAttribute проверяет, но там вообще ух. Сначала енум упаковывается в обжект, потом конвертится в андерлаингТайп, который преобразуется в строку. Потом в строку преобразуется енум и сравниваются две строки на равенство. В общем от того, что майки сами не смогли со своими енумами ничего придумать мне полегчало и я тоже оставил у себя проверку через строку
>блять несешь?
просвещение в массы.
Попробуй писать гуи кодом и сразу увидишь что выражение в коде логически совпадает с хамл выражающий ту же структуру.
В отличие от хтмл, который никакого отношения к коду не имеет вообще, и потому в нем "выражайся как хочешь - плоди свои тэги, пиши какие угодно атрибуты, вкладывай что хочешь во что хочешь - запретов нет"
Дорогие Сеньёры-Помидоры СИшарписты, требуется помощь блядским XAML`ом.
Суть такая: делаю курсовую, нужно нашкодить систему управление складомна самом деле складами, но мы опустим эту подробность .
Пытаюсь впендюрить Listbox для вывода бд со списком товаров на складе ,впендюриваю её в StackPanel. В самом StackPanel есть разметка, так вот, эта разметка ебёт мозги и не работает, Вот скриншот со всем эти калом, помогите пожалуйста
по коду не понять что изобрести пытаешься
какой то грид в гриде и с чего вдруг TextBlock в DataTemplate должны видеть все эти Grid.Column
что вообще должно быть в итоге то. картинками.
Конкретно пытаюсь изобрести табличку как на пикреле. TextBlock в DataTemplate мне предложил сама VS, а грид в StackPanel я нахуевертил потому что подумал, что оно сработает. Ну и по поводу привязок блоков к колонне грида - VS не поругалась на это, поэтому предположил, что сработает
Препод посоветовал организовать это через ListBox, ибо можно сделать темплейт по которому новые данные будут отображаться автоматически
что это значит? Я бы понял еще если бы разные шаблоны для разных данных (хотя это может любой списковый компонент), но из картинки этого не следует - там обычная таблица
Это была аргументация моего преподавателя, я вообщее в XAML`е не смыслю поэтому и приполз за советом
>VS не поругалась на это
она не будет ругаться на это - это всего лишь дополнительное свойство, которое интересно гриду когда он думает как расположить вложенные компоненты.
>>361403
> аргументация моего преподавателя
хз о чем он.
листбокс плохо подходит для создания таблицы. это нужно лепить гриды с SharedSizeGroup. Но зачем??? Если не нужны полностью разные строки, то бери DataGrid - он для этого и придуман.
Известно что в языках, типа бейска или джава скрипта, где символ конца строки необязателен — символ все равно ставится, но так сказать за "сценой". Из-за этого в джаваскрипт начинается угар, если открывающую скобку ставишь не на той строке, где нужно — можно получить совершенно не то, что ожидаешь. В бейсике это тоже наблюдается, например при использовании With.
Казалось бы, вот он плюс точки с запятой в шарпе, но нет, кек. Конечно, это не приведет к другим последствиям, но факт примечателен. Точка_с_запятой-бляди, зачем вы ее носите с собой?
>Казалось бы, вот он плюс точки с запятой в шарпе, но нет, кек
к жава этих претензий у тебя нет?
Тоже интересует этот вопрос. Я не вижу причин, почему не могут сделать парсер, который разбитает код на токены перед компиляцией, такой, чтобы ему не требовались знаки препинания.
Если я пишу:
> string a = "abc" int b = 123
То очевидно же, что есть способ распарсить эту строку на две переменные, и точка с запятой там не нужна.
> using System using Forms namespace Foo { class Bar { string a int b = 10 bool c Bar(string newA) { if (newA.Length > 0) { c = false a = newA } } } }
Всё прекрасно разделяется на токены без точек с запятой. Ящитаю, это дань традиции, когда парсеры не умели в токенизацию.
Код он для человеков, машине и брейнфак разпарсить не проблема. А так как люди разные, то и универсального решения нет. Я бы не хотел такое читать и всегда стараюсь разносить по линиям
"рекомендует"
Тут ведь интересен сам факт, что эта дефолтная рекомендация не имеет под собой основания конкретно для шарпа. Это было бы логично для бейсика, где знак окончания строки ставится автоматически.
Это все равно что придумать автомобиль, суть которого — передвижение, но при этом ругать пользователя, который решил нажать на педаль газа.
Совершенно очевидно, что точка с запятой — маркетинговый ход, чтобы набрать веса среди авторитетной части программистов, болеющих терминальной стадией синдрома утенка. Инструменты студии притворяются, что им нужна эта точка с запятой.
Я специально написал одной строкой, чтобы показать, что парсер в конечном итоге работает с одномерным потоком данных, неважно на сколько визуальных строк ты его разобъёшь для своего удобства. Один токен отделяется от другого пробелом, табом, кареткой в любых их сочетаниях. И всё.
>Я бы не хотел такое читать и всегда стараюсь разносить по линиям
Я тоже по началу юзал венгерскую нотацию, но надо себя переучивать. Такой код хорошо читаемый для новичков, но очень мусорный на практике. Касательно фигурных скобок, особенный пиздец, когда у тебя в конце "висит" несколько одиночных скобок. Вангую ты не раз случайно захватывал ненужную.
А вот при таком подходе проблем не будет. Тут сразу видно принадлежность скобок:
if (false == false) {
KEK.Show();
return;}
Пориджи попытались в демагогию.
Так о том и речь, что в шарпе должно быть все равно где начинается скобка — это на усмотрение пользователя. Но студия почему-то намекает, что это важно.
> Но студия почему-то намекает, что это важно.
Выше анон скинул скрин, что это "важное" отключаемо в настройках, а значит это вопрос стиля, а не сложностей парсинга.
> Совершенно очевидно, что точка с запятой — маркетинговый ход, чтобы набрать веса среди авторитетной части программистов, болеющих терминальной стадией синдрома утенка. Инструменты студии притворяются, что им нужна эта точка с запятой.
Двачую. Надо, чтобы в настройках была аналогичная галка, чтобы отключить требование точек с запятой и писать уже спокойно без них.
Это важно когда на кодом работает несколько человек. Но если все согласны использовать другое расположение скобок, то можно настроить. По-умолчания студия форматирует под общепринятые стандарты.
> Тут сразу видно принадлежность скобок:
Да с чего это хрен пойми как расположенные скобки для тебя более читаемы, чем выровненные по отступам и с вертикальной соединяющей линией? А теперь накидай скобок от условий, циклов и лямбд.
Ну во-первых, так тупо быстрее писать.
А тело блока я воспринимаю наличием табуляции.
В конце нет вот этого злоебучего
}
}
}
когда можно случайно захватить ненужную скобку при копировании.
>>361630
Медленно идут к этому. Уже неймспейсы можно не прописывать. Может в будущем избавятся от бейсика, а в шарп добавят галочку. Уже сейчас, кроме точки с запятой, там практически отличий нет.
Еще я заметил, что в шарпе не всегда автозавершение работает полноценно. Почему-то в бейсике у меня полноценно пишется .ToString(), а в шарпе я круглые скобки дописываю вручную. Тоже самое касается указания региона. В бейсике #endregion дописывается автоматом.
Собственно, автокомплит в шарпе и в бейскике.
>Ну во-первых, так тупо быстрее писать
По-подробнее? Я пишу открывающую скобку на той же строке и жму энтер. Студия сама переносит скобку и ставит закрывающую.
> воспринимаю наличием табуляции.
Табуляция ровно такая же.
>нет вот этого злоебучего
Зато такое }}} или вобще рандомно разбросано по строкам?
>случайно захватить
Опять же не понятно почему, они же выровнены табами + подсвечиваются + соединены линией. А вот как выцеплять скобки с концов строк неясно.
>Зато такое }}} или вобще рандомно разбросано по строкам?
Не, в конце блока только скобка закрывающая этот блок. Остальные скобки на следующей строке.
Тут речь идет о малых блоках внутри больших.
>Опять же не понятно почему, они же выровнены табами
Речь о секундах, нужна хотя бы секунда чтобы въехать какая куда скобка. А в моем варианте я копирую на автомате.
Как прервать этот порочный круг? У меня есть таймер, который должен вызвать и ожидать асинхронную функцию. Как это сделать?
>>361665
Почему ты не можешь сделать функцию асинхронной? Ты все еще можешь ожидать таску синхронно, но бойся дэдлоков. Ты можешь работать с тасками как во времена до асинков - через продолжения задач.
А зачем таймеру ожидать? это ожидание ни на что не влияет
Влияет если после ожидания перепланировать таймер, чтобы избегать накладок одновременного выполнения - но тогда лучше переписать в вечный цикл с Task.Delay
В общем таймер некуда впихнуть
Ну это очевидно. Наличие асинк у вызываемого метода никак не влияет на его вызов. Это же просто указание компилятору развернуть метод в стейт машину.
>но бойся дэдлоков
как я понимаю для этого придумали JoinableTaskFactory, хотя сам никогда не использовал
Вроде читаешь книгу по языку, то всё понятно, всё красиво. Переходишь к фреймворку и на тебя словно ушат говна выливают.
Не понимаю, в какой момент программирование превратилось в такой кал!?
>Учил C#, сгорел ноут, на нетбук (1 ядро х32, 2гю памяти) visual studio вставать отказался, где можно побомжекодить
>>334153 (OP)
>2. Онлайн-компиляторы:
Вот через это реально что-то наговнокодить?
Дерьмо какое-то для хело ворлд.
А вс код пробовал? Он же легче даже комьюнити-версии. Там накатишь аддон для шарпа и все.
Все это есть и в стандартной студии.
>Есть смысл вместо визуалки попробовать?
за попробовать не бьют. но пока там нет diagnostic tools - на студии удобнее.
>Ты разве не видишь, что {get;set;} это далеко не property?
Повторюсь, ты тупой? get и set в конечном итоге развертываются в 2 метода (коими и являются). Это просто сахар.
>Чисто механически слово набирать проще, чем микс из слов и символов.
Не проще. Сам попробуй по написать public string PropertyName {get;set;} или делать 2 метода get/set
>Ну и укороченная версия все равно мусорно выглядит, если так по факту-то.
Не мусорно. Просто ты жабо-долбоеб не можешь принять факт и смириться, что шарп за 10 лет развился раз в 6 лучше чем твоя залупа которой 100 лет в обед.
> А вот джава медленно меняется и учить надо меньше и можно по старым книжкам, которые хорошо всё разжёвывают.
Частые релизы с 5-7 апдейтами воспринимается намного лучше и быстрее чем раз в 2 года по 100500 апдейтов какого-то говна. Мало того, что багов будет пиздец как много, так еще и к хуям старая хуйня наебнется, если внезапно отрубили поддержку хуйни_Нейм.
Понятное дело что тебе джуну-мидллу похую че там нового сделали, ты замечаешь изменения только в синтаксисе. А мне вот пара изменений в IL коде критичны, поскольку могут сэкономить кучу времени при условной выборке данных.
Я как-то задавал подобный вопрос на стековерфлоу. Дядя мне ответил следующее:
>Все эти таймеры, обработчики события и прочее создавались во времена где Task'ов еще в помине не было. Поэтому, если тебе нужен асинхронный таймер - сделай его сам через Task.Delay
>Не проще. Сам попробуй по написать public string PropertyName {get;set;} или делать 2 метода get/set
В бейсике я не делаю два метода. В бейсике я пишу:
public Property Name as string
В короткой версии у меня вообще нет {get;set;}
>Это просто сахар.
Не очень сладкий.
>Просто ты жабо-долбоеб
Я бейсикодолбоеб, ты жопой читаешь.
>В бейсике я не делаю два метода. В бейсике я пишу:
Чет я проорал. Ты там с завода Красный Октябрь в Волгограде капчуешь?
>Не очень сладкий.
Ладно. видимо написать public Property Name as string это намного быстрее чем get;set;
Вопрос не про гит, а линтеры. Стайлкоп, например, не может в запуск не из вижлы, а его гитхабовский консольный аналог с проблемами.
Кст хороший ответ.
Вообще, есть какой-нибудь джентльменский набор настроек, чтобы сделать студию менее навязчивой?
>Конечно быстрее. У тебя микс из букв и занков.
студия {} поставит автоматически, ; ставишь правой, get set набирается левой т.к находятся близко друг к другу, пока ты там по всей клаве пройдешься ради всего алфавита - я уже напишу три проперти
Чел, тебе же уже сказали. В последней студии уже достатоно набрать p и нажать tab два раза и у тебя вся конструкция набрана. И остается набрать только тип и название свойства (причем курсор уже стоит там где нужно.
Чел, тебя вчерашний шторм не разбудил.
Достаточно стукнуть хуем по клаве удерживая TAB, и студия сама пишет десять пропертей, конструктор, затем открывает вкладку двача и набирает за тебя капчу.
В 2023-й экспериментальной версии если почесать правое яйцо, то расставляются все точки с запятой в конце строки, а если левое, то добавляется табуляция.
плюсы - крос и другая система стилей
минусы - отличаются. будет обычно "блин да вон в WPF есть, а тут как делается, где нормальная дока, а не чат".
Например CollectionViewSource из последнего у меня - правда я авалонию не учил чтобы уж конкретно, просто нужно было сразу писать и я вижу что нету, а искать запаришься. А ранее вот не видно таблицу под линукс - и оказывается нужно добавить стиль дефолтный. А ведь на все это нужно время...если конечно авалония не твой дефолтный движок и ты все это знаешь.
А еще минус для меня - рендер шрифтов. Как ни крути - под виндой лично у меня на мониторе получается МЫЛО.
> Стоит ли мне переключиться на изучение авалонии?
Авалония - это говно от российских наёбщиков.
Юзай православное импортное Eto.Forms
Раньше на РНР это легко делалось через куки. Т.е. скрипт читал значение куки и подгружал нужный шаблон примерно так:
/templates/_COOKIES['template']/index.html
Но как так сделать в ASP.NET? Тут всё гвоздями прибито и ни какой гибкости.
> Тут всё гвоздями прибито и ни какой гибкости.
Пиздишь же.
Я в этом асп не работал ни разу, но просто логически делаю вывод, что асп может в куки, если бы не мог, не достиг бы своей популярности.
А раз он может в куки, ты точто так же можешь там хранить любые буквы, как хранил до этого.
Соответственно, в шарпе тебе ничего не мешает завести массив темплейтов и выдавать их как-то так (псевдокод):
> var template = TemplatesArray[CookieManager.GetByKey("template")];
Сейчас вроде никто уже не использует ASP.net для фронта. Его нормальная ниша это чистый бэк с веб-апи. А фронт все делают либо на React/Angular, либо еще на чем-нибудь.
Так что ты херней маешься на мой взгляд.
вечно у тебя проблемы. следи за руками
1 регистрируем services.AddHttpContextAccessor();
2 теперь мы можем в контроллере получить IHttpContextAccessor httpContext)
3 у него можем заглянуть в куки
httpContextAccessor.HttpContext!.Request.Cookies.ContainsKey("...");
httpContextAccessor.HttpContext!.Request.Cookies["..."];
4 на основании велению левой пятки выбираем нужный шаб
return View("FooBar");
или пробрасываем значение во вьюху и пусть там разгребают
1005000 раз повторяю - нет разницы от пхп, руби и так далее
еще как используют.
>А фронт все делают либо на React/Angular,
такая же маркетинговая чушь как и "рсубд устарели, NoSql рулят".
кто использует Razor Pages - сами себе буратины
Добавлю, что в зависимости от задач, можно это делать не в самом контроллере, а фильтре, чтобы код один и тот же код не пердолить везде.
>такая же маркетинговая чушь как и "рсубд устарели, NoSql рулят"
Ну так-то да, но к сожалению чушь порешавшая рыночек.
Но с другой стороне, на таких проектах у меня есть возможность уютно пилить свой бэк, полностью забив хуй че и как там у них крутится на фронте. Максимум согласовывая ДТО-шки с фронтовиками, а то и вовсе можно им отдельный загон с ними выделить и пусть сами пехаются с ними.
Она возрастает только потому, что у тебя слабая база. Ты считаешь что изучил основы, но - нифига подобного. Ты с ними всего-лишь ознакомился и думаешь, что все постиг. А когда пытаешься перейти к более комплексным вещам, то мозг буксует, т.к. не плохо понимает основные кирпичи из которых все состоит.
Грубо говоря - это как если ты пытаешься решать квадратные уравнения только вчера изучив основные арифметические действия и толком еще не понимая где надо складывать, а где умножать.
Концепция того, что "достаточно в чем-то разобраться/понять и ты уже изучил тему" - неверная. Вернее это всего лишь часть процесса познания. А вот во второй части тебе надо именно, что задрачивать навыки, так чтобы они стали автоматическими. Только тогда более сложные вещи станут для тебя настолько же понятны как и основы.
Если по минимуму.
Предусловия.
Хорошая знание C#. Понимание работы с коллекциями, LINQ, интерфейсы, DI, делегаты, анонимные методы, лямбды, расширения, асинхронщина и т.д.
Понимание принципов работы БД. Таблицы, связи, ключи, индексы. Знание SQL хотя бы на уровне простых запросов.
Понимание что такое HTTP запросы, в чем их суть из чего состоят. Умение работать с Postman-ом или Rest Client-ом VSCode. Знание отладочной консоли браузера.
---
Создаешь новый проект ASP.Net Core 3.1 Web Api (именно Api, а не App, не перепутай)
Изучаешь как работает DI. Как прокидывать сервисы.
Изучаешь работу с контроллерами.
Откуда они берутся, как запрос проходит через них, как формируется ответ.
Затем работа с БД и EF. Как подключать, как создавать, как обращаться и гонять данные туда-сюда.
Изучаешь типичные структуры приложений вроде луковой или cqrs. Учишься применять их правильно, а не по уебански.
Изучаешь валидацию и мапперы.
Изучаешь авторизацию.
Изучаешь логгирование.
Изучаешь swagger (опционально, но идеально для показа своих бэкэндерских высеров, если неохота к ним нормальный фронт пилить)
В принципе после этого личинка бекэндера готова. Можешь перекатываться на стажерские позиции и учить дальше.
Когда для тебя это станет как воздухом дышать.
Как минимум ты не должен задумываться что и как делает какая-нибудь конструкция в языке. Ты просто берешь и ебашишь, то что лучше подходит под ситуацию или больше тебе по нраву.
Не будешь задумываться что тебе выбрать for или while, string или StringBuilder и т.д.
Когда ты смотришь какой-нибудь пример из длинного запроса к БД через EF, ты должен именно разбирать что и в каком порядке у тебя по запросу выдается, а не пытаться мучительно вспоминать, что означают всякие => и как работают методы расширений и т.д.
Вобщем, чем меньше ты будешь думать при написании кода, тем лучше ты знаешь язык. Мозг он тренируется точно так же как всякие механические рефлексы вроде вождения или слепой печати. Задрачиваешь ситуации пока в твоей нейросетке не образуется отдельный участок отвечающий конкрентно за то, что тренируешь и дальше он действует сам независимо от тебя.
Спасибо большое. Схоронил
Когда начнешь относиться к коду не как к нерушимым заклинаниям.
>>363559
> пока в твоей нейросетке не образуется отдельный участок отвечающий конкрентно за то, что тренируешь
дело в том, что распространено заблуждение, что у человека в мозгу одна нейросеть. Чуть позже, годах в 70х возникло уточнение, что их там две, по одной в каждом полушарии, но это как я выяснил, тоже заблуждение. На самом деле в мозгу множество нейросетей, каждая отвечает за свою обработку сигнала. Часть из них дублируется между полушариями, другая часть - не дублируется, что чаще всего можно заметить после инсульта.
Короче, более точно я бы пофиксил анона так
> пока в твоём мозгу не образуется отдельная нейросеть, отвечающая конкретно за то, что тренируешь
Спасибо всем за внимание. Просто поделился знаниями, мимокрокодя.
Не могу остановиться, потому продолжу. Вот вы понимаете, аноны, я вскрыл фундаментальную ошибку в проектировании искусственного интеллекта. Многие популяризаторы науки стращают народ тем, что якобы вот мы изобретём ИИ, а он нас уничтожит. Это ошибка, базирующаяся на вышеописанном фундаментальном недопонимании работы мозга.
Учёные думают, что в будущем иожет быть изобретён эдакий думающий разум внутри машины. Моё же видение будущего (с полным пониманием безблагодатности футурологии) в том, что интеллектуальные способности человечества будут расти, но не за счёт появления искусственных личностей, вступающих во взаимную конкуренцию с естественными личностями, а засчёт модульной расширяемости наших с вами естественных личностей. Будут совершенствоваться нейроинтерфейсы, и с их помощью мы будем подключать и отключать себе специализированные нейросети, когда нам это будет требоваться. Проще всего это описать знаменитыми словами из фильма "Матрица" - "Вау, я знаю кунг-фу!"
Например, садишься в автомобиль, там беспроводной нейроинтерфейс с нейросетью вождения. Подключившись к нему, ты начинаешь осознавать автомобиль, как часть своего тела. Можешь управлять поворотом колёс, словно поворотами шеи. А так же скоростью движения, тормозами, поворотниками, стеклоподъёмниками. Нейроавтомобилю не нужно будет лобовое окно, сенсоры и видеокамеры, через встроенную нейросеть будут выдавать тебе совместимый с твоим мозгом оптический сигнал глазного нерва так, что ты естественным образом будешь видеть и ощущать ситуацию вокруг автомобиля.
И это только самый простой пример, так сказать, потребительский. А ведь подключаемые нейросети будут юзать учёные и изобретать изобретения по КД. Вот вам и пресловутая технологическая сингулярность. И в ней отсутствует главная страшилка 20 века - самоосознающий ИИ-человеконенавистник.
То мы ему по морде чайником! И отучим собирать!
Потому что дотнет это не СУБД и доступ данным там не требуется абсолютно всем. И нехуй пихать в него всё подряд.
>Пусть лежит в пакете SDK, а кому надо вызовет.
А давай все в SDK покладем - пусть лежит и устаревает
>Почему тогда ASP.NET встроен?
потому что веб фреймворк должен предоставлять работу с бд. так принято. традиция.
>А так надо обязательное подключению к интернету.
Ну да, проблема, ведь основной SDK и винду ты до сих пор на дисках покупаешь.
https://youtu.be/1opxyMo2uMQ
Нагуглил какой-то ProvideAutoLoad
Я так понял там можно автозапускать при каком либо событии: открытие решения, открытие проекта, закрытие и проч.
Но у меня не фурычит и вообще не понимаю какая команда должна запускаться, если у меня несколько кнопок. Хуета какая-то.
Че бухтишь дед? Там за одним методом сидит десять методов, которые базируются на 50 методах каждый.
Короче, запускается с ProvideAutoLoad — выполняется все то, что в InitializeAsync, а там только инициализация, естественно.
Ну я взял и добавил туда свой метод Test (пикрил 1), который запускает таймер (пикрил 2). И вот тут начинается ХУЕТА. Сам метод выполняется, запускает таймер, но в дебаге я получаю только одну строку:
### Test ###
После этого тишина, метод Tick не срабатывает и ничего не печатает. При этом, если я эту же функцию запускаю обычно без автозапуска, то событие таймера отрабатывает нормально. Что произошло такого, что событие не отвечает? Как отследить?
ИЗМЕНИТЕ ШАПКУ НА .NET 6 И C# 10!
ДЛЯ ВИН-ФОРМ НИКТО НЕ ЮЗАЕТ МВВМ, ЮЗАЮТ МВП! ИЗМЕНИТЕ ЕБАНУЮ ШАПКУ!
ДОБАВЬТЕ ИНФУ О MAUI
Какой-то бред. В общем, только я обращаюсь через инициализацию в класс Checking, не важно к какой функции, у меня перестает работать таймер. Что это такое?
> ДЛЯ ВИН-ФОРМ НИКТО НЕ ЮЗАЕТ МВВМ, ЮЗАЮТ МВП! ИЗМЕНИТЕ ЕБАНУЮ ШАПКУ!
Так в шапке и не написано, что мввм в винформс используется
Начать решил с доки + справочника по с# с петухом на обложке. Посоветуйте, что еще почитать, посмотреть по шарпу, но не для совсем нулевых вкатутось?
Четко, спасибо
>>364162
>>364185
Методом тыка определил, что таймер начинает работать, когда я присваиваю новый экземпляр:
TestTimer = New();
Но так и не понял почему тоже самое не всегда работает на этапе объявления:
private static DispatcherTimer TestTimer = new DispatcherTimer();
Из одного метода работает, а из другого нет. Причем таймер находился в совершенно другом классе и никак не связан с вызывающими методами. Магия какая-то. Есть эксперты почему так происходит?
Сука 3 часа проебался из-за этой хуйни.
Я обосрался в голосину от твоих потуг форсить обосранный убогий хамарин переименованный в новое зумерское название.
Эта та самая жава, которая активно вытесняется котлином на мобилах лол )))
Знач вот те таска на неделю: на wpf mvvm сделать просмотр видео, можно загружать файлы в прогу, офк будут должны сохраняться в БД. Битые файлы должны будут обрабатываться соответствующим образом. Потом кинешь репозиторий на гитхабе я те кодревью устрою с пацанами
Гугл говорит, что это десктопный фреймворк, а я пока собираюсь веб делать, чтобы всю эту кухню понять и освоить.
Я пока в такой терминологии не шарю, понимаю фронт только как часть сайта или веб-приложения, с которой взаимодействует юзер. Это получается десктопный фреймворк можно заюзать в качестве такого вот фронтенда?
Не согласен. Справка по языку если его знаешь, это интеллисенс, в котором помимо автодополнения ещё и описания методов, со всеми перегрузками. Мне больше ничего и не надо.
А как сделать тоже самое, но в обратную сторону? Мне из первого нужны классы второго. Ссылку я добавить не могу, получается зацикленность. Более того, в одном из проектов статический класс, я его даже передать по ссылке не могу.
Ах да, в общем задача такова, что функция из проекта А запускает функцию из проекта Б, которая по итогу своей работы запускает функцию из проекта А.
В функцию проекта б передавай делегат
>А как сделать тоже самое, но в обратную сторону? Мне из первого нужны классы второго. Ссылку я добавить не могу, получается зацикленность. Более того, в одном из проектов статический класс, я его даже передать по ссылке не могу.
Пересмотреть архитектору проекта
Так нельзя, тебе даже студия запретит так сделать. Вынеси логику общую в отдельный проект. Почитай про DDD
Я понимаю термин, но не понимаю суть. Есть вот например просто React для веба, а для десктопа уже юзают React Native. Или там у жс есть фреймворк Electron для десктопа, но его же в веб не пихают? Или я просто не встречался? Олсо, чет этот Eto.Forms выглядит всратенько, я хочу стильно модно молодежно, чтобы рекрутеры не подумали, что я дед.
Совершенно точно не мое. Но разве меня это остановит?
Прости за петросянство, тут скорее юмор не мое.
и то и другое не твоё
Тащемта и на десктопе тож есть фронт и бэк. Вообще, бэкенд это вся бизнес-логика. Она может быть одна под несколько платформ: веб, десктоп, мобилы. Фронт же делится на html в вебе и на xaml в десктопе. Вообще вся бизнес логика должна быть максимально отделена от фронтенда для того, чтобы можно было менять всякие формочки или странички без проблем. Таким образом мы получаем 1 бизнес логику и несколько представлений. Фронт и бэк это не только про сайты. Если посмотришь на хх или где-нибудь еще - ищут верстальщиков на xaml для WPF.
{
... ,
"jopt": { "foo": "bar" ... },
...
}
Получилось как на пике, но меня не покидает ощущение, что это можно сделать проще. Помогите.
Кстати, видел в зет-скрипте (не относится к шарпу) есть возможность добавить уникальную логику для первого и последнего элемента цикла.
>сделать проще
лямбды?
Я имел ввиду упростить синтаксис, чтоб не дрочить проперти, а разом объект записать. Думал есть что-то типа writer.WriteObject(string name, object o). Но в итоге как на пике тоже норм получилось.
Правда форматирование отступов едет к хуям. Так что все еще жду ваших советов.
А эти методы самописные или дефолтные?
Если самописные, то юзай конструктор.
Если дефолтные, то сделай наследник класса (если разрешено) и добавь свой метод WriteObject.
Если недоступен, то можно еще расширение сделать.
Но тут вопрос в том, как часто ты это все будешь юзать. Если ты это используешь пару раз, то нет смысла (это я про варианты решения дефолтного случая)
Ты чё охуел? EF тебе по факту и предоставляет функционал уровня "ну я там модель описал ёпта строку подключения скормил и ебать всё работает пока я машку ипу".
Акиньшин что-то у себя в докладе про бенчмарки говорил про подобную хуйню с плавающими результатами.
Там надо миграции делать командой в консоли, а не кнопочкой в вижле!
>Просто для меня удивительно, что в его апи нет метода для записи объекта разом.
Извечный конфликт настраеваемости и простоты. Видимо есть какие-то подводные камни, которые ты еще не осознал.
Я тоже по началу не понимал нахера для того чтобы нарисовать кривую безье на холсте, мне нужно писать простыню из десятка вложений в Path.
Тебе сначала нужно скомпоновать BezierSegment, потом добавить это в PathFigure, потом это добавить в PathGeometry, и только потом добавить в Path, а потом все это добавить на Canvas. Задаешься вопросом: а почему это не сделать одним вложением и тупо задать точки кривой, ну на крайняк сегменты? Начинаешь городить, велосипед и постепенно понимаешь, что если ты хочешь некой универсальности для всех случаев, которые перед тобой возникнут, тебе придется дробить все это на части. И на фоне настраиваемости, какой-то метод, выполняющий все настройки, становится выглядеть куском засохшего кала на волосне, который нужен одному проценту пользователей. Да, всем нужна простая функция, но у каждого свой набор конфигураций, а упрощенная функция внезапно этого не обеспечит.
Так вот, рано или поздно ты осознаешь, что лучше наложить бремя возни с настройками на пользователя, но зато обеспечить больше гибкости. Пользователь сам напишет нужную функцию.
Алсо, я не дебил, и взял и написал билдер, который делает все это за раз:
>Тебе сначала нужно скомпоновать BezierSegment, потом добавить это в PathFigure, потом это добавить в PathGeometry, и только потом добавить в Path, а потом все это добавить на Canvas.
Думаешь я это применял в проекте? Да хрен там. Максимум для быстрых тестов.
Метанит же для многих языков, я там бейсик учил, а потом написал зонд на линкус.
Шутка. Там в новостях зонд для линукса написали на бейсике. Но бейсик я действительно учил в метаните.
>Почему метанит написан на РНР, а не на сишарпе?
Потому что в 2012 году C# был плохим языком для написания веб приложений.
По итогу все оказалось проще, хоть и не совсем логично
writer.WritePropertyName("jopt");
JsonSerializer.Serialize(writer, obj, options);
>Ну так тебе не только текст в файлы писать. А для BinaryReader/Writer нужен стрим в которые они будут писать, и для файлов это как раз FileStream.
Все равно не понимаю, какую задачу можно было бы решить только с FileStream, а не любым другим стримом.
Почему ты просто не сделаешь в проекте Б - событие, на которое подпишешься в том же проекте A?
А вообще, по хорошему, ты какую-то странную архитектуру придумал. Разбивать на проекты нужно как раз для того чтобы у тебя логику можно было переиспользовать и изолировать слои друг от друга.
Так вот, как ты себе представляешь ситуацию, когда третий проект будет хотеть и B - дергнуть функцию, а это вызовет дерганье хуйни из A? Сам-то подумай, как это потом отлаживать.
Если не хочешь события- просто хуйни все в один проект и не выебывайся.
FileStream как следует из названия нужен, чтобы работать в файлом. Х.з. что тут не понятного. При создании StreamReader/Writer с указанием пути он просто автоматически создает внутри FileStream. И про какие любые другие потоки ты говоришь? Есть MemoryStream, он пишет в память и не трогает файлы. Binary... пришет в любой стрим и не привязан к файловому. StreamWriter тоже может работать с любым стримом.
ты можешь сколько угодно наворачивать абстрактных стримов, но в итоге тебе все равно придется написать код, который будет открывать файловый дескриптор, работать с ним, правильно закрывать. И все это будет с контрактом стрима - вот это и есть FileStream
Так что с любым другим стримом ты не можешь писать в файл, ведь они тупо не знают ничего про файл, про системные вызовы и так далее.
было бы что рендерить. основное делает видяха.
Не то чтобы в тему. Но пиздец как же меня эта лесенка из скобок заебала в шарпах.
Вот уродливо же.
И как охуенно в сях...
Что мешает писать как и в сях? Кроме здравого смысла - ничего. Но здравый смысл лучше послушать
Там парсинг всего проекта в риалтайме, с логикой. Ты условно переменную удалил, а студия начинает шарить и смотреть как это повлияло на проект. Твои игори до сих пор не могут в то, чтобы можно было пнуть рандома на одном конце карты и чтобы это повлияло на события на другом конце. Можно ли в ведьмаке срубить дерево, из-за которого краснолюд не получит работу, сопьется и не построит мост в Новиграде? Ммм?
Кстати, студия какая-то непостоянная. Когда переходил на c#, то она предлагала такой вариант создания нового экземпляра:
Huemoe H = new();
А потом в какой-то момент такая "Нихуяшеньки, давай вот так:"
Huemoe H = new Huemoe();
(хотя может это потому что я подключил inelsence)
То настаивает на упрощенном варианте каких-то вещей, но при этом не любит вот это:
var H = new Huemoe();
Хотя присваеваемый тип очевиден и неопределенности быть не может.
Хз, само добавляет же почти всегда. Может какие-то классы из некоторых нюгетов не понимает, но в целом всякие ефы, юзинги локальных классов - все добавляет по альт ентеру
>"интеллектуальная" система не понимает, что я хочу.
1. Понимает и может сама добавить (см. контекстное меню подсказок). Просто есть как минимум два логичных варианта решения задачи: добавить юзинг или дописать к типу полное имя. И тут студия уже не понимает какие у тебя планы.
2. Добавление юзинга на автомате может привести к конфликту имен нескольких библиотек, и вот такое тихое добавление может попить тебе крови. Только вот вчера с этим столкнулся — добавил юзинг и мне перекосоебило весь проект, пришлось даже перезагружать (удалил юзинг, собрал проект, а студия все равно видит конфликт).
Так что самый подходящий вариант — первый, полуавтоматический. Напиши функцию из отсутствующей либы, и если она стандартная, то ПКМ из подсказки выбери один из вариантов: добавить using, или дописать полное имя.
Во первых ты можешь настроить конфиг проекта и студия сама будет тебе их расставлять как надо.
Во вторых стиль К&R, который тебе нравится - уебанский. Он может быть экономит тебе целую строку текста (байтики сейчас дорогие да), но зато ебет мозг при изучении и рефакторинге хоть сколько нибудь комплесного кода. Не будь утырком используй стиль Олмана.
>>366782
>Кстати, студия какая-то непостоянная. Когда переходил на c#, то она предлагала такой вариант создания нового экземпляра:
Это тоже все настраивается в конфиге проекта.
await Task(() => File.SetCreationTime(targetFile, curTime));
То это ведь не гарантирует, что таск завершится только когда функция завершит свою работу? В этом случае он бесполезен?
А что подразумевается под a.OnCompletion(){ };
Чем это отличается от того, что функция дошла до конца? Ну стартанул я в таске копирование файла, которое длится пять минут, в это время таск мгновенно комплит не дожидаясь фактического завершения копирования.
Т.е. по сути это ничем не отличается от вызова обычной функции?
Я что-то в конец запутался в основах. Почему когда я копирую файл, программа не дожидается завершения функции и начинает выполнять следующие? Разве не должно быть последовательное выполнение операций? Где та грань, когда я должен вызывать await и просто пользоваться a = 5 + 3; без ожидания?
Почему не сделали наоборот, чтобы можно было указать, что "вот эта функция должна работать синхронно — не жди, иди дальше"?
Тогда почему фризится GUI при циклах? Совсем каша.
В этом и суть, что когда доходишь до перевого awaita управление возвращается в основной поток, а этот с задачей продолжается фоном
Но await не даст идти дальше, пока не завершится таск.
Это блокировка того, что должно идти своим ходом.
Ничего не понимат.
если там Task.Run то гарантирует. в этом случае он полезен если что то должно выполняться в фоновом потоке и нужно дождаться результата. Нормально для вызовов из GUI
Потому что ты путаешь Task и Thread.
Task - это параллельное программирование, не многопоточное.
Попробуй перепиши программу например так
Task T = (асинхронная задача)
остальной код.
await T;
спасибо, понял
Битва ради чего? Ради фигурных скобочек вместо круглых? Что мешает писать вот так:
public class Test
{
public Test(int Huy, int Pizda, int Djigurda){}
}
public void Main()
{
var t = new Test(
Huy: 1,
Pizda: 2,
Djigurda: 3);
}
Борьба с "телескопическими" аргументами работает при помощи создания других классов.
Типа как в RectangleGeometry, который не принимает x, y, with, height, а принимает Rect, который как раз и принимает x, y, with, height.
Если у тебя десятки обязательных аргументов, то это повод задуматься. В чем смысл этого дерьма?
да, но чтобы аргумент был необязательным.
Как я понимаю, все ради того, чтоб не писать конструктор просто лишний раз когда особо и не надо, вот этот весь
ctor(string a, int b){
A=a;
B=b;
}
Понятно что во всяких di нет смысла в этом, а в среднем по больнице - вполне идея.
Не уверен пока только как погроммист будет понимать, что там реквайред, а не конструктор
>Не уверен пока только как погроммист будет понимать, что там реквайред, а не конструктор
Самый кек будет с перегрузками. Как их реализовать рекваердами, я хрен знаю.
А внешне, думаю, будет выглядеть абсолютно так же, как если бы там писался кастомный конструктор. Он ведь и так сейчас автоматически создается, даже если пользователь не писал. Что поменялось? Будет так же невидимая рука рынка шарпа делать всю работу за программиста.
А если прогнать через IL и посмотреть что выходит?
Летит программист в высокоуровневом крылатом сишарпе, все выше, и выше, и выше.
Так и не нашел старую озвучку — одно говно новое, поэтому будет только скрин.
> а я должен разгребать
да. это недостаток достоинства модели подключения модулей асп.нет кор. Удобство - подкинул нюгет пакет и services.AddFooBar и радость. Но если чужой отрывок кода и просто тупо не знаешь что нужно подключать. Даже знание неймспейса не поможет ибо к какой либе оно относится. И решарперовский поиск по нюгету оп неймспейсу не особо помогает.
И это мешает читать чужой код не в иде ибо хз из какого неймспейса класс.
кейс
обычный класс анемик модели с кучей get/set. как любят разные орм.
И вот мы создаем такой объект и думаем "а как бы тут защититься от человеков" - и лепим конструктор. Но вот беда - поля то все равно открыты... и закрываем их. И тут уже ломается наш орм который не умеет через конструктор все делать. Ну делаем для орм пустой конструктор - и снова опасность от человеков который макакооспой заражаются.
делаем конструктор интернал - и ничего не работает.
туда же и сериализаторы разные. Я аж удивляюсь что нельзя сделать интернал/привате конструктор.
Вот для таких случаев очень не хватает required,
А какой у тебя уровень? Если низкий то тебе рано скита читать. Если нет понимания архитектур, паттернов и прочего, а только знания синтаксиса и возможностей C# - то нет смысла читать скита
Это ни о чем не говорит. Зайди на sharplab.io и сделай асинхронный метод какой-нибудь и посмотри во что он компилируется компилятором. Или сделай метод с yield return. Если поймешь хотя бы больше половины - читай Скита
.core 5.0 апи метод контроллера должен вернуть сгенерированный файл txt в кодировке windows-1251, попробовал несколько вариантов из гугла, файл всегда в кодировке utf-8
платформа выглядит крайне перспективной на айти рынке
майки наконец смогли показать, что они могут в кроссплатформенность
шутник )))
не буду спорить. я не настолько умен, чтобы плодить кодировки. предпочитаю использовать везде юникод.
ну если не работает
https://docs.microsoft.com/ru-ru/dotnet/api/microsoft.aspnetcore.http.results.text?view=aspnetcore-6.0
(внимание также на комментарии по ссылке)
то я напомню, что http протокол, как и любой другой, шлет байты.
>Сначала изучи тему сетей и протоколов, osi, весь стек tcp/i
Чек. У меня даже сертификат Cisco CCNA есть
>попрактикуйся с реализацией этих алгоритмов на чистом Си
Зачем мне тогда асп, если я напишу сам всё?
Как там выводить сообщения в Immediate Window?
Сообщество будет поддерживать.
Да, другой.
И тема машинного обучения в плавне "интересности" сильно переоценена. Если у тебя мозг явно не заточен под это (и я не про любовь в математике и решение задач, а скорее колупание в статистике), то будет смертельно скучно.
мегабайты = байты /1000000
мегабайты = байты / 1024/ 1024
И что показываешь виндовс в проводнике? Мебибайты или мегабайты? Почему нас в школе учили, что в мегабайт равен 1024 байту?
Так процесс всегда скучен. Интересен результат.
Самое простое для запоминания.
Байт - единица хранения данных.
Бит - единица скорости передачи данных
>что в мегабайт равен 1024 байту?
готовили из вас кассиров для пятерочки. в мегабайте 1024 килобайта, а не байта
а меби юзают только маркетолухи для разводняка народа и все. Программисты этим не страдают. Правда есть оговорка, что маркетолухи решают, вот как ДЕБИЛЫ с кнопкой пуск, да и вообще всей 10+ виндой, но все же....
Кто проводник писал - программисты или маркетолухи?
>И что показываешь виндовс в проводнике? Мебибайты или мегабайты? Почему нас в школе учили, что в мегабайт равен 1024 байту?
Учили тебя правильно. Но есть такие ублюдки как маркетологи. Которые решили, что мы будем писать на жестком диске 100Мб и все будут думать, что там 102400 байт, а на самом деле там будет 10000, а разницу в карман. Та же самая фигня и с гигабайтами и с террабайтами.
Ну так вот, Билли не прогнулся под мудаков и винда показывает честные x1024 все единицы. А вот у пингвинояблочников соснули и жрут маркетологический высер.
> Как сконвертировать байты в мегабайты?
Так
> мегабайты = байты /1000000
> И показываешь виндовс в проводнике?
Мебибайты
> Почему нас в школе учили, что в мегабайт равен 1024 байту?
Потому что так написано в Постановлении Правительства РФ
Естественно, там не 1024 байта в мегабайте, а 1024 килобайта
Вот это нежданчик, не знал.
кто эти все? меньше слушай байки.
вс код, насколько я встречал, в основном служил для редактирования. Если тебе нравится урезанный функционал, то вперед, если тебе нравится добирать плагинами то, что из коробки у студии, то вперед.
Единственное, как это дерьмо влияет на жизнь — это лезет в выдачу поисковика при запросе студии.
Хочу сделать кастомную иконку курсора, но там динамическое изменение формы, поэтому просто кастомный курсор не подойдет. Решил прятать курсор и выводить свою иконку в виде пикчи, но она начинает блокировать тач-слой моего окна.
Щас заметил, что в фотошопе, где кастомный курсор со сложным поведением, иконка немного смещена или сделана так, чтобы хитпоинт был пустым. В другой просто насрали на функционал и там просто нет источника проблемы.
Еще была идея сделать битый пиксель в иконке.
в профессоре совсем нет ничего про async await.
и правильно сделает, что не даст идти дальше. Поскольку метод Main завершится быстрее, чем скопируется твой файл во вторичной таксе.
>nullable eference types - спорная штука
Норм тема статический анализатор теперь ебет за нулл и сложнее его проебать.
> дефолтная реализация в интерфейсах - многие до сих пор не понимают нахуя
Кал говна
Не делай так никогда. Partial тоже не используй, разве что если хочешь генерируюмую часть от самописной отделить.
Солид не для вкатунов. Просто забудь пока для него. Пока не поешь говнокода на проектах, не поймешь зачем он нужен. Говнокод можно кстати написать, если слишком упарываться по солиду, потому что в этом деле нужно искать баланс.
Есть кнопка, создающая на windows форме массив кнопок. Нужно модифицировать этот код так, чтобы программа создавала эти кнопки в виде цветков. Пытался найти в гугле и что-то нифига дельного не нашел. Код можно глянуть тут https://0bin.net/paste/SxhzkgTX#9gwqRes9DFl4kdmFRL53+BLC-R6x36mzGCxLzG/6FtY
pluralsight.
В превью версии можешь, в 11 шарпе добавили дженерик математику. Олсо в джаве фейковые дженерики со стиранием типов в рантайме.
Двачую базированного шарписта. Хотя не во всем с ним согласен.
ну что-то в виде вот этого
Растровых? Тогда кидай .png на бэкграунд c прозрачным фоном, у кнопки выстави флат-стиль и выстави в ноль обводку.
Если нужно поменять контур кнопки, то надо переходить на wpf. Я именно из-за этого туда и перешел — там можно векторный контур использовать в качестве формы кнопки.
Охренеть. Какая же клевая штука, я уже нацелился городить города. Вообще-то я уже непоправимо нагородил кое чего.
А нужно было всего лишь нормально погуглить..
А что там с ковариантностью и контравариантностью?
Вот я создал
var R = new MyRectangle();
а потом снова
R = new MyRectangle();
Как узнать, что первый удален со всеми данными? Писали, что сборщик мусора сделает все сам, но у меня например был случай, когда там оставалась подписка на событие и экземпляр продолжал спамить в консоль, хоть переменной я уже присвоил новый экземпляр. Как быть уверенным?
Вызвать GC.Collect, GC.WaitForPendingFinalizers и проверить что объект - null
А что ты хотел в управляемой среде-то?
А такие проблемы как у тебя - решаются профилировщиком и следованием гайдлайнам.
Ну, собственно - когда я пробую дудосить этот вот сервер - примерно прикриплейд наблюдается. Т.е. горбатый коллектор - постоянно что-то там удалить хочет.
Я и пулы памяти вроде использую, и переиспользую AsyncEventArgs, но вот такая вот хрень.
Как мне узнать причину и какие есть способы снизить число дерганья GC?
Если на объект нет ссылок GC смывает его в парашу.
Аноны, у меня типичная алгоритмическая задачка, где легко скатится в факториал форов.
В общем суть такая, у меня есть список объектов у которых внутри могут быть списки с такими же списками, глубина условно не ограничена. Так вот мне надо имея айди обьекта удалять его из любого уровня в котором он бы не находился, я пока придумал только фор форов н-форов, что делать Анон?
Подписывать объекты при их создании на ивент удалить(айди). Если айди == мой, то удалить себя.
Ну или рекурсией ещё. В рекурсивной функции будет только один фор, который перебирает список чайлдов и для каждого чайлда вызывает эту же рекурсивную функцию. Таким образом, ты вызываешь один раз удалить(айди) для корневого элемента, он сначала смотрит, не равен ли айди его собственному, если равен, то сам сразу и удаляется. Иначе вызывает удалить(айди) для каждого чайлда, который так же вызывает для каждого своего чайлда, который также... ну ты понел.
А вот тут поподробнее, как это сделать, первый раз о таком слышу.
есть, где пример как это работает?
> есть, где пример как это работает?
Есть. В МСДН. Я уже на обед убегаю. Давай сам. Учись добывать инфу.
Лаконичнее в плане кода. Но затратнее в плане памяти. Вообще задача говно, а не со звездочкой, и все только потому, что кто-то дико проебался с проектированием классов.
> что значит "удалить себя"
Удалить ся из списка и отдать ся во власть ГЦ. Или если объект диспозабл - диспознуться.
Анон хочет удалить:
> Аноны, у меня типичная алгоритмическая задачка, где легко скатится в факториал форов.
> В общем суть такая, у меня есть список объектов у которых внутри могут быть списки с такими же списками, глубина условно не ограничена. Так вот мне надо имея айди обьекта удалять его из любого уровня в котором он бы не находился
>>370508
Ему посоветовали, как удалить. То что не понял ты - конечно печально для тебя.
Извини бро, но диспозабл элемента коллекции в коллекции которая не должна диспоузнутся это звучит как толстый троллинг... ну или я не понял
> ну или я не понял
Или я невнятно выразился. Я имел ввиду:
1. Удалиться из коллекции.
2. И только потом, в зависимости от типа объекта:
2.1. Ничего не делать, ГЦ сам всё сделает.
2.2. Самостоятельно диспознуться, если объект диспозабл.
Но у меня же в евент хандлере не будет доступа к родительской коллекции.
Просто Сериализируй твою коллекцию и удали все что тебе надо из нее одним заходом с помощью обычного регакса, а потом десериализируй обратно, ИЗИ ЖЕ НУ!
Да, я подозревал что магии не получиться,
прям закон сохранение вычислительной способности получается.
Что-то ты переоценивашь студентов. Даже в рамках курсовой 95% не сможет.
самый правильный подход.
Что есть "обход графа" как не фор форов, до которого додумался вопрошающий изначально?
все познается в сравнении. тебе не с чем сравнить, поэтому для тебя норм.
я же пишу еще на котлин и питоняше и у меня на шарпе глаз дергается. в котлин упор на минимизации синтаксического шума (хотя не без WTF иногда), в шарпе же "делаем свою жаву".
такого добра много, но все вспоминать..., да и где грань между "синтаксически уродливо" и "нет такого функционала вообще"
- точки с запятой.
- if не возвращает значение (хотя бы switch завезли но то такое).
- нет блоков let, also, with и т.д. if(param is {} v) выглядит уродливо. Своя реализация Let тоже. Ну Also еще можно слепить как extension
- определение ламбд где необходимо всегда упомянуть параметры (нет неявного it) и проставить =>
- уродливая сигнатура функций вида Func<int, string, string> - бррр
- нет Unit в шарпе. Я уже ранее писал, что это адски мешает если ты либописатель и либописатели обычно просто плюют на все и вводят свой Unit (пример реактив и тот же Medaitr)
- неймспейсы. тут товарищ выше писал что хер поймешь откуда класс. но это 2 стороны одной медали - в котлине нужно указать весь импорт и это может быть емко. Но тут я за котлин ибо можно *
- в котлин можно функции без классов, а также можно делать extensions для статически классов. в шарпе приходится лепить ClassEx
- val (а не только var) полезен. А еще так обозначаются свойства. В
- в шарпе все лепят IList, который к тому же не кастануть к IReadOnlyList (поэтому и лепят IList)
- как же достало что нельзя использовать везде Array.EmptyList<T> ибо "неизвестно во время компиляции".
- аналогично с string.Empty
но разговор то о выразительности кода (лаконичность, минимальность "а как это выразить"), а не о рантайме
чем крут тот же питон - больше ориентирован на задаче и самый минимум на том "а как это выразить". Несмотря на относительное равенство возможностей на питоне тяпляпаешь намного быстрее
на шарпе же вечно "да сколько можно писать этот new" ) или какой то анализатор жалуется на Task.Run "рекомендуется использовать перегрузку принмающий скедулер" и просто мозг сломаешь подобрать эту перегрузку из подсказок (а если зайти в доку то там от <<<<>>>> глаза потекут)
шарп сильно слаще жавы, но все же в основе своей "делаем свою жаву"
лол.ты сам сказал что пересел с крестов. Был бы в твоем багаже более выразительный язык чем кресты - ты бы скромнее в оценке шарпа.
Получается лучше изучать джаву, а потом переходить на котлин, а не маяться с сишарпом?
нет конечно
жава вообще страх и ужас.
И я так то не защищаю котлин, а критикую шарп
но нахожусь то я все равно в треде про шарп.
котлин более выразителен - факт
но жава рантайм все портит.
Ок, сажусь писать свой сайт на ASP.NET. И что я могу без теории написать? Ничего! Только потыкать стандартную заготовку и закрыть редактор.
> ты сам сказал
Ты что-то путаешь, я крестов ваще не знаю. И "пересаживаться" мне не надо. Я просто беру нужный язык и пишу на нём, держа под рукой документацию. Ифы и форы там везде одинаковые.
Речь не про продакшен-левел веб-сервисы, дурилка, а про простые программки уровня калькулятора.
> котлин более выразителен - факт
Какой факт? Чем именно эта параша более выразительна? Это же не язык, а дрисня!
Ещё проблема, что по ASP.NET MVC 6 нет книг. Я находил только старые книги по ASP.NET MVC 2 на русском и 3.1 на английском. Но они уже не актуальные и код из них не работает.
Я где-то с апреля пытаюсь разобраться, но всё разбивается о эту несовместимость.
Попробуй МСДН вместо книг. Будь современным!
>Ты что-то путаешь, я крестов ваще не знаю
бывает. тут все аноны, а мне откуда знать кто тут кто. Первоначалный пост был про "пересел с крестов".
>>370962
>Чем именно эта параша более выразительна?
много чем. достаточно сделать порт с одного на другое увидеть разницу. Там сразу минимизирован синтаксический мусор вида new, ;, единственный параметр в лямбде (вместо него неявный it), if возвращает результат, изначально нормальный switch, вменяемые enum, у которых значение может быть не только число, наличие Unit из коробки, val, изначальное разделение коллекций на мутабельный и нет, возврат из лямбд и так далее
А всякие там делегация свойств, расширение скоупов, расширение статиков позволяют делать шикарные DSL.
Я люто ненавижу жаву и ее рантайм, но выразительность котлина отрицать не могу - получается короче и менее замусорено чем в шарпах.
>по ASP.NET MVC 6 нет книг
За каким хуем вы все в эту 6-ку с нуля лезете-то?
3.1 вполне себе актуальна, на данный момент и инфы по ней достаточно. Изучаешь, практикуешься. Потом перескочить на 6 будет дело недели-двух времени.
> За каким хуем вы все в эту 6-ку с нуля лезете-то?
В этом треде сидят сороки-белобоки, любящие всё новое, блестящее.
Ничего. Её сразу предложили в треде, некоторые покочевряжились, но в конце все сошлись в том, что рекурсия топ. А ты её нарисовал блок схемой, даже не зная, что это она и есть.
>почти год уже дотнету 6, который при этом LTS
Ебаклак еле 7 месяцев с релиза прошло, какой год.
Ты попробуй сначала проекты нормальные найди на 6-м дотнете-то, чтобы имело смысл за него браться игнорируя все предыдущее.
А там разница кроме стартап.кс есть? Я вот сделал свой минидвач на мвц на .нет6 по книжке для 3.1. Литералли разницы никакой
Зачем искать проекты на 6 дотнете, если на него прекрасно переносятся проекты с 5 + новые фичи и повышение производительности. Сколько проектов не перенес, только одно ломающее изменение в Npgsql было.
Алгоритм можно реализовать как рекурсивно, так и итеративно.
>больше ориентирован на задаче и самый минимум на том "а как это выразить"
Смотрел недавно какое-то видео по питону и мне чуть не поплохело. Типа
a = 5
b = 5
a is b //true
a = 1200
b = 1200
a is b //false
Это такая же мотня как с жаваскриптом, когда пытаются облегчить жизнь юзеру, но в итоге ломают логику поведения, генерируя исключения из правил. Лично мне такой подход, как в примере выше кажется сложнее и запутаннее, чем в c# — он не последователен.
Как в бэ скинули родмап по джаваскрипту, а там какие-то поднятия, какие-то let помимо var. Но если все это посмотреть, то дерьмо создано только для того, чтобы уйти от логики большинства языков, и что характерно создает проблему, которую либо вот так оставляют, называя ее ПОДНЯТИЕМ, к примеру, либо фиксят изобретением велосипеда, типа var на смену let (нахера ее изначально придумывали, дундуки?)
Ну да МЫ ЖЕ ДОЛЖНЫ СОСРИДОТАЧИВАТЬСЯ НА ЗОДАЧЕ, а в итоге голова засрана какой-то хуйней из исключений из правил. Ебал я в рот петухон и жаваскрипт.
потому что ты ожидаешь что питоновский is то же самое что шарповский, а это не так.
(кстати это типичная проблема "со своим уставом...". Я изучил туеву хучу языков, но с котлин у меня была проблема, пока я не перестал искать аналогии с шарпом и тогда произошел взрывной рост обучения)
в питоне все норм с типами, это не пхп, где все приводится в число и не жаваскрипт, где вообще хз что происходит.
> а там какие-то поднятия, какие-то let помимо var.
я хз че такое let, но если иммутабельная переменная, то штука полезная. Вообще всякие val, разделение на мутабельные коллекции и остальные происходит у тех, кто давно кодит и приходит к строгости, к контрактному программированию, когда не надеешься на авось, а хочется средств от языка, что не дают выстрелить человеческому фактору (помимо конечно тех оптимизаций что дает этот let/val типа захвата переменных)
В шарпе как то не приживается это все. Вот кто использует контрактное программирование от мелких, кроме них самих в фреймворке? Даже в визуал студии слепили свое vs-validation. Кто использует IReadOnlyList вместо "везде IList"? Все на авось, все по нашему.
>в итоге голова засрана какой-то хуйней из исключений из правил
поверь это не так. Питон прост как сатиновые трусы, то есть основан на простых принципах и о них не думаешь. Я много пишу на обоих языках и на питоне в разы быстрее именно из-за нулевой загруженности "а как тут выразить". И, самое главное, есть подсказки типов, из-за чего intellisence работает.
пишешь ручную кооперативную многозадачность? зачем?
Обычно они решаются (если нет async/await) через yield (генераторы в питоне, файберы в руби, а в шарпе ...ну посмотри на корутины в Unity). в общем гугли c# корутины
>я хз че такое let, но если иммутабельная переменная, то штука полезная.
var — это переменная, работающая в пределах блока, где она была объявлена. Но у джаваскриптеров ее раньше не было, была let, а ей поебать где она была объявлена т.е. если ты ее вызываешь раньше, чем она была объявлена (даже если внутри функции), то она перемещается вверх (то самое поднятие) и объявляется до ее непосредственного применения. Ну т.е. джаваскрипт поступил с юзером как мама с сынкой-корзинкой — начинает потакать желаниям корзины, несмотря на то, что это ведет к неминуемым разрушениям.
>пока я не перестал искать аналогии с шарпом
Я способен что-то отпустить, если оно покажется мне более простым или функциональным. Например проперти бейсика мне нравятся куда больше шарповских. Я считаю мазохизмом точку с запятой в конце каждой строки. Но в шарпе короче реализовать наследование или подписку на события. А в зетскрипте в цикле можно указать отдельное действие для конечного или начального итема.
>потому что ты ожидаешь что питоновский is то же самое что шарповский
А шарповский он логичен, у меня не вызвало никаких вопросов. А у питона это типа "ну ты должен с этим смириться, ты должен держать в голове еще один подводный камень".
>В другом классе я хочу вызывать эти методы, но не сразу, а сначала часть метода из первого класса, потом часть из второго
Разбивать метод на части, я щитаю. Тебе судьба сама подсказывает, что твой метод слишком жирный.
Лучше сделай еще один метод, который будет запускать два-три коротких. Тогда у тебя появится возможность либо разом запускать всю цепочку целиком, либо и по отдельности каждое из звеньев. Я пришел к такому подходу. И читаться будет проще.
>Я способен что-то отпустить, если оно покажется мне более простым или функциональным
для этого нужно сначала выключить синдром утенка, что не так то просто. Обычное дело - писать на другом языке как в любимом. При изучении это нормально (по аналогиям быстрее учишься), но дальше только вредит. Не все видно сразу. Я вот хейтил котлиновские companion object считая их уродливой заменой шарповским статикам, но потом понял их силу и теперь хейтю от шарповских статиков, которые меня ограничивают
>или подписку на события
а потом приходит время и заменяешь ущербный сахар подписок на свою реализацию и толку от этих event... только мешают
>А шарповский он логичен, у меня не вызвало никаких вопросов
это работает в обе стороны. если бы ты был питонист, то при изучении шарпа бы точно так же жаловался. И is в питоне означает "тот же самый объект", что не менее логично чем "var is string"
>для этого нужно сначала выключить синдром утенка, что не так то просто.
Я тебе на примерах расписал, что могу.
>И is в питоне означает "тот же самый объект"
Я был бы согласен, если бы это работало всегда. Теперь поясни, почему это те же самые объекты
a = 5
b = 5
a is b //true
хотя это разные переменные с разными ID. И почему тут внезапно они стали действительно разными, как и должно быть:
a = 1200
b = 1200
a is b //false
А потом ты узнаешь, что там внутри питона вот есть особая логика, которая борется за все оптимизированное против всего неоптимизированного, которая вот думала-думала так, а потом хуякс и передумала. Нет последовательности. Либо ты сравниваешь ссылки, либо ты сравниваешь значения. В питоне какая-то хуйня. Я должен потом с этим ебаться и как-то разруливать. Зачем? Я не вижу в этом объяснения удобства.
>var is string
Си шарп как раз сравнивает ссылки. А ты приводишь пример сравнения по типу.
>Теперь поясни, почему это те же самые объекты
потому что в питоне все объект, то есть вообще все. все построено вокруг этого. И само собой это не дается даром, поэтому питон кеширует числа от 0 до не помню сколько ради экономии памяти (аналог шарповского string.Intern) - и на этом все.
Не мешает ибо вряд ли кто захочет сравнивать тождественность ссылки для числа вместо простого сравнения через ==. is это аналог ReferenceEquals. И даже если бы в шарпе числа были ссылочными, часто бы ты использовал ReferenceEquals? Да и вообще часто используешь ReferenceEquals?
>Си шарп как раз сравнивает ссылки.
Не знаю о чем ты. is в шарпе это изначально оператор проверки типа (https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/type-testing-and-cast#is-operator)
c#: obj is MyType
python: isinstance(obj, MyType)
не забывай. питон старше шарпа на 10 лет и даже старше жавы. Он появился еще до всех этих концепций современного программирования и в нем заложены простые принципы, которые удачные и поэтому в 22 году этот язык такой популярный
для валидации согласованности данных используются валидаторы. А считывать через Try или исключения - тут холивар
Двачую этого. Какой-то патриот реши тральнуть кириллицей. Игнорируем петуха.
шта шта? да одного дотнетконф и дотнетру на трубе смотреть не пересмотреть
Её можно купить в PDF формате. Ну неужели блять никто не слил её в интернет?
Вообще не понимаю как этот ASP.Net осилить уже
- Вызываю services.ConfigureApplicationCookie, он принимает Action<ConfigureApplicationCookie> в качестве конфигуратора
- Я ему скармливаю лямбду options => options..., где options это очевидно ConfigureApplicationCookie
- Затем настраивая этот ConfigureApplicationCookie я вызываю options.EventsType, который внезапно принадлежит не ConfigureApplicationCookie, а AuthenticationSchemeOptions и эти типы никак между собой не связаны. Как такое может быть?
Это было на professorweb.
Двачую. Вкатуны какой-то кал лезут добывать в бумажной оболочке, то вообще всякие Герберты Щиты с С# эры палеолита. Когда бля все тоже самое написано на Метаните и за бесплатно. ВСЕ сука тоже самое, главное под актуальную версию и местами даже лучше.
> - Я ему скармливаю лямбду options => options..., где options это очевидно ConfigureApplicationCookie
>и эти типы никак между собой не связаны
> public class CookieAuthenticationOptions : Microsoft.AspNetCore.Authentication.AuthenticationSchemeOptions
Троллишь чи шо?
Я не знаю троллишь ты чи нет. Но вот лично мой опыт: я посмотрел метанит, увидел кучу годных коротких кукбуков. Если этого там нет что мне надо - посмотрел на SO. Если и там нет - пошел уже на MSDN. Из книг по шарпу читал только CLR via C# и то в вузе, просто потому что препод-ебанат заставлял ее прочитать и принимал по ней зачеты, понял на тот момент из нее я ровно нихуя.
>Троллишь чи шо?
Блять. Реально мозг вытек. Я смотрел по F12 и не увидел наследования, а теперь смотрю есть. Короче всем удачи, я поехал в дурку.
Дак проблема, что это сайт, который в любой момент может закрыться. А книгу можно скачать на читалку и спокойно почитывать, не портя глаза.
Тоже ломается. А иногда чинится лол, оче ебано работает кароч
>это сайт, который в любой момент может закрыться
Если не будешь закрывать вкладку - не закроется.
Да, у всех. У меня на трёх ПК так, не ебу с чем связано. Думаю майкам просто впадлу делать нормально форматирование страниц и они забили хуй.
Мне в джава-треде сказали, что шаблонизаторы не нужны и теперь все делают REST API приложениям. Это в ответ на то, что Razor лучше Thymeleaf.
Спасибо.
int characterCount = s?.Length ?? 0;
Почему-то мне первая строчка гораздо понятнее, чем этот шарповский сахар, который надо ещё разворачивать в голове.
Дело привычки, наверно. Но сахар раскрывается на йоба выражениях. Пример из мсдн:
return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN;
Тернарные операторы для конченых долбоебов дрочащих на кол-во строк
Оно так намного понятнее и читаемее для носителей русского языка. Смысла сейчас использовать английский - никакого.
>>371702
>Ебало имаджинировали, как он после каждого слова переключал раскладку?
Раскладка переключается за пол секунды. Да, это добавляет капельку неудобства я вообще себе хочу педаль сделать под стол, чтобы когда ее нажимаешь - использовалась английская раскладка, а когда отпускаешь - русская, да все руки не доходят, но если программист предпочитает экономить секунды на нажатия клавиш написанию простого, понятного и читаемого кода - это говнокодер, а не программист. И это я еще молчу про экономию времени на этапе, когда ты лезешь в гугл чтобы узнать, как правильно "бухгалтерия" переводится или не ошибся ли ты в написании "frequency".
Хаха! Маладец! Всё по делу разложил!
>как правильно "бухгалтерия" переводится или не ошибся ли ты в написании "frequency".
То, что ты чмоня не умеяющая в английский, не означает, что остальным так проще.
Раскладку туда-сюда переключать тебя может и не заебывает, если ты аутист которому в кайф повторяющиеся механические движения. А вот дергать мозг из одного языка в другой такое себе удовольствие для нормального человека.
Боюсь проебать момент и потеряться. Если можешь, то продублируй в тележку ещё пожалуйста @arabskiyrock
>Раскладка переключается за пол секунды
Это да, но у тебя полсекунды через каждые полсекунды. В сумме это много времени.
>Оно так намного понятнее и читаемее для носителей русского языка.
Не согласен. Появляется визуальный шум из череды английского и русского. И каждый раз когда я вижу подобный код на киберфоруме, мне даже не хочется его читать.
>как правильно "бухгалтерия"
Да пиши ты транслитом.
>но если программист предпочитает экономить секунды на нажатия клавиш написанию простого, понятного и читаемого кода - это говнокодер, а не программист.
Ясно, жир.
Вот вы над челом >>371480 ржете. А я в реальности видел такой код в реальном проекте. Т.е. вот так вот:
private Mutex поле_критическаяСекция;
private int поле_числоПовторений;
private int поле_времяОжиданияМиллисекунды;
private Socket поле_сервер;
...
И вот знаете что. Это был довольно понятный код. И этот код с 2005 года никто не трогал. Хотя прогер уже давно в MS съебал работать.
Такие вот дела.
1Сник.
>То, что ты чмоня не умеяющая в английский, не означает, что остальным так проще.
Означает. 95% разработчиков, с которыми я работал - делают именно так. Может, в ваших дотнетах и епамах был немного другой уровень владения английским у сотрудников, но если ты не заметил - епам все, конъюнктура российского рынка меняется, как и актуальность английского языка. И выбор за вами - писать простой, понятный и элегантный для русскоговорящих разработчиков код, или быть выкинутыми на обочину истории.
>>372080
>Это да, но у тебя полсекунды через каждые полсекунды. В сумме это много времени.
И очень качественный код. Выбор очевиден.
>Не согласен. Появляется визуальный шум из череды английского и русского. И каждый раз когда я вижу подобный код на киберфоруме, мне даже не хочется его читать.
У тебя просто ресентимент. Подобный код реально чище, интуитивнее и проще воспринимается.
>Да пиши ты транслитом.
А оно так сложнее читать потом. Ну т.е. от английского в коде, как бы ватникам не хотелось, полностью не избавиться. Поэтому когда ты натыкаешься в тексте на транслит - ты пару секунд догнать не можешь, что это написано, и только потом понимаешь, что это не непонятная хрень на английском, а русское слово, записанное английскими буквами.
>Ясно, жир.
Ну да жир. Жертвовать качеством кода потому, что долго кнопку нажать - не говнокодерство. Яснопонятно.
И от неё у меня разболелась голова и теперь ещё депрессивное состояние. Это что теперь реально сами не пишут код, а пользуются командами для его генерации?
Ну, для простых крудов - почему нет?
Но том примере - не так и много нагенерированного кода.
Ебать анон. Благослави тебя господь! Не знаю как тебя благодарить. Огромный респект
Спасибо, анон.
ASP.NET огромен. ЗА 4-5 дней его не освоишь.
Ничего там не обновится. Только в логах будет писать, что вы дескать на неподдерживаемой версии.
В чем соль
У нас есть ебейший енум с правами на овер 100+ енумов
и нужно сделать так что бы когда кто-то добавляет в енум новую позицию он ОБЕЗАТЕЛЬНО добавил названия в другом месте реляцию ЕнамХСтарница, и что бы без добавления такой реляции солюция даже не билдовалась.
Это реально сделать?
Юнит тест сделай, который будет проверять совпадение всех полей. Ну или валидатор делающий то же самое где-нибудь в стартапе. Смотря какой подход ты считаешь менее говнокодистым. То что сам по себе твой разросшийся енам уже говнокод, оставим за скобками
>То что сам по себе твой разросшийся енам уже говнокод, оставим за скобками
Ну предположим я могу поменять на что угодно, но надо что бы отсутствия записи именно провоцировало ошибку компиляции, потому что речь идет о правах пользователей, и иначе при запуске и попытке что-то делать система может поломаться, могут быть созданы ошибки, мусор в дб в сесиях, уязвимости,и тп, ни в коем случае нельзя допустить даже простую компиляцию проекта
Помазать тестами и запилить CI, чтобы с проваленными тестами нельзя было слить изменения.
Кто автор этого мнения? Обоссать, обосрать и посадить у параши его. Из того же разряда, как стать программистом за полгодика.
Все эти авто-генераторы от VS - белеберда, тупо сахар, какая-то культура мышепрограммирования от майкрософт, чтобы завлечь в свою прекрасную VS. Тебе все равно в этом сгенеренном коде придется разбираться и поправлять его. Пользы от этих штук никакой. Проще самому с нуля пальчиками и клавиатурой набацать классов. Клавопрограммирование > мышепрограммирование.
Качаешь сайт, в чем проблема. А еще есть куча сервисов с историей инета.
Какой-нибудь сайт по проге (и не только), по сути - это интерактивная книга, просто в восприятие хомо-сапиенса эта идея еще не ужилась.
Сам страдал книгодрочерством раньше.
Понял. Ну что можно сказать, земля пухом вашей шараге.
Хуйня, не по солиду, переделывай. Почему секс знает от том, случился он или нет. Если секса нет, то его и быть не должно. Почему логика получения секса написана в классе хуя да еще и захардкожена. Теперь тебе придется менять класс хуя, когда ты будешь добавлять возможность гомоебли.
>Изучил солид.
>Единственное применение его в жизни - ревьювить говнокод про половую еблю, написанный на коленке, для двача.
В каком-то подкасте на дотнетру слышал. Там они рассуждали, что можно взять джуна без знания фреймворков и он всё за пару дней изучит.
Создаёшь в обработчике нажатия объект формы_2 и вызываешь у него show (кажется)
Сам ты долбоёб. И вообще, гугл это вражеский сайт, так что надо писать "заяндекси"!
Хорошо долбоёб. Ты можешь думать что хочешь, но раз ты не способен загуглить банальную хуйню - иди нахуй
А по мне в самый раз.
Я бы только реципиенту какие-нибудь абстрактные атрибуты добавил, чтобы стратежки по выбору партнеров можно было легче пилить. Ну и выделил бы какой-нибудь SexResult.
Другое дело, что тут выходит, что секс обязательно подразумевает поставщика и потребителя. С точки зрения бизнес-логики не совсем верно в ситуации, когда у нас они могут меняться ролями или учавствовать сразу несколько.
Думаю поизучать С#. Мне это нужно для атоматизации сборок в 3D cad системах вроде кати, макса, солида. Я так понял что С# более менее пересекается во многих программах такого уровня. Есть конечно С++, но я быстрее себе ноги отсрелю )
Собственно вопрос: книги в шапке сейчас актуальны?
Может есть онлайн курсы хорошие?
Конечный вариант для меня это создание окошка в скнопками и параметрами которые будут менять модель в кад системе.
Спасибо
Можно участнику секса предлагать оффер секса, со списком других участников и их фетишей/ориентаций и возможно оплаты. В зависимости от оффера, фетишей и способностей участника, происходит отказ или выбор стратегии секса.
Так же каждый участник секса должен содержать коллекцию типа SexRequirement, по которой будут проверяться потенциальные участники и если требование не выполняется, производится отказ или если участников достаточное количество выполняется GangRapeStrategy.
Там половина старьё не актуальное по 4 и 5 версиям шарпа, а сейчас уже 10 актуальная.
На рутрекере есть
>Я так понял что С# более менее пересекается во многих программах такого уровня.
Разве? Я ничего не знаю про кад-системы, но обычно, если автоматизация заключается в "получить параметры, вызвать с параметрами" - то ее выполняют на баше, а в противном случае - на питоне.
>Я так понял что С# более менее пересекается во многих программах такого уровня.
Тут нужно смотреть для каждой системы отдельно.
Там либо предоставляется какая-то библиотека с описанным API который ты можешь подключить к своему проекту, тогда шарп вполне может подойти.
Либо может быть какой-то скриптовый язык (что-нибудь вроде JS-а, пайтона или вообще своей реализации).
Либо наоборот ты должен будешь написать свою библиотеку которая как плагин будет подключаться к CAD-системе. В этом случае там будет что-то вроде своего фреймворка для определенного языка.
Поэтому прежде чем браться за C#, крайне желательно узнать какие варианты сами CAD системы тебе дают иначе просто зря время потратишь.
>а как написать простое веб-приложение никто не пишет.
Через app.UseMap((context)=> "Spring SUCK")
>а здесь вообще ничего не понятно.
Создаешь класс. Наследуешь от BaseController. Все контроллер готов.
>как правильно
Не использовать студию для веб дрисни. Она плохо переваривает js, html, xml и прочие подобные штуки.
ничего не дало, если просто хтмл файл в браузере открыть, все норм, джс-файл подключается. Если через вебсервер visual studio, то вот такая ебала, не видит файл, хз как путь прописать
А ты добавил в конвеер промежуточного программного обеспечения обработку статических файлов? И почему папка называется html, а не wwwroot?
Посмотрел свежую книгу Фримана по асп 6 и там он всё делает через командную строку в расчёте на работу с вс кодом, а не на вижлу как в старых книгах.
Это тебе не РНР. Тут код сишарпа решает куда что отправлять и если не прописал, то ничего работать не будет.
понял, спасибо, учу дальше
Сейчас бы дрочить на книги по последней версии решета, когда можно задрочить предпоследнюю, а о новых 3 фичах на мсдн прочитать.
Дак старые версии уже не работают. Ты пишешь код из книжки, а он не компилируется. И что читатель должен делать, если он только учится, а не профи в языке?
А точнее, на какие целочисленные значения нужно умножить или поделить 10, чтобы получить три значения:
0, 5, 10
При условии, что используется только умножение или только деление.
9-ка не работает, что?
>Ты пишешь код из книжки, а он не компилируется.
Ни разу не встречал такого, мимо новичок. Максимум что я встречал, это когда IntelSence подсказывал, что некоторые вещи устарели, но это было что-то на уровне оформления и на работоспособность не влияло. Я не знаю куда нужно влезть новичку, чтобы напороться на какие-то удаленные изменения.
Единственное из нерабочего, что я видел, это Set в VB — это выпилили с концами. И еще что-то было вместо Object раньше.
>И еще что-то было вместо Object раньше.
Вспомнил, Variant это называлось. Т.е. это не конкретно object, но использовался как универсальный тип.
Это книга, не учебник, а справочник, в котором разъясняют логику шарпа, а не учат программированию.
>всё делает через командную строку
Можно подумать те кто в Visual Studio работают не через командную строку все делают.
>Дак старые версии уже не работают. Ты пишешь код из книжки, а он не компилируется.
А что тебе мешает создать проект именно под ту версию по которой книга написана и работать с ней. Все будет компилироваться. Потом уже когда научишься перейдешь на новую версию.
Дак старые версии не установишь, они не поддерживаются. Только 3.1, да и та работает через пень-колоду.
Пробовал писать код с книжки Фримана по асп 2 и на одном моменте столкнулся, что код не поддерживается и даже заменить его не чем. На гитхабе нашёл код под новую версию, то полностью это место переписано - новые файлы и логика совершенно иная. Я уж молчу, что невозможно установить нугет пакеты старых версий, которых в репозитории просто нет.
Есть какой-то грамотный подход, кроме как создавать if else для проверки типа каждого класса и потом на каждый из этих классов еще по два метода для чтения и записи свойств, которые я должен прописывать вручную?
Рефлексия же.
Тебе со вложенностями или без?
var property = typeof(MyClass).GetProperty("propName", BindingFlags.Statis | BindingFlags.Public);
property.SetValue(myClassObj, smthValue);
>Дак старые версии не установишь,
Ну зачем пиздеть если не знаешь.
Вот тебе скрины и Visual Studio 2022. Обмазывайся чем хочешь.
>невозможно установить нугет пакеты старых версий
Тоже пиздеж. Вот тебе скрин оттуда же из нюгет менеджера.
Это не говоря уже о том, что можно подключать свои репы, либо вообще руками их закидывать.
Бамп вопросу. Вообще, нихуя непонятно, как это. В основном птолько пдф-файлы как-то, из генераторов отчётов всякие триалки ФР-ок и т.д.
0 1 2
3 4 5
6 7 8
В гугле нихуя не нашел, там все про многомерные.
Так оно выводится либо целой строкой через Console.Write();, либо одним столбиком через Console.WriteLine(); А мне надо по рядам.
Так ставь новую строку каждые n-символов
colorData |= color.G << 8;
Чуть длиннее
// Compute the pixel's color
int colorData = color.R << 16; // R
colorData |= color.G << 8; // G
colorData |= color.B << 0; // B
В твоём посте три строки и три столбца.
По какой формуле ты бы вычислил в какой строке число? Поделил бы нацело на число столбцов. Если 3 разделить на 3, получим 1. И действительно, тройка у нас в первой строке, начиная с нуля, разумеется. Теперь осталось высчитать в каком число столбце? Если мы поделим 4 на 3 нацело, получим 1 и в остатке 1. Нихуясебе! Остаток это же как раз номер столбца! Стало быть, для любого одномерного массива, если число столбцов подразумевается постоянным в каждой строке, то двумерные координаты будут таковы:
Xn = N mod ColumnsCount;
Yn = N div ColumnCount;
> Что означает сие заклятие?
> colorData |= color.G << 8;
Сдвиг влево на 8 регистров.
Было
0000 0000 0000 0001
Стало
0000 0001 0000 0000
Мы вам перезвоним.
Что делать? Как теперь сделать валидацию для колонок dataGridView?
576x1024, 0:15
Я конечно дико извиняюсь за такой вопрос, и скорее всего меня щас обоссут, но все таки, как вкатиться с нуля в ваш этот с#? В шапке сразу предлагается читать книги, чет это слишком для нюкека, может есть какие то видеокурсы на ютубе реально годные, чисто воодные чтобы хотя бы иметь базовое представление. В том же треде по джаваскрипт там есть понятный роадмап что учить с чего начать и куча уроков, а у вас что?
> чет это слишком для нюкека
В шапке как раз для таких
> 7. Что почитать?
> — The C# Player's Guide, третье издание (RB Whitaker) — отличная книга для ньюфагов, всё расписывается довольно подробно, очень много примеров кода.
Начни с канала SimpleCode на ютубах, там годный курс по самым основам. Дальше таки стоит почитать книжки, язык достаточно объемный. А последующий роадмап будет целиком зависеть от того, в какую сферу ты пойдешь: веб, десктоп, мобилки, игоры и так далее. Скорее всего тебе нужен веб, можешь в гугле написать asp.net roadmap и будет тебе роадмап.
Нет
Есть такой талмуд: Язык программирования C#9 и платформа .NET 5: основные принципы и практики программирования. Автор Троелсен Эндрю. Но это прям талмуд >1к страниц с подробным разбором всего и вся.
LINQ expression could not be translated. client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList'
В принципе более менее понятно, что делать пока не очень. Можно явно запустить выполнение запроса на клиентской части или поробовать составить хитровыебанный expression и предать его линку в "Вэн".
Так вот, если идти простым путём явно запустить выполнение запроса на клиентской части то можно на сайте майков найти предостережение что не стоит в клиента грузить большие объёмы данных, может серьезно просесть по производительности. Большие это сколько в граммах? Применить Тулист на таблице в 2000-3000 строк это уже много или ещё нет?
Не хочу показаться токсичным. Но.
Какого блядь хуя? Что это сейчас была за хуйня? Какие еще видевокурсы? Бери книгу и читай. Блядь.
1. Книга - это быстрее чем видево.
2. Книга - больше информации.
И главное. Как с таким майндсетом ты "вкатываться" собираешься? Как будешь решать задачи, которые требуют глубокого изучения, чтения всяких датащитов, общения с вендорами. Пиздец. Блядь. Видева.
1. Начни с синтаксиса языка
2. Теперь ООП
• Тут должен разобраться с async/await (или как минимум научиться юзать, но не понимать как это работает)
Первые два пункта закрывают следующие каналы на ютубе: CodeBlod, SimpleCode, Andrey Shirokoryadov
3. Теперь работа с БД: EFCore и SQL запросы. Тут ты должен скачать MS SQL MANAGEMENT STUDIO. Обязательно к изучению:
• Базовые SQL запросы (select, insert, join..)
• CodeFirst, Database First
• Migrations
• Ключи
• Настройка сущностей (класс ModelBuilder)
4. Теперь переходим к десктопу: WPF
• Учишь MVVM. Тут сначала создаешь всё руками, затем плавно перекатываешься в использование Microsoft.Toolkit.Mvvm
• Учишь dependency injection (microsoft.di, autofac)
• Учишь
• Работа с Json, Xml (опционально protobuf)
5. Расширеный C#:
• Reflection
• Linq
Нахуя ему WPF? Может он ему нахуй не упал. По БД еще есть курс по PostgreSQL у Engineer Spock.
Странный порядок изучения.
Я бы давал так:
1.
Основы информатики(про байтики, АЛУ, ОЗУ и проч.)
Основы матана(базовый уровень, чтобы знал что такое матрица, что такое транспонирование матрицы, чтобы слово кватернион не пугало)
Дискретная математика(задача коммивояжера , всякие обходы, хуеды)
Алогоритмы-хуигаритмы, структуры данных.
Сети(какие, что, зачем, уровни модели оси)
2. Начинаем с Си. Пишем на си простой http-сервер, пишем базу данных, пишем компилятор, пишем движек для 2д игры.
3. Теперь поняв какое же си говно - берем, открываем MSDN и погнали.
4. Гуглим рефакторинг-гуру и статью рандомную про солид.
5. Идем устраиваться на работу, флекся тем, что можешь 1M-проблем сервер поднять на чистом си, без единого дедлока, и что ваш шарп писали индусы.
???
Профит
Ну не все такие умные как ты. Мне инглишь еще подтянуть нужно, чтобы читать книги на нем комфортно.
А мне говорили что матан в программировании не нужен...
>Нахуя ему WPF
А нахуя ему ASP? На WPF задачки поинтереснее чем писать обосранный бэкенд шаблонный
хуйня, лучше пусть всеже теже видосы ютубные посмотрит где все разжовано пережевано, а потом сверху книгой отшлифует
>пройди епамовский курс хотябы,
Да? И зачем, что интересного я там узнаю?
>хуй знает где ты это дерьмо нашел.
На коленке где-то за минуту состряпал.
>как вкатыш вкатышу говорю
М-м-м. Советики от опытных.
Этого солевого не слушай есесна.
>>375202
Твой интерес никого не ебет, если ты хочешь получить работу. Вакансий на асп намного больше чем на впф, потому что десктоп в 2022 - это ругательное слово. К тому же, асп я ему предложил исходя из того, что он уже интересовался говноскриптом, а значит скорее всего хочет в веб.
>а значит скорее всего хочет в веб
Не хочет. Это навязанное мнение, такое же как и среди долбоёбов "пайтон крутой яп". Он вкатился в жс потому что все вкатываются в жс
>десктоп умер
слышу это уже лет 7, всё никак не умрет что ли?
>слышу это уже лет 7, всё никак не умрет что ли?
Он уже несколько лет мертв. Это не значит, что он исчез или что на нем совсем нет вакансий, но это очень нишевые проекты. Вся главная елда сейчас происходит в вебе, а в ближайшее десятилетие туда уйдет вообще все.
>Вся главная елда сейчас происходит в вебе, а в ближайшее десятилетие туда уйдет вообще все.
Уже представил как докер, ПО для бд, корпоративное ПО, ПО для графики, дизайна, моделирования, мессенджеры, читы-лаунчеры для игр, утилиты для пк переезжают в веб?
> ПО для бд, корпоративное ПО, ПО для графики, дизайна, моделирования, мессенджеры,
Уже перекатились в массе, лол.
Ты где последние 5 лет был?
>Уже перекатились в массе, лол.
Например? Мини утилитки которые там у фотки фон стирает? Ну тут да.
> корпоративное ПО
Тут вообще не понятен вопрос. Там давно все либо на своих мощностях, либо на арендуемых, но на вебе все что только можно.
> ПО для графики
ФШ семимильными шагами идет в веб. Уже половина функционала завязано на облаках и без них - это считай просто рисовалка, которая нахуй никому и не нужна в 2022 году.
> дизайна
Фигма - из коробки в вебе.
> моделирования
Если не рассматривать блендер, то ситуация аналогична ФШ. Еще и продаем свои мощности для рендера-хуендера.
> мессенджеры
Найди мне современный ПОПУЛЯРНЫЙ мессенджер не на вебе, лол.
>Фигма - из коробки в вебе.
Урезанный функционал для умственно отсталых. ВЛГ(стример) недавно ругался на своего работника, который не может сделать что-то более или менее сложное, и самое главное отказывается даже изучать другой софт, позволяющий реализовать задуманное.
Но в целом ты прав, тенденция печальна. А после санкций, когда легализовали пиратство, кабаны только потирают ручками, как бы все перевести на онлайн сервисы.
>Мини утилитки
Ты смеешься, а все к этому идет. Ты думал нас ждет суперсложынй софт и супернафаршированные соцсети, а в итоге приходим к фигме, тиктоку и мобильным играм нет требующих действий от игрока.
>Сдвиг влево на 8 регистров.
Да, но какова цель вот этого всего
int colorData = color.R << 16; // R
colorData |= color.G << 8; // G
colorData |= color.B << 0; // B
Хранить в одной переменной все три числа? Как обратно вернуть? Никогда не понимал как люди орудуют сдвигами регистров на ходу.
Ты че туда пихаешь? Событие, на которое ты подписался, уже сформировало аргументы, это обычно sender и eventArgs. Скорее всего твой метод Column_KeyPress имеет несоответствующие аргументы. И прикол в том, когда ты создаешь подписку, то на аргументы часто похуй (можно даже без аргументов завести), но когда ты подписку удаляешь, то вот тогда тебе дают леща.
Я бы обратил внимание на EventArgs — именно его часто модифицируют в зависимости от того, какие аргументы нужно передавать, поэтому это может быть MouseEventArgs если событие связано с мышью, ButtonEventArgs для клавиш, НебоИАллахEventArgs. А в твоем случае смотри подсказку, у тебя KeyPressEventArgs.
Погугли как создавать свое собственное событие и как его вызывать. У тебя отпадут вопросы.
>Как обратно вернуть?
Выпихнуть лишнее за край (останутся нули), потом поместить значащий кусок в начало, и так для каждого числа.
И чем плох алгоритм на скрине, в контексте заданной задачи?
Циферки выводятся? Выводятся.
Выводятся как в условии задачи? Да.
Алгоритм универсальный? Да.
Простой как валенок? Да.
"Чего тебе еще надобно, пес?"
>Никогда не понимал как люди орудуют сдвигами регистров на ходу.
Изучи двоичную и шестнадцатеричную систему и как они между собой соотносятся. Считай все цветовые переменные только в шестнадцатеричной системе. Мозг перестроится и будет очень удобно.
>ПО для графики, дизайна, моделирования
Это все пишется не на решетках с впф, лол, там сплошные кресты. На впф щас делают в основном всякие внутренние корпорастические продукты и изредка что-то другое, но тенденция явно гаснущая. Простой десктопный софт пилят на говноскрипте в основном, ибо кроссплатформенно, быстро, молодежно. Более сложный как писали 20 лет назад на крестах, так и будут продолжать еще столько же как минимум.
Хочу MyRectangle2 присвоить ширину MyRectangle1
<Rectangle x:Name="MyRectangle1" Width="15" />
<Rectangle x:Name="MyRectangle2" Width="MyRectangle1.Width" />
>>375597
Все, разобрался
{Binding Width, ElementName=MyRectangle1}
>только не на Width, а на ActualWidth
Вот эта хрень работает смотря где. Если в режиме стрейч, то ActualWidth показывает верно, но попадалось, что то ли вбитое вручную, толи еще почему, но ActualWidth выдавал 0, а вот Width показывал нужный размер.
Width не является реальным размером.
328x372, 0:07
помогите вкатывальщику разобраться как они должны работать.
вот смотрите есть функции которая добавляет рекорды в БД
и есть вот такой тест для нее.
Как проверит что собственно все прошло хорошо и добавились рекорды там где надо а там где не надо не добавились?
Не знаю что ему не понравилось, но мне то что если ввести уже двузначное число - оно поедет и будет некрасиво.
Мне кажется, что юнит тесты писать для своей функции, это как разговаривать самому с собой. В большинстве случаев ты уже знаешь, что тест выдаст и данное занятие с моей точки зрения выглядит бессмысленным.
Другое дело, когда функция чужая и нет желания разбираться как она устроена — тогда ты тыкаешь в нее палкой из тестов. Тогда смысл тестов появляется. Я это так понял.
Юзаю. В твоём кейсе ты должен мокать репу и смотреть что там в репе после того как ты выполнил тест.
Повторишь это себе, когда через 2 года нужно будет быстро пофиксить баг или новую фичу впиндерить(естественно дедлайн вчера, а то что ты про фичу только сейчас узнал - твои проблемы), а ты в результате все нахуй сломал.
Юнит тестах почти нет логики, там обычно набор контрольных входящих значений и выходящих.
Как вообще можно в этом облажаться?
Куда её мокать? В корыто с кипятком что ли?
>В большинстве случаев ты уже знаешь, что тест выдаст
Я не знаю, функции еще нет, в тесте я пишу собственно то что хотел бы в теории получить на выходе.
Дальше запускаю и смотрю что не хватает.
Шаг за шагом пишу свою функцию, проверяя что ничего нигде не поломалось и наглядно видя что конкретно сейчас не хватает для следующего шага.
После определенной итерации загораются заветные зеленые лампочки и вот тогда, только в тот момент я узнаю, как должна была выглядеть моя функция.
Не знаю, может кому-то это лишнее, но будучи вкатанном я учился программированию на этих сервисах с задачками, и как-то привык к этим галочкам сигнализирующим выполнение задачи, без них как-то... некомфортно что ли.
Что-то такое? Как мне в замещающую функцию передать параметры, то что я нашел в нете не работает.
В общем в итоге получилось что-то такое, так будет хорошо?
Решается добавлением указания формата.
Web Api и забить хер на фронт.
А теперь переделай так, чтобы не по три, а по два числа в ряду было.
А потом так чтобы по четыре.
Повторяй с разными значениями, пока не дойдет.
Gen2GcCallback, ValueStringBuilder, StringBuilderCache, DelegateHandler, че то там с Path SpecialChars
утомляет копипастить или рефлексией лезть
Для таких штук проще сделать мок руками и использовать листик, в котором обычным линку что-то доставать.
Если у тебя SRP соблюден и интерфейсы не раздуты - то с этим проблем не должно возникнуть.
>>375755
Соложновато вникнуть. Но выглядит ок.
Ток ассерт лучше не True, а заменить на Equal и выводить сообщение какое-то с полезной инфой.
> какова цель вот этого всего
RRRR 0000 GGGG 0000 BBBB
Вот такое число получится в бинарном виде. Вместо Р, Г и Б, соответственно вышеуказанные значения. Заметь, между цветами остаются промежутки, чтобы не наложились.
Потому что значок палочки - это побайтовое ИЛИ, которое добавит цвета к уже имеющимся (наложит, да, как в фотошопе), но поскольку мы сдвигаем цвета в разные регистры, то смешивания не будет.
>между цветами остаются промежутки, чтобы не наложились.
Что за хуйню ты несешь? Какие нахуй промежутки если сдвиг побайтно идет?
За такие шутки в оперативке бывают промежутки.
> Какие нахуй промежутки если сдвиг побайтно идет?
Вот такие, например, представим себе, что
Color.R это FA
Color.G это CE
Color.B это 8D
тогда, вышеуказанный код приведет к вот такому числу:
FA 0000 00CE 0000 008D
> FA 0000 00CE 0000 008D
Вообще то к FACE8D, там же побитовый сдвиг, а 1111 1111 это как раз FF (255)
Ты совсем ебобо?
Команды >> и << это битовый сдвиг и соответственно <<8 это сдвиг на 8 бит или 1 байт, Так же как <<16 это сдвиг на 16 бит или всего два байта.
Соответственно в твоем случае будет 0xFACE8D, без всяких промежутков.
Уебки. Понаучатся по своим ютубам.
Есть какое-то решение?
К примеру:
string? str;
Это новая (относительно) фича из 8-го шарпа. Nullable Reference Type.
Вот тут достаточно просто для понимания:
https://metanit.com/sharp/tutorial/3.50.php
За остальным на МСДН.
Какой-то выбор между калом и калом. webapi конечно же.
На сях под линукс поди пишешь? Давно с тяночкой ебался?
Например, у меня есть пикрилейтед текстбоксы. С помощью стиля, я привязал лейблы слева и справа. Но теперь я не могу внести туда информацию. В туториалах, эта инфа биндилась из свойства Tag родительского текстбокса, но это был пример с одним элементом, а у меня их джва.
Мне бы какой парсер, чтобы я в свойстве Content писал что-то вроде "H:/255/%", дальше это разбивалось на три строки по разделителю "/", например.
Вообще по факту, весь этот языковой шовинизм это признак недопрограммиста и инцела в том числе, само-удовлетворяющегося своей некоей элитарностью, по факту везде свои заморочки. Но да, если ты прогаешь и не отличаешь биты от байтов - ты мразь и гнида конченая.
Есть база, а начем ты прогаешь - какая вообще разница. Можно одинаково говнокодить на любом языке и нихера при этом не понимать.
Представь картину, что, слесарю (к примеру) кто-то-то начает затирать, что "Забивать гвозди молотком - это фу и вообще зашквар, а вот закручивать шурупы отверткой - топчик и вообще круто". Как думаешь похуй ему будет или нет?
Вот и программисту, для которого различные ЯП-ы - это те же самые инструменты для слесаря, должно быть похуй, кто-что думает о его инструменте или о том как он им пользуется?
Короче любые математические операции и вызовы функций это такой гемор, что не стоит того. Хотя на хабре челик заморачивался чтобы это делалось проще.
Нет, разбухтевшийся двачер должен быть обязательно попущен конечно же
Мимо бакалавриат CS + Java dev experience.
Ебало представили долбоеба, который учит основы ВТ, вместо того, чтобы учить сам ЯП?
Дак ты прошёл или планируешь пройти? Или проходил, но тебе отказали, потому что не смог ответить на вопросы?
Учиться можно на чем угодно. Просто на VSCode для нормальной работы нужно обмазаться плагинами и по идее нужно понимание какие тебе нужны и как они работают. Плюс нужно много чего настроить будет в итоге.
В Visual Studio уже есть почти все из коробки, но многое из этого новичку может не понадобиться.
Но в Visual Studio мощнее отладчик, поумнее интелисенс, больше разных тулзов, анализаторов и т.д. С тестами удобнее работать. Плюс опять же большие проекты (а если еще и с сабмодулями), в VSCode крайне сложно будет ковырять.
Вообще я бы посоветовал осваивать и то и то одновременно.
>Статиком со статическими методами
У тебя по минимуму должно быть таких классов. Я обычно статику юзаю только для классов сериализациии/десериализации каких-нибудь условных строк или файлов
Лучше офк регать в контейнер какой-нибудь и юзать где надо
у меня другой профиль. Впрочем я не ставлю в один ряд "выполнение в консоли ибо так работает тулза" и "делаю в консоли от нехер делать, даже если можно не делать"
Понятно зачем в книгах пишут "добавляете нюгет пакет вот такой командой", но в реальной жизни проще залезть в гуи.
Теперь только креки, если не покупал лицуху на год.
Можно как-то отключить визибилити, пока все стрейчевые элементы растягиваются и адаптируются?
Нуууу. Считаю что не нужон в модели.
Взаимодействие со стейтом должно происходить через какое-нибудь хранилище, которое по хорошему - имеет иммутабельный стейт, а уведомление об изменении модели происходит после комита нового стейта.
>Считаю что не нужон в модели.
Двачаю. Лишняя нагрузка модели. Можно просто сделать нотифайпропертиченжед на модель во вьюмодел и будет тот же результат.
Можно. Гугли события загрузки окна + погугли как отрисовывается WPF окно
>Гугли события загрузки окна
Ты про Initialized и Loaded? Первому вообще по барабану, даже пальцем не пошевелит, все начинает отрисовываться при Loaded.
После идет ContentRendered. Рекомендовали минимизировать окно до инициализации, а в ContentRendered выставить нормальный размер. Но у меня старт с минимизацией шатает все зависимости.
Открой csproj и посмотри какая там структура. Видел еще плагин чтобы так размещать файлы, не помню как называется.
В чем проблема сразу читать книги? В книгах обычно есть вводная часть, с базовыми представлениями, читать все умеют. Если ты совсем ноль и у тебя условно нет понимания даже что такое цикл и переменная, помноженное на неосиляторство - то тебе проще будет начать с какого-нибудь джеэса или питона, чтобы в условном браузере или юпитере потыкать в это самое программирование без лишних телодвижений.
>В том же треде по джаваскрипт там есть понятный роадмап что учить с чего начать и куча уроков, а у вас что?
У нас есть Рихтер. Просто читай его перед сном по 2 часа каждый день, вместо Библии, - и все будет.
>Основы матана(базовый уровень, чтобы знал что такое матрица, что такое транспонирование матрицы, чтобы слово кватернион не пугало)
>Дискретная математика(задача коммивояжера , всякие обходы, хуеды)
Нахуй это нужно? Говно без задач.
>2. Начинаем с Си. Пишем на си простой http-сервер, пишем базу данных, пишем компилятор, пишем движек для 2д игры.
Ты совсем ебанутый.
>флекся тем, что можешь 1M-проблем сервер поднять на чистом си
Тебя за одно это не возьмут, подумав что шиз какой-то, с которым лучше не связываться.
И на экране будут обновляться все свойства модели, вместо одного? Заебись оптимизация.
>Вся главная елда сейчас происходит в вебе, а в ближайшее десятилетие туда уйдет вообще все.
А в вебе вся главная елда сейчас происходит в ноде. js, вся хуйня.
>Уже представил как докер, ПО для бд, корпоративное ПО, ПО для графики, дизайна, моделирования, мессенджеры, читы-лаунчеры для игр, утилиты для пк переезжают в веб?
Ты же понимаешь, что в одной лишь верстке лендингов народу больше занято, чем программистов, занимающихся всем вот этим вот, суммарно существует?
>ВЛГ(стример) недавно ругался на своего работника
Но он его работник. Сечешь, да? Это как ошибка выжившего, только наоборот.
>Нахуй это нужно?
Как ты собрался что-то сложнее круда без вот этого делать?
Ну, давай, вот задача: есть фигура, нужно дать пользователю возможность поворачивать ее и масштабировать. Твое предложение как это сделать? Или ты настолько отупел от использования готовых решений, что думаешь будто компуктер сам имеет где-то отдельный вычислительный блок, который за поворот твоей хуйни отвечает, а тебе только и нужно, что вызвать: ROT, SCL?
> Ты совсем ебанутый
С хуя, блядь? То что я предлажил - это типичные курсачи второго курса средней паршивости вуза. Если вкотенышь не способен на это - нахуя он вообще нужен?
> Тебя за одно это не возьмут, подумав что шиз какой-то, с которым лучше не связываться.
Возьмут. Меня же взяли.
Я прошёл собес.
Назначить вручную форматы при запуске..
На стажировке дали тесты, по которым надо именно так сделать.
Просто я раньше видел что модели чисто дто, а логика создания на другом слое (CQRS например).
У меня получается только 1 час читать, потом ступор начинается.
> Можно ли в XAML распарсить стринг.
Может и можно, но зачем? Ведь не рекомендуется смешивать код (логику) и данные. ХАМЛ - это данные, код туда пихать не надо.
Можно ли вообще рассматривать Рихтера как учебник по сишарпу? Там предполагается, что язык уже знаешь, и хочешь узнать тонкости выполнения в среде CLR. Причём знания какого-нибудь С++ не сильно помогут.
>но зачем
Потому что когда я добавил в стиль тексбокса два лейбла, у меня перекрылся снаружи доступ к контенту этих лейблов. Они могут только биндить свойство родительского тексбокса.
Каким образом мне им назначить текст?
Зависит от того как принято в коллективе архтектуру строить.
С анемичной моделью - обычно у тебя есть отдельный сервис ЧтоТоТамValidator, который и будет отвечать за то, чтобы сущность была валидна.
В богатой модели - ты эту логику можешь в конструктор запихнуть, гарантируя таким образом, что сущность, которая некую бизнес-логику выполняет - никогда не будет создана.
Срачей на эту тему множество и делают и так и так. Я - сторонник богатой модели, но с ней проблемы в том, что инструментария обычно нет - и тебе придется извращаться, чтобы класс Age в базу запихнуть, потому хуйнуть анемичную модель и нахуячить сверху кучу классов для валидаци, хуилидации и прочего - бывает быстрее.
> гарантируя таким образом, что сущность, которая некую бизнес-логику выполняет - никогда не будет создана
Если данные для инициализации невалидны или не полны.
Понял, спасибо
Наверное, тебе нужно это:
Visibility.
Collapsed: Do not display the element, and do not reserve space for it in layout.
Hidden: Do not display the element, but reserve space for the element in layout.
Visible: Display the element.
IValueConverter посмотри
Бэкенд захвачен джавой, но по Спрингу мало инфы
List<int> xs = new();
List<int> ys = new(capacity: 10_000);
List<int> zs = new() { Capacity = 20_000 };
Ты про это видимо
Работает кто на западного барина на дотнете на нормальных проектах с нормальной зп?
(нормальная это от 50$ в час для человека с опытом 3+ года опыта)
нормальные проекты это не говно легаси с вебформами
Сам вопрос где вы ищите эти вакансии, потому что в линкдине какой-то тухлят
В чем суть. Корпорация зла разрабатывает пакет для React Native под винду, react-native-windows, но, как в анекдоте, есть нюанс.
Совершенно случайно эта хуйня билдит только UWP приложения.
Полпроебанный дня позволили узнать, что есть такая штука как XAML Islands и с помощью нее можно всунуть UWP контролы внутрь win32 приложений(Похуй какое, впф, формы, хоть винапи, мне нужна ебаная экзешка).
На сайте майков есть гайды, но там то ли устарело, то ли у меня знаний не хватает, то ли uwp получаются не как в примере.
Я уже скоро ебанусь, спасите.
Я бы рад, но я ниоч.
Наверное, потому что все хотят делать асп нет сервисы, а ебаться с хамл разметками и мввм не очень хотят.
Я бы лучше писал десктопные приложения, но приходится учить этот дурацкий асп.нет тупой.
получается так: при запуске программы открывается первое окно, на нем есть кнопка,которая открывает другое окно с информацией, допустим мы перемещаем это первое окно влево, нажимаем на кнопку, оно закрывается(прячется ) и открывается другое окно с той самой информацией, но появится оно не на месте предыдущего, а на месте стартовой позиции, которая указана в свойствах
Конкретно по твоему вопросу в лоб:
Юзай публичные свойства. Создаешь в своем классе окна что-то типа:
public StartupLocation as Size {Get; Set;}
Затем когда ты создашь новый экземпляр своего окна, то у тебя появится доступ к данной переменной извне. Типа
MyWindow1 MyWindow = new MyWindow;
MyWindow1.StartupLocation = new Size(200,150); //тут ты передал внутрь экземпляра данные еще до запуска окна
MyWindow1.Show;
Дальше событием Loaded читаешь эти данные из свойства и применяешь к окну.
Но если по уму, и не страдать хуйней с миллионами окон, и если у тебя WPF, то там есть так называемые страницы. Ты можешь с ними работать как с отдельными окнами, ничего не теряешь по функционалу, при этому у тебя будет только одно главное окно, В КОТОРОЕ ты загружаешь свои страницы.
>public StartupLocation as Size {Get; Set;}
Простои анон, у меня бейсик головного мозга:
public Size StartupLocation { get; set; }
>MyWindow1 MyWindow = new MyWindow;
И тут обосрался. Забыл, что тип переменной идет впереди в шарпе. Еще у вас скобочки автоматом не подставляются.
MyWindow MyWindow1 = new MyWindow();
Спасибо за помощь, особенно с этими страницами, а то в нашей шараге приходится все самостаятельно изучать
>Хочу спросить, насколько нормально/часто встречается валидация и пробрасивание исключений в конструкторе класа?
Если нужно для погуглить. Если это отнеосится к конструкторам моделей, то этот подход называется DDD (Domain Driven Development). Когда какая-то логика работы с моделью не по слоям размазывается, а по максимуму заезжает в саму модель. Подход в чем-то хорош, но я не сторонник такого подхода, мне больше с анемичными моделями нравится работать.
Если же у тебя какая-то логика прокидывается в конструкторах сервисов, то это ублюдочный подход. Особенное при использовании DI, т.к. в случае какой-то ошибки, у тебя посыпется вся цепочка зависимостей и хрен знает где у тебя этот эксепшен вылезет.
>Господа программисты, поясните вкатывальщику за C#.
Если зарплатные ожидания процентов на 50% урежешь, то можешь вкатиться. Но новички мало где нужны. Вот если хотя бы год проработаешь где-нибудь, то тогда уже работа сама тебя искать будет, а до этого тяжко.
Можно, но не нужно. Если у тебя появилась такая необходимость, то ты где-то проебался. Foreach не для этого.
Необходимости нет, чисто из-за лени. В Форич писать меньше.
Был опыт html/css, так же консольные проложения на пайтоне в далёком 2020 году. Но тогда я всё забросил. Тащемта вопрос я нихуя не шарю и не претендую даже, поэтому прошу совета:
1) Стоит ли вкатываться на .NET (ASP.NET Core) в 2к22 вкатуну или лучше стандартный JS/React с декларативычами (хтмл ксс)? Web направление, если что. Почему такой тупой вопрос, потому что в большинстве вакансий рядом с .NET присутствует ещё и какой-нить JS\React и хочется не проебаться, могу заинвестить пол года времени целыми днями, если что.
2) Как легко потом с поиском работы ASP.NET Core vs JavaScript? Английский, если что, крепкий В1, мб В2 даже. Сложно ли найти компанию за рубежом (я не в РФ) на ремоут?
3) Может кто-то проходил/знает курсы Epam (UpSkill)? Как они, котируются ли (если рассматривать направления .NET и Frontend)? Эйчарки написывают/названивают?
Зарание спасибо за любой ответ.
Надо выбирать то, что нравится самому. Можно потратить 1-2 недели на каждый язык и потом уже решить, что тебе больше нравится.
Я вот сам легко выучил сишарп, но споткнулся об фреймворки. Сейчас сижу и не знаю что делать. Так что все эти рассуждения стоит/не стоит - пустые, потому что может оказаться, что ты сам не осилишь этот путь.
>Стоит ли вкатываться на .NET (ASP.NET Core) в 2к22 вкатуну или лучше стандартный JS/React
Зависит, часто к дотнету еще ангуляр просят
>>379471
>Сложно ли найти компанию за рубежом (я не в РФ) на ремоут?
Определи что значит за рубежом
Если ты в Европе и планируешь работать на локальный рынок проблем не будет
Если ты в условной Грузии и собираешься работать на заказчиков в США \ Европе то с JS будет проще т.к вакансий просто больше.
Если ты вдруг в Штатах, то бери JS, на дотнете как правило энтерпрайз с кучей легаси и говна, стартапы пишут но значительно реже.
Это наверное тот додстер, который про версии аспнета срет второй тренд уже
За 3 месяца + 1 месяц джавы, потому что по сишарпу нет такой классной книги как Б. Эккель "Философия Java". Но я и до этого знал многие языки программирования, так что это не первый язык.
Мало актуальной литературы по фреймворкам и уровень сложности значительно выше, чем при изучении языка и написании простых программ. Также есть отторжение от архитектурного подхода в самом фреймворке. Я когда писал свой сайт на чистом РНР, то выбрал более простую, но в тоже время легкорасширяемую архитектуру. Было одно удовольствие писать код. Здесь же надо применять всякие мерзкие штуки, которые насильно вставили во фреймворк.
К примеру, все запросы к БД я писал на чистом SQL, потому что язык и так хорошо подходит для работы с данными и зачем нужна прослойка вроде ORM, мне не понятно. А возни с ней больше, чем в обработке простого SQL-запроса.
>сишарпу нет такой классной книги как Б. Эккель "Философия Java".
Я конечно знал что мамонты еще читают книги, но сейчас 2022 год где документация более чем исчерпывающая
Книги есть, например Троелсен
>>379603
>Мало актуальной литературы по фреймворкам
Вся актуальная информация есть в документации.
>>379603
>Здесь же надо применять всякие мерзкие штуки, которые насильно вставили во фреймворк
Не хочешь не применяй, создаешь самый простой шаблон и получаешь просто шаблон с сервером под копотом и обработчиками в стиле node js
>>379603
>зачем нужна прослойка вроде ORM, мне не понятно
Берешь ADO.NET (no ORM)\ Dapper (microORM) и лепишь свои голые запросы если душе угодно, никто не заставляет использовать EF
>>379603
>выбрал более простую, но в тоже время легкорасширяемую архитектуру
Проиграл с того, какую ты там архитектуру мог выбрать более расширяемую чем на дотнете
>Троелсен
Ты явно не читал Эккеля. Аналог Троелсена по джаве двухтомник Хорстмана, где собрано всё обо всём, но в итоге ни о чём. А вот наиболее близкий аналог Эккеля в шарпе - это книга Гриффитса. Вот только Гриффитс пишет слишком путано, а у Эккеля легкий слог и сама книга выстроена как учебник, потому что сам Эккель преподаватель и отработал курс на студентах.
Документация - не учебник. Я что-то не видел людей, которые изучили программирование по документации.
Мне в детстве кто-то подарил справочник по Delphi, но по нему я не смог освоить Delphi, потому что даже паскаль тогда не знал.
Я бы рад писать как мне нравится, но в вакансиях требуют знания определенных технологий, а не какие нравятся.
>Стоит ли вкатываться на .NET (ASP.NET Core) в 2к22 вкатуну или лучше стандартный JS/React с декларативычами (хтмл ксс)?
Выбор между фронтом и бэком получается. Это довольно разная работа. Почитай-посмотри про оба направления, попробуй сам по недельке хотя бы, потом решай, за что в первую очередь браться. К бэку потом можно доучить фронт и наоборот - станешь фулстеком.
>React
Это говно знают все собаки в твоем дворе, можешь сходить поинтересоваться. Да, вакансий много, но вкатунов в десятки раз больше. Педаль лучше Ангуляр, где 3,5 калеки в месяц на вакансию откликаются. На Реакт заебешься работу искать.
TagHelperOutput output = new TagHelperOutput("div",
new TagHelperAttributeList(),
(cache, encoder) => Task.FromResult(content.Object));
И там такие строчек по 10 штук в каждом методе. Как их вообще осознавать?
Да легко. Создаётся TagHelper, который в HTML будет подменятся <div> с пустыми атрибутами и заполненным данными из content.Object. Что тут сложного?
>Почему content.Object, а не просто content?
Надо смотреть на сам объект content, без него сложно сказать, что там происходит.
> Как их вообще осознавать?
Ctrl+клик на
> TagHelperOutput
И читать-читать-читать. До просветления.
>Ты явно не читал Эккеля
В следующий раз зайди в тред с 1С и скажи им что они Страуструпа не читали
Нахуя мне книги для вкатунов с тонной воды читать еще и для другого стека
>>379618
>Аналог Троелсена по джаве двухтомник Хорстмана
Если для тебя Троелсен сложно пишет, у меня для тебя плохие новости, не вздумай открывать Рихтера
>>379618
>Документация - не учебник. Я что-то не видел людей, которые изучили программирование по документации
>>379618
>Мне в детстве кто-то подарил справочник по Delphi, но по нему я не смог освоить Delphi, потому что даже паскаль тогда не знал.
Я для тебя видимо открою секрет, документация это более широкий термин нежели сгенерированный по XML набор гиперссылок с минимальным содержанием.
Про то что документация сейчас != документация в книжке рассказывать нужно?
Документация это в том числе туториалы, нормальные примеры и приложения.
>Мало актуальной литературы по фреймворкам
Ух бля, по Spring дохуя "актуальной" литературы. (нет)
Ее нет, потому что документация сейчас примитивная с картинками \ видосами \ сиди да код копируй из снипетов.
У маек одна из лучших документаций и полно примеров хороших подходов в том числе для людей с опытом
(https://github.com/dotnet-architecture/eShopOnContainers)
Что ты планируешь делать когда будет 2+ года опыта работы и нужно будет разбираться с Azure \ Kubernetes \ микросервисами?
Тоже "книжку" АКТУАЛЬНУЮ ПОСЛЕДНЕЙ ВЕРСИИ искать будешь?
>>379618
>но в вакансиях требуют знания определенных технологий
Так может есть какая-то причина, почему все-таки ORM нужны а не "ой сложно, я вот на чистом SQL хуяк хуяк накидал запросов и архитектура у меня лучше"?
>Ты явно не читал Эккеля
В следующий раз зайди в тред с 1С и скажи им что они Страуструпа не читали
Нахуя мне книги для вкатунов с тонной воды читать еще и для другого стека
>>379618
>Аналог Троелсена по джаве двухтомник Хорстмана
Если для тебя Троелсен сложно пишет, у меня для тебя плохие новости, не вздумай открывать Рихтера
>>379618
>Документация - не учебник. Я что-то не видел людей, которые изучили программирование по документации
>>379618
>Мне в детстве кто-то подарил справочник по Delphi, но по нему я не смог освоить Delphi, потому что даже паскаль тогда не знал.
Я для тебя видимо открою секрет, документация это более широкий термин нежели сгенерированный по XML набор гиперссылок с минимальным содержанием.
Про то что документация сейчас != документация в книжке рассказывать нужно?
Документация это в том числе туториалы, нормальные примеры и приложения.
>Мало актуальной литературы по фреймворкам
Ух бля, по Spring дохуя "актуальной" литературы. (нет)
Ее нет, потому что документация сейчас примитивная с картинками \ видосами \ сиди да код копируй из снипетов.
У маек одна из лучших документаций и полно примеров хороших подходов в том числе для людей с опытом
(https://github.com/dotnet-architecture/eShopOnContainers)
Что ты планируешь делать когда будет 2+ года опыта работы и нужно будет разбираться с Azure \ Kubernetes \ микросервисами?
Тоже "книжку" АКТУАЛЬНУЮ ПОСЛЕДНЕЙ ВЕРСИИ искать будешь?
>>379618
>но в вакансиях требуют знания определенных технологий
Так может есть какая-то причина, почему все-таки ORM нужны а не "ой сложно, я вот на чистом SQL хуяк хуяк накидал запросов и архитектура у меня лучше"?
Тут вообще нихуя не понятно, в NuGet максимум 1.5.0 можно скачать, откуда 5.0.0 мне высрать?
Пиздец, NuGet.org подрубил, и все само скачалось.
Я уже половину Рихтера прочитал. Нормально он пишет. Только это не помогает понять АСП.
Собственно, по АСП пробовал читать Фримана, но там проблема, что нет свежей книги, а 2.0 уже не работает совсем ни как.
Пробовал читать Эндрю Лока, но он слишком углубляется в теорию и приводит мало примеров кода. Вроде как понимаешь принцип работы, но ни строчки кода не можешь написать.
По Спрингу инфы меньше, но с другой стороны можно взять книгу за 2013 и весь код там рабочий. А возьми сейчас книгу по АСП за 2013, ни один пример даже не запустится.
Если никто из программистов не знает как писать на новых технологиях, то писать на них не будут. К примеру, блейзор нигде не используют, потому что книг по нему нет. Как только появятся книги, так и начнут использовать.
>По Спрингу инфы меньше, но с другой стороны можно взять книгу за 2013 и весь код там рабочий. А возьми сейчас книгу по АСП за 2013, ни один пример даже не запустится.
>
Кому-нибудь другому эту сказку расскажи
У спринга API за 9 лет не поменялся и весь код рабочий, ага
- Ой, вы знаете у вас тут на проекте вместо A используется B, а я с B не работал.
- Открой документацию, посмотри код
- Ой, вы знаете.. мне бы книжку какую почитать и вообще почему тут так я же читал другое
>>380079
>Вроде как понимаешь принцип работы, но ни строчки кода не можешь
Вот это да, оказывается писать код его нужно ПЫТАТЬСЯ писать
>>380079
> К примеру, блейзор нигде не используют, потому что книг по нему нет.
1. Blazor in Action,
2. Microsoft Blazor: Building Web Applications in .NET 2nd,
Web Development with Blazor: A Hands-on Guide for .NET Developers to Build Interactive UIs with C#,
3. Learning Blazor: Build Single-Page Apps with WebAssembly and C#,
4. Blazor Revealed: Building Web Applications in .NET,
5. Exploring Blazor: Creating Hosted, Server-side, and Client-side Applications with C#,
6. Blazor WebAssembly by Example: A Project-based Guide to Building Web Apps with .NET, Blazor WebAssembly, and C#,
7. An Introduction to Building Applications with Blazor: How to get started creating applications using this exciting easy to use Microsoft C# framework,
8. Building a Web App with Blazor and ASP .Net Core: Create a Single Page App with Blazor Server and Entity Framework Core
Мне продолжать?
>>380079
>К примеру, блейзор нигде не использую
Конечно, вкатут у которого рынок ограничен российским авторитетно заявляет что НИГДЕ НЕ ИСПОЛЬЗУЕТСЯ.
Дальше пойдут виляния жопой и НИГДЕ сменится вполне очевидным МАЛО используется.
Его используют, но не в частях приложения с которым взаимодействует большая часть пользователей.
Как простая вебморда для административных задач в виде поднятия нового тенанта и конфигураций он используется
Особо упоротые пишут на Blazor все
Реальность такова, что проще написать фронт на ангуляре, чем ебаться со смесью говна Silverlight + Knockoutjs коим он и является
--------
Годы идут, документация собирается сообществом и пишется максимально просто, доступно и без воды, а вкатуны и дальше жрут говно от АВТОРНЕЙМ вместо того чтобы начинать потреблять оригинальный контент и решать задачи на работе за пару часов, вместо пары дней
>По Спрингу инфы меньше, но с другой стороны можно взять книгу за 2013 и весь код там рабочий. А возьми сейчас книгу по АСП за 2013, ни один пример даже не запустится.
>
Кому-нибудь другому эту сказку расскажи
У спринга API за 9 лет не поменялся и весь код рабочий, ага
- Ой, вы знаете у вас тут на проекте вместо A используется B, а я с B не работал.
- Открой документацию, посмотри код
- Ой, вы знаете.. мне бы книжку какую почитать и вообще почему тут так я же читал другое
>>380079
>Вроде как понимаешь принцип работы, но ни строчки кода не можешь
Вот это да, оказывается писать код его нужно ПЫТАТЬСЯ писать
>>380079
> К примеру, блейзор нигде не используют, потому что книг по нему нет.
1. Blazor in Action,
2. Microsoft Blazor: Building Web Applications in .NET 2nd,
Web Development with Blazor: A Hands-on Guide for .NET Developers to Build Interactive UIs with C#,
3. Learning Blazor: Build Single-Page Apps with WebAssembly and C#,
4. Blazor Revealed: Building Web Applications in .NET,
5. Exploring Blazor: Creating Hosted, Server-side, and Client-side Applications with C#,
6. Blazor WebAssembly by Example: A Project-based Guide to Building Web Apps with .NET, Blazor WebAssembly, and C#,
7. An Introduction to Building Applications with Blazor: How to get started creating applications using this exciting easy to use Microsoft C# framework,
8. Building a Web App with Blazor and ASP .Net Core: Create a Single Page App with Blazor Server and Entity Framework Core
Мне продолжать?
>>380079
>К примеру, блейзор нигде не использую
Конечно, вкатут у которого рынок ограничен российским авторитетно заявляет что НИГДЕ НЕ ИСПОЛЬЗУЕТСЯ.
Дальше пойдут виляния жопой и НИГДЕ сменится вполне очевидным МАЛО используется.
Его используют, но не в частях приложения с которым взаимодействует большая часть пользователей.
Как простая вебморда для административных задач в виде поднятия нового тенанта и конфигураций он используется
Особо упоротые пишут на Blazor все
Реальность такова, что проще написать фронт на ангуляре, чем ебаться со смесью говна Silverlight + Knockoutjs коим он и является
--------
Годы идут, документация собирается сообществом и пишется максимально просто, доступно и без воды, а вкатуны и дальше жрут говно от АВТОРНЕЙМ вместо того чтобы начинать потреблять оригинальный контент и решать задачи на работе за пару часов, вместо пары дней
Бамп
У меня странная хрень, что при каждом новом экземпляре окна начинает все сильнее тормозить программа.
ну если не подвесил само окно или что-то связанное с ним, то да
>Почему у меня максимум больше 10, а минимум меньше на 10?
шта? на скрине минмах 5-75. о чем ты
Посмотри вывод массива наверху: самое маленькое число там 15, а самое большое 85.
все это ерунда. мы не видим код, который заполняет массив и выводит список. Алсо в выхлопе вообще нет чисел, которые в результате. Предлагаешь нам гадать по частям кода, когда сам с дебагером и полным кодом сидишь...
> мы не видим код, который заполняет массив и выводит список
Держи.
>дебагером
Я начал вкат совсем недавно, и не умею им пользоваться.
убери +'\n' - он тебе левые числа в консоли пишет
он твое число суммирует с (int)'\n' и сумму пишетв консоль. И ты видишь то, чего нет в массиве
Выходят новые версии Спринга, но старые всё также можно легко загрузить через мавен. Это не как у Микрософт, где через год они убирают старую версию из всех репозиториев или принудительно обновляют винду, что у тебя всё ломается.
Все книги по Блейзору на английском!
Я заходит на сайт Микрософт и пытался читать документацию, но это справочник, а не учебник. Откуда я знаю какую из 100500 функций в 100500 классов применять?
Книги читаются не пару дней, а месяц минимум. Особо толстые и дольше. Троелсена я читал наверно полгода, потому что книга жутко скучная. Успел в перерыве и по WPF почитать и ASP и даже Скита с Рихтером. Последние кстати гораздо веселее пишут и легче читаются, хоть и материал более сложный.
>где через год они убирают старую версию из всех репозиториев
Да ты заебал уже ныть об этом в треде. Никто ничего не убирает.
Тебе уже наглядно, сука, показывали, что все версии доступны.
Потому что иди нахуй, вот почему.
Всегда завидовал шарпистам, что у них есть \n, \t, когда в бейсике нужно писать vbCrLf или Chr(13) & Chr(10), а оказывается у вас тоже длинные поезда, засоряющие читабельность.
Какой именно файл? Я вообще перетягиваю из проводника какую нибудь картинку или рандомный файл и он автоматом отображается в вижле. Я так туда даже файлы иллюстратора или корела кидаю, чтобы можно было запустить иллюстратор прямо из студии.
А если это какой нибудь класс или интерфейс, то тебе для удобства дают выбрать шаблон. Ты же хочешь не просто пустой текстовый файл, а файл с каким-то начальным блоком кода и xaml шаблонами.
и только в 11 шарпе сделают """
Можно. У делегата можно получить список инвокаторов (или как оно там). Вот только зачем? С чего вдруг у тебя на кнопке вешается не пойми кто кроме ближайшего code-behind в количестве одной штуки?
Обычно дело утечка памяти из-за забытых подписок (из-за чего лично полностью перешел на LifeTime паттерн), но блин не на кнопке же
Кроме базового дотнет нужны ещё инструменты, а они не работают, потому что микрософт перешли на новые. В книге Фримана по АСП 2 используется bower, а сейчас надо всё через libman загружать. И помимо этого куча мелочей не работает.
Так что гладко только на бумаге...
Эволюция есть эволюция. И приемы из асп2 не все применимы в современном асп. Но применимы в асп2. Берешь тогдашнюю студию, тогдашний фреймворк и вперед - все там будет тогдашнее.
>Мам, я не могу найти релевантную информацию и читаю говно мамонта, а потом пытаюсь скампелиравать под новую версию копипасту оттуда, а она не компелироваться, памаги, пачиму мир так жесток
Ты никогда не вкатишься. Разработчик должен уметь адаптироваться к изменению технологию и находить информацию. Почитать книжку и посмотреть видосик для вката не выйдет.
Это не проблема шарпа или какого-то конкретного языка. А совместимости систем. Эта хуйня идет еще с первых терминалов и принтеров. Просто одни делали так, что достаточно подать на устройство одну команду перехода на следующую строку и аппарат сам передвинет каретку вниз и в начало строки. А другие решили, что должно быть две разные команды на спуск вниз и на возврат к началу строки. И естественно создатели разных систем ну никак не могли прийти к одному стандарту и поэтому просто /n сработает у тебя в винде и выдаст хуйню на линухе. И наоборот.
Алсо, всегда можно сделать константу, альяс или еще какую-нибудь хрень предусмотренную языком для сокращения записи.
Еще алсо, если тебе часто приходится форматировать строки подобным образом, то где-то у тебя проеб в архитектуре вывода сообщений. Такое допустимо для лабораторных работ ну или максимум для логов, но не в основном флоу программы.
616x364, 0:12
Нашел одну кастомную подписку. У меня было несколько страниц, которые райзят событие, но это событие изменяет штук десять текстбоксов, причем частота там со скоростью MouseMove.
Видимо каждая новая подписка серьезно влияет на производительность. Мне бы как-то распараллелить теперь запись в текстбоксы. Остались микрофризы при больших скоростях, все работает на грани. Думаю может замерять вектор скорости мыши, прежде чем обновлять или сделать какой-то ограничитель скорости вызова события.
>из-за чего лично полностью перешел на LifeTime паттерн
Надо посмотреть. Меня уже эти подписки начинают пугать.
>Так что гладко только на бумаге...
Ну что я могу сказать. Хуево быть тобой.
Я в свое время вкатывался в Dot.Net Core 3.1 не прочитав ни одной книги, только MSDN и несколько статей. Сейчас вот пилю микросервисы на .net6 вообще не читав никаких статей по нему кроме чейнджлога.
Так что ты либо соберись и учись добывать и обрабатывать информацию, либо это не твое.
>Еще алсо, если тебе часто приходится форматировать строки подобным образом, то где-то у тебя проеб в архитектуре вывода сообщений.
Так я в основном использую в Debug.WriteLine или что-то в этом роде. Никак не могу привыкнуть к отладчику, мне проще логи читать. А точки останова как туман войны.
>Надо посмотреть. Меня уже эти подписки начинают пугать.
Концепция проста. Есть отписки, есть Dispose, но как все это дело не забыть вызвать? Да и когда вызвать? Если мне передали в конструктор IDisposable, и я сам IDisposable, то должен ли я делать Dispose у этой зависимости?
Вот это все решает лайфтайм паттерн. Это когда есть кто-то, кто отвечает за "когда все дропать". Все имеет lifetime токен (типа как CancellationToken только lifetime) и с ним подписываешься и вообще все. И в ус не дуешь кого кому отписывать - за это отвечает тот, кто заведует твоим lifetime. И когда этот кто-то дропнет lifetime, то все умрет и отпишется и задиспозится автоматически
в вебе попроще. там есть DI который используется как Lifetime Manager - "пришел запрос, родили scope, в конце дропнули и все рады"
В десктопе же все живет, рождается, умирает хз как. И немощи
DI явно не хватает. Нужен не scope примитив, а мощный тулз
Поэтому я использую вот это
https://www.youtube.com/watch?v=Sq_h5bVWJ0k
У меня вьюмодельки, окна, контролы в WPF - все существует в каком то лайфтайме или являются холдером онного. И не используются слабые события, потому что можно смело подписываться сильной подпиской и не бояться утечек - подписка умрет вместе со мной, как только мой лайфтайм (лайфтайм моей вьюмодели) дропнут - это может быть родительская вьюмодель, workspace контрол какой нибудь или целое окно
хотя конечно WPF к этому предрасположен, как мужик к деторождению, но все же живу как то.
>Хорошо знать языки
>Что такое out, что такое readonly
Инфоцыгане такие инфоцыгане. Это не основная тема видео, но чет проиграл.
Нет, просто микрософты своровали СР/М-86 и назвали МС-ДОС, но ума не хватило сделать как в юниксах.
Ну идея проста. та же самая идея (и реализация) в - CancellationToken-ах. Разница только в семантике - токены отмены привычно отменяют действия, а токены лайфтайма - отменяют все. Как то подписываться с CancellationToken не делают, а подписка с lifetime уже норм. Но грань очень очень тонкая. Настолько, что мелкие в своем асп юзают CancellationToken как ApplicationLifetime события - от чего мозг плывет ибо от событий ожидаешь....событий.
>>381245
ну работать же, а не жарить его )
Нравится, это конечно хорошо, но вопрос: а что в итоге-то можно делать со знанием шарпа? Ест-но никто меня в контору не позовёт сразу на зп, игоры на юнити делаются не за месяц.
Я имею в виду, что какой-нибудь жаба скриптер может не сдохнуть с голоду, потому что всегда кому-нибудь нужно будет сделать сайт. А как подрабатывают шарписты?
>А как подрабатывают шарписты?
Шарп - это про энтерпрайз. То есть прямая противоположность подрабатыванию. Так что если шарписту зачем-то хочется подрабатывать - то он делает это как все: учит js, ноду, реакт? и пиздует на фриланс-биржу.
> Степан Береговой сказал
Ну ты и еблан!
Поебать что сказал рандомный инфоцыган с ютуба. Его задача, чтобы ты ему просмотр принёс, лайк и подписку с колокольчиком. Ты принёс, молодец.
Кэп, я ньюфаг, ёпт. Я не ебу какие заказы есть на шарпе для подработки, я поэтому и спрашиваю в профильном треде. Для меня шарп это пока что какие-то приложения для винды, юнити и вроде что-то там с бэкендом делают. Я даже специально залез на коворк и при поиске шарпа там 99% объявлений: сделаю десктопное приложение, и 1% - сделаю игру на юнити/проконсультирую. Покажи какие услуги ищут у шарпистов, будь ласка.
>Я не ебу какие заказы есть на шарпе для подработки
Никаких нет. Это язык для создания огромных бэкендов командами из десятков человек. От кого конкретно ты собрался подработку получать? Максимум, что тебе светит найти - лабу какому-нибудь студенту за 300 рублей сделать. Если очень сильно повезет.
>шарп это пока что какие-то приложения для винды, юнити и вроде что-то там с бэкендом делают.
Такие себе у тебя представления. 85% работы на шарпе - создание и поддержка монолитов на ASP.NET. Юнити - процентов 5, а всякие приложения для винды, для мобилок и прочего - еще процента 3 суммарно.
И добавь еще сюда то, что C# - он в основном на западном рынке используется, в России с ним сейчас будет вдвойне хуже. У нас тут люди больше js, php и java для бэка используют.
Увы, у нас нечего ловить. Знание англ + скил и западные биржи (правда щас с этим жопца по понятным причинам)
И вообще никто не заставляет зацикливаться на одном языке. выучи несколько. В итоге и останешься на одном, если не перфекционист
Десигнер. Делаю для себя плагины и микрописечки, даже в мыслях не было использовать шарп как единственный инструмент для заработка. Мне кажется, чтобы зарабатывать чисто на шарпе, это надо быть узкоспециализированным сверхбогом. Вообще, даже у нас в десигне, умение разбираться чисто в своей области уже никого не впечатляет — либо надо учить что-то смежное, либо надо задрачивать область до блеска. Иначе будешь сосать бибу за 10к в месяц в рогах и копытах, на уровне теть Глаш, условно "знающих фотошоп".
Ты блять программирование учи, блять, а не язык, блять! Паттерны учи, СОЛИДы! Зная это всё ты будешь просто брать новый модный молодёжный язык и писать на нём без задней мысли, даже не уча.
Вот я хочу сделать примерно следующее. Есть некая сущность с которой по разному можно взаимодействовать: читать из нее что-то, писать, вызывать экшоны. Допустим это некое устройство. Мобилка, например: можем посмотреть ФС, можем IMEI посмотреть, можем время посмотреть, можем запустить приложение какое-то, посмотреть СМСки пользователя, можем реагировать на действия пользователя и регистрировать их, можем включить-выключить фонарик.
Ну, собственно, сейчас у меня есть некая сущность которая описывает вообще все что можно делать с таким вот устройтвом. И вот в контексте современных устройств - там дохуя всего. Не оч удобно.
Так вот, что я хочу. Я хочу немного абстрагироваться и дать себе возможность настроить что я хочу видеть, как часто что-то опрашивать и сохранять для статистики.
Ну, собственно, что я придумал: Сущность Page - некий шаблон странички, которую я буду уже фронтендом рисовать. Суность Block - это карточка нужная для позиционирования внутри Page, по сути просто имя-описание блока, состояние закрыто-открыто и все. Ну и Widget - сущность с каким-то элементом управления/отображения данных, допустим - просто индикатор: вкл/выкл с горящей иконкой; табличка с какими-то элементами, допустим логи работы с временем, типом сообщения, сообщением; график для каких-то исторических измеряемых величин; текстовый элемент в который можно поместить допустим последнее считанное значение.
Ну дык вот. Я не совсем понимаю как это вместе связать. До того как я придумал вот эту вот штуку с Page и прочим - были сущности Device, DeviceType, DeviceTypeTemplate, DataObject, DeviceTemplateDataObject, DeveceDataObject, типа тип - это просто описание устройства, шаблон - связывает некие операции и данные с типом, чтобы можно было при добавлении устройства подтянуть нужное, а потом уже у устройства поудалять-подобавлять нужное. А теперь я хочу оставить это же, но при этом сделать типа: Создать страничку, появляется пустая страничка, на ней я надобавлял блоков, надобавлял виджетов в блоки, и потом могу переключать устройства и чтобы страничка на основе этого подтягивала нужные данные. Но вот как это вот связать я чет не понимаю(((
Вот я хочу сделать примерно следующее. Есть некая сущность с которой по разному можно взаимодействовать: читать из нее что-то, писать, вызывать экшоны. Допустим это некое устройство. Мобилка, например: можем посмотреть ФС, можем IMEI посмотреть, можем время посмотреть, можем запустить приложение какое-то, посмотреть СМСки пользователя, можем реагировать на действия пользователя и регистрировать их, можем включить-выключить фонарик.
Ну, собственно, сейчас у меня есть некая сущность которая описывает вообще все что можно делать с таким вот устройтвом. И вот в контексте современных устройств - там дохуя всего. Не оч удобно.
Так вот, что я хочу. Я хочу немного абстрагироваться и дать себе возможность настроить что я хочу видеть, как часто что-то опрашивать и сохранять для статистики.
Ну, собственно, что я придумал: Сущность Page - некий шаблон странички, которую я буду уже фронтендом рисовать. Суность Block - это карточка нужная для позиционирования внутри Page, по сути просто имя-описание блока, состояние закрыто-открыто и все. Ну и Widget - сущность с каким-то элементом управления/отображения данных, допустим - просто индикатор: вкл/выкл с горящей иконкой; табличка с какими-то элементами, допустим логи работы с временем, типом сообщения, сообщением; график для каких-то исторических измеряемых величин; текстовый элемент в который можно поместить допустим последнее считанное значение.
Ну дык вот. Я не совсем понимаю как это вместе связать. До того как я придумал вот эту вот штуку с Page и прочим - были сущности Device, DeviceType, DeviceTypeTemplate, DataObject, DeviceTemplateDataObject, DeveceDataObject, типа тип - это просто описание устройства, шаблон - связывает некие операции и данные с типом, чтобы можно было при добавлении устройства подтянуть нужное, а потом уже у устройства поудалять-подобавлять нужное. А теперь я хочу оставить это же, но при этом сделать типа: Создать страничку, появляется пустая страничка, на ней я надобавлял блоков, надобавлял виджетов в блоки, и потом могу переключать устройства и чтобы страничка на основе этого подтягивала нужные данные. Но вот как это вот связать я чет не понимаю(((
А меня потом возьмут на работу на удалёнку с теоретическими знаниями паттернов и солидов, но без знания шарпа и асп.нет?
Как будто на один язык надо сил меньше. В случае с одним языком тебе знать надо не просто профессионально, а суперпрофессионально. В сумме это то же количество затраченной энергии, только шанс успеха понижается.
Я про то и говорю, что спрашивают знание конкретных языков: сишарпа или джавы, и технологий: асп.нет или спринг.
>Получается я зря учу сишарп и надо было всё-таки дальше учить джаву?
Если из России - то js и php учи, в новой то реальности. А может и вообще си, если плохо все пойдет, на заводе то всем похуй на твое знание веб-фреймворков.
>>381376
>Ты блять программирование учи, блять, а не язык, блять! Паттерны учи, СОЛИДы!
Дерьмовый совет. Чтобы учить программирование - надо сначала на работу устроиться, программирование - это ремесло, к которому приобщаться нужно, нельзя книжек начитаться, курсов насмотреться - и стать программистом. Тут обратная связь нужна, без коллектива зрелых программистов - никак. А чтобы устроиться на работу - нужны не солиды и паттерны, нужен язык. То, что тебя по солиду с паттернами спросят на собеседовании - выучивается за неделю, кишки платформы - за две. А вот по синтаксису тебя конкретно ебать будут, именно его знание решит, станешь ты программистом или нет. Потому что на твое непонимание солида забьют хуй, а вот неспособность скомпилировать в голове самый хитровыебанный и редковстречающийся код - никогда.
Ничего не спасает, ни хайд, ни коллапс.
Не бывает джуниоров на удаленке, тебя в любом случае на нее не возьмут.
В принципе пока писал - подумал - учитывая что у операции и данные - отдельно - можно их связать с виджетами. А сами странички не привязывать ни к чему, и на фронтенде, который будет на Angular - запрашивать саму страничку, а потом каждому компоненту виджета передавать выбранное устройство - и он с сервера уже это будет тянуть. Наверное так будет норм. Но я пока не уверен.
Для наглядности - нарисовал что я примерно хочу.
>тебе знать надо не просто профессионально, а суперпрофессионально
зачем? просто про, но тупо знать нужно меньше, чем держать про нескольких языков.
>>381389
>Чтобы учить программирование - надо сначала на работу устроиться
чтоб научиться стрелять - нужно сразу на войну. А плавать - сразу в бурлящий водоворот кидать. Задерживать дыхание - выбросить в космос, там научишься ))
имхо базовые навыки - умение мыслить в рамках парадигм и способность связывать одно с другим и общее понимание где чего как, то есть форматировать мозг под базовые чего как. Это если не в одном языке сидишь
Пример - вот я понимаю async/await и не понимаю "как можно не понимать такое простое как оно работает". А ведь когда я впервые столкнулся с этим подходом (а это был шарп, на котором я писал с момента рождения шарпа), то у меня были сложности с пониманием. Потому что НЕПРИВЫЧНО
Туда же ФП, разные паттерны, солиды. Это когда освоишь "тьфу хули там сложного то", а поначалу мозг не отформатирован. Но упарываться не нужно - главное форматирование.
И тот же я никак не могу освоить толком реактивное программирование. Я легко его читаю, но мне трудно на нем писать, сложно думать в этой парадигме. Я себя заставлю, читаю чужие исходники (правда понимаю, что они еще меньше думают в этой парадигме чем я) но идет туго.
>Пример - вот я понимаю async/await и не понимаю "как можно не понимать такое простое как оно работает"
То, что ты понимаешь как работает, не означает ничего. Оно понятно до тех пор, пока работа чего-то очевидного начинает работать не так, как ожидаешь — вот тогда и приходит осознание, что на самом деле ты ничего не понимаешь.
Если я запустил несколько асинхронных функций, каждая из которых обращается к общей переменной, функции мешают друг другу?
Если ты запустил их на пуле и никакой синхронизации их выполнения, то у тебя многопоточный доступ
На этом видеориле >>381213 у меня при нажатии кнопки мыши, срабатывает две операции. Первая вслед за курсором двигает рамку и меняет цвет. Вторая меняет данные в текстбоксах.
Для первой важна высокая частота итераций, чтобы все выглядело плавно (каждые 5 тиков), а для второй это не важно, достаточно паузы в 100-200 тиков.
И еще левая часть это интегрированная страница, сперва там отрабатывается всё: определяются координаты, вычисляется цвет, перекрашивается все что нужно, а потом вызывает событие, которое ловит блок справа и переписывает данные в текстовой части. И правая часть самая прожорливая.
Я уж и асинк использовал в связке с вейт ол, но помогло отчасти — происходят бесючие микрофризы с непредсказуемой частотой.
Нет, вообще не знал. Шел по цепочке Basic->Asm->C->Delphi->C#, хорошо шарил за алгоритмы. Потом просто перекатился на .net Core и тогда же и стал учить Asp.Net Core.
Че там в нем до кора было, вообще в душе не ебу и не собираюсь узнавать, т.к. в принципе не собираюсь с таким легаси работать.
>А как подрабатывают шарписты?
Микросервисы пилю (чистый бэк). Неделя-две работы - соточка.
Но на такую подработку только по хорошему знакомству и рекомендациям берут.
>там 99% объявлений: сделаю десктопное приложение,
Это говорит только о том, что десктопщики нахуй никому не сдались сейчас, т.к. десктоп по сути мертв.
>>381328
>что C# - он в основном на западном рынке используется, в России с ним сейчас будет вдвойне хуже.
Pizdesh i provocation. Все нормально с ним на местном рынке. Да вакансий меньше раза в два чем на джаву, но во в первых - этого более чем достаточно, а во вторых претендентов тоже в два раза меньше - т.е. меньше конкуренция.
А после выхода .net 6-го он стал той самой писечкой на которой все хотят пилить монолиты и микросервисы для своих стартапов. А так как сейчас время возможностей, то и запросов на такое становится больше. Джависты охуевшие и поднимать все это на джавве - как говна поесть. А у шарпистов пока еще относительно адекватный ценник (делать-то на шарпах тоже самое, что и на жабе, намного легче) и новенький оптимизированный стек, поэтому-то все их и хотят.
Но опять же. Вкатунам тут ничего не светит, хотят туда опытных и матерых. Если сможешь таким за год стать, то может быть и ухватишь свой кусок.
Алсо, нытье вроде "Бла-бла, после тех самых событий все изменилось, майкрософт ушел - всем пиздец" - хуита голима. Они никогда и не присутствовали в России от слова совсем, а во вторых не изменилось н-и-х-у-я.
Да.
Что-то Типа:
DateTime last;
object _syncRoot = new();
void OnZalupa(object sender, EventArgs a){
lock(_syncRoot){
if(DateTime.Now - last < TimeSpan.FromDay(365)){
return;
}
last = DateTime.Now;
}
...остальная хуйня.
}
Ты троллишь так? Мне просто сложно поверить, что человек в 2022 году будет такой вопрос задавать.
Не, ну это ракетостроение. Так-то я и сам сделал.
или Task.Delay с отменой можно свелосипедить
как раз это не пчелы
событие может закончиться раньше чем сработает правило и в итоге будет неверное значение.
Кто там новую шапку хотел - ваш час пробил.
Увы, я не могу менять шапку
по НОВОЙ шапке, ибо эта уже устарела
>Правда ли сейчас и в ближайшей перспективе джуну без опыта работу найти практически нереально?
Это парадигма была актуальна год назад. Сейчас джуну даже с опытом в год уже хрен устроишься. Берут только от мидлов и выше.
>есть какие-то хитрожопые пути?
Нет. Только учиться, зарабатывать опыт, делать проекты и пытаться вкатиться. Есть вероятность, что попадешь в контору, которая вот именно сейчас не против принять джуна на развитие.
Наверно в первом случае идет речь о net.Core — очередная попытка в кроссплатформенность. Если ты не собираешься запускать приложение на мобильном шиндовс или линуксе, то юзай фреймворк.
Если ты думаешь "да, конечно же хочу!", то не забывай, что за универсальностью следуют ограничения и закатыватель губы в комплекте. Некоторые библиотеки не коннектятся, да и твои могут тоже, если они ранее были написаны под нет фреймфорк. Подключить какую нибудь либу, типа Drawing2d не получится. Еще не получалось юзать ресурсы.
Но все приходит на смену старым библиотекам, просто нужно быть готовым, что подсказка на стак оверфлоу может быть нерабочей. А ресурсы я уже не помню когда юзал — сохраняю в реестр.
Короче. Есть устаревшая проторенная дорожка на net framework, а есть новая менее неизведанная и полная приключений net.Core. По какой сам пойдешь, на какую глаз положишь? Пока ты будешь изучать net.core, это говно устареет и уже все будут дрочить вовсю на web
>Все нормально с ним на местном рынке.
>Да вакансий меньше раза в два чем на джаву
Нет. Даже до спецоперации вакансий было раза в 3 меньше, чем на джаве, а потом - их количество упало еще раза в 3. А джуновских вакансий - и вовсе раз в 5 меньше стало, чем до войны.
>А после выхода .net 6-го он стал той самой писечкой на которой все хотят пилить монолиты и микросервисы для своих стартапов.
Микросервисы никто на нем не пилит, платформа для этого неудобна, ты вместо микросервисов будешь писать на дотнете конфигурации для конфигураций конфигураторов. Монолиты для стартапов - такое есть. В США. А мы не в США. В России у стартапа в лучшем случае монолит на ноде, если модно, стильно молодежно. А если немодно - то пхп и жава.
>Джависты охуевшие и поднимать все это на джавве - как говна поесть. А у шарпистов пока еще относительно адекватный ценник (делать-то на шарпах тоже самое, что и на жабе, намного легче) и новенький оптимизированный стек
А бизнесу похуй, что там по ценнику и простоте. Бизнес знает, что если хочешь поддерживаемый код - надо брать жаву, стандарт в отрасли, изученный вдоль и поперек, у которого все подводные камни известны и для всех подводных камней написаны костыли.
>Алсо, нытье вроде "Бла-бла, после тех самых событий все изменилось, майкрософт ушел - всем пиздец" - хуита голима. Они никогда и не присутствовали в России от слова совсем, а во вторых не изменилось н-и-х-у-я.
Причем тут майкрософт? Ушли бодишопы (или просто прекратили наем), а это половина рынка дотнета в России и 80% джуниорских вакансий.
одно для дотнета 5-6 (которое выросло из кор)
второе для легаси .нет 4.8, которое старый фреймворк
>на дотнете конфигурации для конфигураций конфигураторов. Монолиты для стартапов - такое есть
ты попутал со старым дотнетом что ли. чего там неудобного то. новый дотнет активно задвигается как микросервисы. все для этого есть (хотя и на старом все для этого было просто микросервисы очень спорно когда нужны)
>новый дотнет активно задвигается как микросервисы.
Нет, это не так. Новый дотнет немного оптимизировали под написание условных лямбд в авс и прочий серверлесс, а вот микросервисы - нихуя. Мало того, что они ни разу не "микро" выходят, так и трупута на них нормального из коробки не получишь, не попердолившись с конфигурациями конфигураций предварительно.
Я конечно мог бы координату хита смещать для своих расчетов, но проблема в том, что у меня криво срабатывают события типа MouseLeave.
И что ты предлагаешь? Учить джаву?
Все, нашел. Оказывается в редакторе студии есть специальный инструмент, который устанавливает координаты хотспота в .CUR.
Но теперь другой вопрос. XAML в упор отказывается видеть локальный адрес файла, хотя в коде вот это работает
StreamResourceInfo info = Application.GetResourceStream(New Uri("/ResourceFiles/CursorTest.cur", UriKind.Relative));
H_Ring.Cursor = New System.Windows.Input.Cursor(info.Stream);
А вот неработающий код в XAML (Ошибка: не удается найти ресурс)
<Page.Resources>
<Cursor x:Key="TestCursor">ResourceFiles/CursorTest.cur</Cursor>
</Page.Resources>
Чому так?
никуда не делся. Проекты из .нет4.8 работают и под 5-6
Так что разница только в рантайме, что весомо, но если у тебя легаси, то выхода нет (ну возможно и в формате файла csproj (не хочу проверять))
>Микросервисы никто на нем не пилит
Ой, да ладно. Нам вон с корешем на все лето работы накидали этих микросервисов пилить на .net6. За каждый по сотке на человека. Если после основной работы по вечерам где-то по час...два уделять времени на это то на каждый по неделе, максимум две уходит (ну т.е. фуллтайма дня 3..4 максимум. И это мы даже еще не мидлы.
> дотнете конфигурации для конфигураций конфигураторов
Я хуй знает на каком ты там дотнете пишешь, что такой хуйней страдать приходится. Ни разу больше чем стандартной конфигурации для моделей ничего не прописывал.
Создаю имедж, прикрепляю из тех же ресурсов и все норм, у курсора ошибка. И странный формат, нет Source.
Кроссплатформа по макросовтовски.
Сначала да, потом нет и вообще такого никогда не было. Мы даже приставку Core выпилим.
WPF - Windows Presentation Foundation. В названии явно указано предназначение. Кор без гуи должен быть кроссплатформенным. А WPF, базирующееся на кор просто для того, чтобы не поддерживать старое.
>Кор без гуи должен быть кроссплатформенным.
Ахаха, линукс навечно без гуя, консольки хватит.
Ни как. Микрософт его убрали.
> which is not easy
Для трансконтинентальной корпорации это нот изи. Хотя куча индюков пилит авалонии и этоформсы тока в путь. Ясно-понятно.
>Для трансконтинентальной корпорации это нот изи.
Анриал энжин 4 давно под кучу платформ игры конвертирует — просто выбираешь целевую платформу и все. А ведь в игре интерфейс это всего лишь десятая часть всех задач.
>А правда, что шарпистов заставляют быть фуллстеками?
Правда
мимо бывший WPF, заставили быть фуллстеком в вебе
Как делаю:
Создаю TcpClient
Вытягиваю из него NetworkStream
Из стрима создаю StreamReader, StreamWriter
writer.WriteLine(request)
writer.Flush()
reader.DiscardBufferedData()
var response = reader.ReadToEnd()
Потом пробегаю регуляркой и вытягиваю число.
Так вот, проблема в том, что иногда приходит что-то вроде ,.,.,. 69
А запросить в следующий раз - придёт ,.,.,. 69420.. .
И, вероятно, нормальным ответом может быть просто 69420
Как вообще такую херню нормально обработать?
они уже вернули в обновах последней студии. добавили галку которую нужно поставить при создании проекта.
ну ты же понимаешь что ты не привел кода сервера, который это самое число получает, чтобы потом вернуть.
Я бы так делал...
>в игре интерфейс
В игре нет интерфейса, там только картинки, которые движок и так рисует. Такие рисованые интерфейсы давно есть и без твоих ссаных унрылов, imgui и подобия. Только мало кому нужны такие фейки, только в те же игрульки встраивать в основном.
Типа в WPF не картинки. Скажи, какой элемент я не смогу реализовать в анриале.
Ну, попробуй на анриале сделать древовидный список с возможностью драг-н-дропа, при этом чтобы элемент списка мог быть кастомным, т.е. тута картинка, тама - только текст, а вот тута - кнопка.
В анриале есть даже нода веббраузера. Но я так и не понял в чем отличие. Парсер XML? Или что?
>Ну, попробуй на анриале сделать древовидный список с возможностью драг-н-дропа
Вся база для этого есть. Нет готовой функции, но я не вижу здесь чего-то сложного. Нарисовать графическую фигуру можно, вывести текст можно, вывести растровую иконку можно. У всего есть хитбокс, события и логика.
Кто все? Пара новичков (типа меня), которые очевидно делают запросы чаще остальных ИТТ.
Я вообще пишу плагин для приложения, мне веб не поможет.
Ну, я как раз диплом на крестах, питоне и гошке защитил, теперь изучаю шарп для трудоустройства на первую работу. Думаю за 2 недельки осилю на джуна.
>Изучаю язык по книге Прайса М., C# 9 и .Net 5.0, насколько она актуальна? И насколько критично, что в книге используется VS Code, а не полноценное IDE?
Пиздец...
И сколько уже изучил?
Потому что ты не умеешь гуглить.
А ты сам-то что хочешь? Если тебя прям тошнит от жса и штмл - тебе в WPF. Если терпимо - в ASP. Уровень ЗП примерно одинаковый, но работы больше в АСП.
Что нравится туда и копай.
>Говорят, что с работой туго. Многие перекатываются в джаву.
Нихуя не туго. Если ты совсем-совсем без опыта, то да. Но с год+ опыта уже куда угодно устроишься
Устроиться на работу. На завод например поддерживать легаси. Я в резюме написал что у меня 6 месяцев опыта. Просто напиздел чтобы устроиться хоть куда-то
Причём тут анрил энжин блеать?
тоже были по поводу этого мысли, думаю примерно так и будет
>Советую вкатываться в MAUI пока не поздно.
Тоже самое вопили про WPF, в итоге это говно стало НИНУЖНЫМ до того, как я успел вкатиться. Через месяц мы узнаем, что не все так однозначно, есть НЮАНСЫ, поэтому у нас будет десять вариаций MAUI, каждая не работает, поэтому мы все переосмыслили и выкатываем новое творение KHui, оно сырое, спешите откушать пока не поздно, ссылочка в описании.
Ты заебал, иди нахуй. Я после 6 месяцев на заводе устроился на 50к
>я не думаю, что майки будут наступать на те же грабли, что и прошлый раз
>C# 1 - не кроссплатформенное говнище только под винду
>MAUI 1 - не кроссплатформенное говнище только под винду
ебало майков которые непонимают чому не выстрелило имагине?
Хорошо, ебло, специально для тебя - шарю в С++ на том уровне, когда способен высрать рабочую хуйню которая хотя бы конпелироваться будет.
Так пиздеть надо подготовившись
Скоро и .нет запретят?
Что надо скачать заранее, чтоб с# работал на компе у меня?
VPN
>>383632
Наверно нужно. Если проект чисто апишный, то не будет вью части, а модели и контроллеры останутся.
Во-первых, JScript != JavaScript. Во-вторых, JScript != JScript.NET. В-Третьих, нет С# никак не связан ни с JScript ни с JScript.NET (ну кроме того, что оба под .net clr), картинку рисовал дебич.
Учитывая, как яростно они впихивает в Винду Линукс и андроид рантайм - хз конечно
я уже закрыл сайт тот
потому что не выглядит нативным для каждой из систем, слабая интеграция (то есть выглядит как говно и говном является)
А для программиста имеет кучу ограничений по созданию если гуи общий. Либо умноженной мороки программирования своего гуи в каждой платформе.
Ещё дико бесит что теперь для всех проектов вкладка параметров проекта содержит разные параметры - жму properties и каждый раз как в первый раз, куча каких-то строк, чуть ли не xml заставляют редактировать в документации по MAUI даже пишут что надо копипастить в xml строки, пиздец какой-то.
А ещё больше очко горит когда либы майков собираются через мокропиську nuke.
Нахуй они это делают? С каждой версией всё пиздецовее становится процесс сборки, а билды из одного экзешника превращаются в кучу файлов. Недавно писал консольную софтину и оно собирает её в два файла даже при выборе single-file publish - exe и dll с таким же именем, без dll экзешник не запускался...
Ну бля, а если насрать на натив и рисовать везде одно и тоже? Может я полноэкранку хочу ебануть?
>Через месяц мы узнаем, что не все так однозначно, есть НЮАНСЫ, поэтому у нас будет десять вариаций MAUI
Не знаю, вроде весьма однозначно: линукса нет, а интерфейс описывается ксамелом. Мертворожденный кал, одним словом.
>>383468
>чому жс и пхп, если на ебаный петон большо всего вакансий?
Это в какой такой вселенной? Или они упоминание слов в вакансиях девопсов посчитали? Питон - это дно язык с точки зрения рынка труда, не удивлюсь, если даже F#-перских вакансий больше, чем питоновских.
>>383489
>Что надо скачать заранее, чтоб с# работал на компе у меня?
Ничего. Дотнет заопенсорсился. Даже если майки совсем ебанутся, и начнут русские айпишники на гитхабе блокировать - ты в тот же день сможешь зайти в этот тред и скачать по ссылке анонов все, что нужно.
>>383765
>C# медленнее C, а Жава - быстрее C#
C# сегодня намного быстрее жавы, а если заморочиться с аллокейшен-фри кодом - то почти догоняет Си.
>>383844
>потому что не выглядит нативным для каждой из систем, слабая интеграция (то есть выглядит как говно и говном является)
Ты из 20-го века капчуешь? Сегодня нет никакой необходимости использовать нативный гуй, можно без проблем полностью рисовать кастомный.
>оно собирает её в два файла даже при выборе single-file publish
>To embed those files for extraction and get exactly one output file, like in .NET Core 3.x, set the property IncludeNativeLibrariesForSelfExtract to true.
> # сегодня намного быстрее жавы
Что-то в бенчмарках веб-серверов джава традиционно ебёт шарп даже не напрягаясь.
> почти догоняет Си
Шарп может только догнать джаву по потреблению памяти. В гей-бенчмарке .net 6 с AOT дал прирост в десятки процентов, а отставание от сишки всё ещё в разы. Говорить про скорость, когда шарп выступает скриптовым языком для вызова нативных библиотек - это дикость, вон питон тоже так может. Когда дело доходит до реализации алгоритмов на чистом шарпе, так сразу получаем потребление памяти гигабайтами и скорость как у дженерик параши уровня js.
>В гей-бенчмарке .net 6 с AOT дал прирост в десятки процентов
Причем тут AOT, болезненный? Ты там в своих бенчмарках скорость компиляции измеряешь?
>Говорить про скорость, когда шарп выступает скриптовым языком для вызова нативных библиотек
Каких таких нативных библиотек? Что ты там с шарпом делаешь, больной ублюдок?
>Когда дело доходит до реализации алгоритмов на чистом шарпе, так сразу получаем потребление памяти гигабайтами и скорость как у дженерик параши уровня js.
Фантазии фантазера. По потреблению памяти на алгоритмах - разница чисто в размере среды выполнения, какие такие гигабайты? По скорости, если в твоих алгоритмах переиспользовать что переиспользуется, все остальное заменив стракт рефами и спанами - то разница с СИ будет процентов в 20 от силы. Или просто дауны как всегда, собрали приложение со сборщиком мусора в сервер-моде, и потом показывают, мол смотрите, он сожрал всю память?
>EF сохраняет сущности в порядке их Id, а не в порядке их добавления через Add
А ты знал, что в такие проблемы ебут мозг только тем даунам, которые до сих пор в 2К22 году используют упорядоченные Id-шники, вместо GUID-ов.
Да рисуй что хочешь. У каждого свой путь. Авалония рисует сама, МАУИ пытается в натив бэкенды, Я про то, что кроссплатформенные вещи из-за своего "кросс" являют собой абстракцию (как ORM над базами данных), а значит всегда меньше возможностей чем натив (из за попыток усидеть на всех стульях).
>>383934
>Сегодня нет никакой необходимости использовать нативный гуй, можно без проблем полностью рисовать кастомный.
А когда нельзя было рисовать кастомный? Всегда можно было. Приложения с хтмл гуи писали и до рождения шарпа.
И от того, что стало модно использовать кросс приложения в виде говноэлектронов и тому подобного - это не значит что это нормально.
просто у пользователя выбора нет и приходится жрать, что дают.
А прикиньте, как ждунам сейчас, по 3к откликов на вакансию.
В России HTML ПРОГРАММИСТОМ(!!1!) проще устроиться, чем дотнетчиком.
HTML программист == .NET разработчик
Но среди изучаемых материалов я вижу овердохуя А.
Таки мне не правильно кажется?
И как всё же будет "лучше"?
>Это в какой такой вселенной? Или они упоминание слов в вакансиях девопсов посчитали? Питон - это дно язык с точки зрения рынка труда, не удивлюсь, если даже F#-перских вакансий больше, чем питоновских.
Ну как-то так.
У тебя туннельное зрение, ты акцентировал внимание на одной проблеме, не замечая, как вылезают другие, причем ирония ситуации в том, что именно они руинят все плюсы, к которым ты стремишься.
Во-первых непонятно, зачем в B-версии нужен лист, когда уже есть словари, ну то есть понятно — универсальность, но ты создал дублирование информации, что при большом количестве итемов как бы тоже начинает становиться существенным минусом. У тебя в 3 раза больше объема.
На самом деле, когда ты делаешь что-то универсальное, то обязательно будет где-то посос, тут остается просто узнать где именно. Отсюда следует вывод, почему есть отдельно лист и отдельно список, почему не сделали как у тебя универсально. Поэтому пришли к горькой но рабочей истине: зависимости от задачи, которая будет встречаться чаще, используется тот или иной тип.
Ты должен разделить задачу на то, что должно использоваться чаще всего, и на то, что должно использоваться иногда. Вариант A этому удовлетворяет: на первом месте там список, и если ВДРУГ нужно обратиться по имени, то мы используем соответствующее свойство. А если в 95% случаев нам нужно обращаться по ключу итема, то мы делаем словарь базой и перебором возвращаем индекс или массив (как у тебя, ток нахер выкинуть лист)
Пиздишь
нск это новосибирск или что?
>(как у тебя, ток нахер выкинуть лист)
Ну и два словаря это тоже как бы не тоже. И вообще у тебя словари обращаются в сторонний лист, что тоже не оче быстро. Бенчмарком тестировал скорость?
В листах и словарях дублируются ссылки на объекты Item, то есть потребление памяти сравнительно небольшое, но при этом, хоть и ценой большЕго потребления памяти, но вариант В будет быстрее А, когда итемов станет овер9000.
>(как у тебя, ток нахер выкинуть лист)
Наверно это будет оптимальный вариант.
Я это накидал для примера, я пока и так охуеваю от постоянного перебора вариантов "как сделать" и попыток обдумать, что же лучше.
>>384325
>И вообще у тебя словари обращаются в сторонний лист
Зачем? Я ж в словари ссылки на объект добавлю к каждому ключу и всё.
А ячейка со ссылкой что, занимает ноль места в памяти? При овер9000 она тоже будет занимать много места.
Твой подход тоже хорош, просто это классическое жонглирование недостатками. У тебя быстрый доступ по ключу, но минус в памяти. В варианте А уклон на быстрый доступ по индексу или взятию всего списка. И совершенно точно не будет так, что плюсы будут везде.
>я пока и так охуеваю от постоянного перебора вариантов "как сделать" и попыток обдумать, что же лучше.
Сейм щит. Тоже пытался сделать всё и для всего сразу. Но потом начал пользоваться своей же функцией и соснул. С тех пор определяю какая часть данных важнее всего, ее ставлю во главу угла, а все остальное уже идет как получится. Если это перебор итемов, то будет перебор.
>Наверно это будет оптимальный вариант.
Кек, а ты попробуй. У тебя щас будет ДИЛЕММА между name и id.
Насколько я знаю, когда я пользовался скриптами в других программах, типа фотошопа или корела, там просто есть правило — получать итем по ID. А все остальное, типа имени, цвета — это все уже берется из самого объекта. Это сука база. И поэтому, если нам надо было найти имя объекта, мы перебирали по ID или просто список, и уже в каждом итеме узнавали его имя и сравнивали с искомым значением. И любая функция, любое свойство завязано на ID. И нет, нет там плохой производительности, если все обращаются по ID.
А твой подход, он как бы добавляет анархии, и тогда все последующие функции, которые будут работать с твоим списком, будут делаться по принципу кто в лес, кто по дрова. И я уже вангую, что ты будешь делать миллиард перегузок для каждого случая.
>.Where(element=> list.Contains(element.Id)
Не хочется чёт в if до запроса проверять, придётся в else запрос дублировать. ? не сработает
Нагуглил
Стоит ли сейчас снижать ожидаемый уровень за до за жрат 1к usd? Или есть надежда что ситуация улучшится в ближайшие месяцы?
Или может стоит укатить на во фронт и учить ангуляр/реакт?
мимо дебил к дерьмовым опытом: год вин-форм + год asp фреймворка под iis
тригернуть нормальный GETзапрос
И что? EF так же отсортирует сущности перед добавлением, хоть инт, хоть гуид.
>упорядоченные Id-шники, вместо GUID-ов.
Мань, PK из гуидов тоже будет отсортирован в базе или ты предлагаешь базе каждый раз фулскан делать для поиска записи по PK? Лол. И кстати из за это для PK используют специальные генераторы guid'овб которые генерируют их в порядке увеличения, чтобы при каждой вставке не перестраивать весь индекс, как если использовать полностью рандрмный гуид. Совсем двачер смузи обдолбался.
>Но среди изучаемых материалов я вижу овердохуя А.
1. На практике нет никакого большого количества айтемов, а твой второй кейс еще нужно обмазывать кодом для обеспечения консистентности.
2. Если обмазать кодом для обеспечения консистентности второй кейс - то это называется индексом.
3. На практике, когда подобные операции выполняются на большом количестве данных - эти данные лежат в базе данных. Именно поэтому, как несложно догадаться, базы данных и называются базами данных.
Собственно, из всего этого и следует ответ на твой вопрос - ты видишь первый кейс потому, что на практике у тебя будет не лист, на практике у тебя будет контекст базы данных, и код, описанный в первом кейсе, будет ормкой превращаться в запрос к базе данных. А там уже, на стороне базы данных, будет выполняться что-то похожее на твой код из второго кейса, что тебе абсолютно не нужно писать самому.
>Бля, если человек за 2 годы опыта 1к$ просить хочет, сколько околовкатуну ожидать? МРОТ?
На отечественном рынке дотнета? Примерно столько же. Только это вкатун штуку баксов платить должен, чтобы его на стажировку взяли.
Бля, а шо делать братан, я уже 4 месяца без работы. Если б я ша в рахе был бы, мог бы изи на 2 года гепнуться и ждать у моря погоды.
На прошлой неделе написал епам, я попросил 1800, но с гарантией что проекты без винформ, если гарантировать не смогут тогда 2500
>>384700
Я ваше не завидую ша вкатунцам. У меня в ленте линкедина уже пошло нытье от джунов с курсов, что они хоть что-то по полгода ищут.
За те 4 месяца, что я без работы видел только одну вакансию на джуна, так что крепись, анон.
Сука. И что вот мне делать? Только закончил вуз, сейчас пытаюсь устроиться джуном на нет. Опыта работы нет.
Подожди что будет месяца через 3-4. Может все устаканится.
Но мое имхо сейчас учить дотнет сейчас плохая затея. Поясню.
1. Всем нужны универсальные спецы. Почти во всех вакансиях уровня мидл/джун+ требуют или знания фронта или CI/CD. Знание sql/ef вообще не обсуждается, требуется просто везде. Плюс ебанную кучу побочного говна кафки, рэбиты, редисы.
Мне как-то спросили на собесе на одном знаю ли я Си, ебать.
2. Дрочка на теорию. Хуже только у С++. Знаю знакомого питониста и фронта, их ваше этой хуйней не дрочат. У нас же если не вызубрил Рихтера, ты не человек нахуй.
3. Потолок признания тоже высокий. На западе cеньер это 5+, лид 7+. В той же жаве сеньоров от 3+ набирают. На фронте 3+ уже иногда лидами называют себя.
4. ASP не взлетает, хуй знает почему, думаю тут репутация Майкрософта хуевая.
5. Сраебота с опытом. Тут возможно чисто моя проблема. Попал на хуевый проект - cчитай время зря проебал. Лично знаю что 5 лет опыта дрочки вин форм + sql, на рынке по зп приравнены к году хорошего проекта (asp 5 + азура + кубер + ef + редис)
>Я делал некоммерческий проект на стажировке
А кто его заставляет писать в резюме, что проект был некоммерческий.
>Подожди что будет месяца через 3-4. Как ебанёт так уже ничего беспокоить не будет.
Поправил, можешь не благодарить.
> Что нужно знать чтобы пилить мультиплатформенные проги с гуи?
Eto.Forms
>>383844
> не выглядит нативным для каждой из систем
Выглядит. Собирает на нативных виджетах выходной файл (win, gtk, mac).
> слабая интеграция
Интеграция на уровне дотнета. Что умеет дотнет, то умеет выходное приложение.
> имеет кучу ограничений по созданию
Ограничения только между десктопом и мобилами. Но даже ето можно урегулировать.
>Сегодня нет никакой необходимости использовать нативный гуй
Тыскозал? Тупость сказал.
Сегодня нет никакой необходимости использовать ненативный гуй. Гуевая система только одна - винда, выбор отсутствует, нет смысла не использовать винду.
Еще есть мобилки, но попытка делать универсальное приложение под десктоп и мобилки на самом деле выдает мобилочное приложение под десктоп. Просто дерьмо ёбаное, потому что мобилка ну никак не является аналогом десктопа даже близко. Невозможно универсальное приложение, если его не обрезать под самую убогую систему - мобилки. Это по сути не универсальные приложение, а тупо отказ от десктопного софта как такового, т.е. отказ от нормального софта в пользу убогого мобилочного дерьма. Деградация, дегенерация, регресс. Кто это пропагандирует - сам дегенерат, вот и всё.
именно. мир ебанулся. тянут свои моб приложения на дотнет как есть. то в виде метрошного говна, в котором только лютый примитив допустим, то в виде "а давайте эмулрятор андроида в винде сделаем ура ура"
Ctrl+M+O?
> И получаем ограничение на уровне "лепим формочки на винформс".
Там есть зумерский МВВМ с ХАМЛ, если ты об этом. Тебя трудно понять, зумерок. Мямлишь что-то невнятное.
то есть отделение логики контрола от визуальной составляющей, что позволяет просто сделать нужное, а не устраивать магию с ручным рисованием контрола. про сложные контролы вообще жопа - потому и сущствуют всякие телерик. Как с этим у ето.формс? Подозреваю, что никак.
А также не имея проблем с разных DPI. Как с этим у формочек?
в установке компонентов там же галочки ставишь какие SDK Targets должны быть или как то так
>4. ASP не взлетает, хуй знает почему, думаю тут репутация Майкрософта хуевая.
Да нормально заходит. Просто зачем он в России? ASP - энтерпрайзный фреймворк, а у нас нет не только большого количества новых стартапов, которые и будут выбирать новый асп вместо проверенного спринга, так еще и у тех стартапов, которые есть - охват и нагрузки маленькие, им и на экспрессе норм, типа подумаешь, будут платить за веб-сервер 2к баксов в месяц вместо 500 долларов, разница меньше зарплаты одного программиста, зато жсеры универсальнее и толпами по улице ходят.
>Бля, эт что, на фриланс что ли лезть?
Фриланс - это как успешный поиск новой работы 2 раза в неделю. Т.е. ты один раз работу найти не смог, но надеешься находить ее по 2 раза в неделю.
ну это как бы само собой. а я говорил про это
Закончил вузик в мск по ит специальности. И получилось так, что вроде и что-то делать пытался за время учёбы, а по итогу хуй в стакане. Сейчас дата сосист на питоне, но контора такая, что по факту я нихуя не знаю. Выиграл пару хакатонов даже пока учился. И вот теперь бесповортно пришло время выбирать как жить дальше. Как вообще найти стажировку себе или джуновину. Какой язык взять, чтобы точно начать карьеру можно было. Знаю все и по немного по факту, но на деле языка который я бы реально знал на достойном уровне нет. ООП понимаю вроде как. Я планирую выбирать из этого примерно: Java/C#/C++/(Мб питон, но не уверен насчёт него). Хотелось бы услышать совета от знающих людей... И что вообще сделать чтобы максимально эффективно и быстро найти полноценную норм работу себе(или стажировку)
Думал это версия 1837 года.
И самое печальное, хотел вернуться в 2019ю, а там шрифт тоже изменен. Типа синхронизации. И я теперь не знаю, какой у меня был шрифт.
>Для шарпа всегда шрифт был consolas
Точно, он. Начинаю вспоминать.
А новый какой-то слипшийся.
>И что вообще сделать чтобы максимально эффективно и быстро найти полноценную норм работу себе(или стажировку)
Ты опоздал. Где-то до января еще можно было вкатиться относительно легко на низовые должности. Сейчас это практически как выйграть в лотерею.
Если ты закончил вуз по it специальности и у тебя нет вариантов куда устроится, то крайне хуево быть тобой. Да что там говорить, ты даже с языком толком не определился. Т.е. ты по факту просрал несколько лет своей жизни.
Так что отправляйся переучиваться и возвращайся когда будешь готов.
Алсо, язык вообще насрать какой. В твоей ситуации можешь брать любой, руководствуясь исключительно личными предпочтениями.
на ruSO ищи "учебные ресурсы язык_нейм"
> Подозреваю, что никак.
Плохо подозреваешь. Лучше бы взял и почитал. Всё там есть.
> проблем с разных DPI. Как с этим у формочек?
У бэка проблем нет, потому что бэк там как раз таки отделен от визуальной составляющей, которая вынесена во фронты (win (wpf/forms на выбор), gtk, mac) у которых с DPI так, как ты сам знаешь.
Стандартный шаблон ето.формс генерирует несколько проектов: один бэк, который по сути dll-сборка, там вся логика, и несколько фронтендов под каждую платформу, какая платформа нужна, ту и компилишь. Получается связка из сборки и запускного бинарника. Каждый бинарник тянет зависимости под свою платформу, например, линуксовый гтк тянет гтк-шарп и т.п., виндовый тянет только искаробочные оконные либы дотнета, ну и маковский наверное что-то там своё тянет.
Охуенная система! Я сначала не понял, нахуя так много либ. А потом кааак понял! А потом каак въехал!
>Лучше бы взял и почитал. Всё там есть.
>потому что бэк там как раз таки отделен от визуальной составляющей
И все таки выходит что никак. Ты не понимаешь что такое lookless control.
Это не про отделение "бэк отдельно, а гуишки отдельно", а про способность вида "берем комбокбокс и ЛЕГКО!!! лепим внутри гриды с прогрессбарами и картинками сисек".
Такое возможно в Авалонии, потому что он рисует все сам (Кк и WPF), но ясен пень невозможно в том же гтк и формсах, где на выбор "стандартный контрол" или "них..я"
Я ведь перешел, потому что в обновлении напугали, что NET 5 больше не поддерживается. У меня нет слов, одна ненависть, аж зубы скрипят.
Ну вот перешел и пожрал говна. Для моего приложения пятого хватало, 19я комфортно и быстро запускалась даже без горячей перезагрузки.
Теперь же, создание простой программки сродни запуску космолета. Какая-то хуйня жрет 4Гб. Ебал я в рот.
ну "жрет" это ожидаемо. как никак 64 битную сделали. В остальном разницы не увидел. Как была тяжелой так и осталась.
Ну я считай мгновенно перешел с 19 на 22, поэтому заметил разницу. Если переходить постепенно от версии к версии, то может и незаметно.
дык между 19 и 22 нет промежуточных. Лично я перестал пользоваться решарперовским Build & Run - студия теперь вроде бы собирает с такой же скоростью.
Тесты заебись, если проект пишется заебись.
Если хуёво пишется, то протестировать чаще всего нереально.
Но если начать их всё таки писать, и превозмогать, начинаешь понимать вот эту хуйню про связность и зацепление, абстракции, солиды и прочее вот это хипстерское и абсолютно бесполезное, ненужное задротское говно, ну ты понял.
На прошлой работке перекатывали проект на DDD, вот там было круто обмазывать новый функционал тестами.
К твоему вопросу про БД, это уже скорее не юнит, а интеграционный тест.
Погляди в сторону моков, если просто протестить юнит, если надо вкупе с БД, то посмотри на инмемори, либо можно задрочиться и каждый раз поднимать БД на тест.
А попробуй вообще JetBrains Mono. Я как попробовал, везде на него перекатился, даже в терминале.
Интересный шрифт, спасибо. Каскадию пытался вытерпеть, но открыв на следующий день проект, просто все слилось — не было визуального понимания блока.
Не помогает.
Хороший все-таки шрифт. Уже немного привык, и в xaml хорошо смотрится. Спасибо, анон.
вообще то наоборот - переход по goto выглядит чужеродно
для семантики "повторять циклично" как бы цикл выглядит естественным, а не прыжки туда сюда по невнятной логике
так что goto незаменим только как break N
В остальном не нужен.
А в чем прикол? у тебя в конце цикла переход в начало цикла. Оно как бы само перейдет.
Пикча отвалилась. Чем у тебя Ignore от Retry отличается? Значит Retry у тебя дефолтное решение и не требует лишних телодвижений.
>while(true)
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
А когда этот цикл закончится?
1016x724, 0:24
Его не читают, а слушают.
while(true){
try{
//что то делаем
break;
}catch(НужныйИсключение){
варнянгаем и делаем паузу если хотим
}
}
и нахера ваш goto
Обычно брейк вешается на кнопочку с крестиком.
массив Point
myArray.ToList().OrderBy(x => x.X).ToArray(), возможно можно обойтись без ToList()
Или вот так
Array.Sort(array, p => p.X)
Тут лучшие умы computer science доказать этого не могут, а тут ты у шарпистов спрашиваешь
В вот и нетути. К примеру:
70 % 90 = 70
А мне надо, чтобы было:
120 % 90 = 30
70 % 90 = 0
В VB обратный слэш возвращает целое число от деления, типа
70 \ 90 = 0, при этом 120 \ 90 = 1
Но это опять if
На любом более-менее реальном проекте тебя за такое выебут. А потом отпиздят. А потом обоссут. и на всякий случай еще и пальцы переломают чтобы ты вообще кодить не мог.
Запомни на всякий случай в современном мире в языках высокого уровня нет нормальных кейсов для применения goto. Единственный возможный случай это применение в switch и то только если у тебя жадный алгоритм и во главе угла стоит оптимизация и скорость пиздец как важна. Но тебе такое не светит, так что забудь про goto.
>А мне надо, чтобы было:
>120 % 90 = 30
>70 % 90 = 0
public int MyDivide(int x, int y) => x > y ? x%y : 0;
2) Как совладать с ef DatabaseContext? У меня есть сущность которую я добавляю в бд в одном контроллере, делаю detach и dispose контекста, дальше в другом контроллере делаю modify и ловлю ексепшн "already begin tracked by another context". Я тупо не могу понять где еще он может отслеживаться.
1) За тебя всё придумали - design patterns. Учишь их и в зависимости от задачи используешь тот или иной, но можно и комбинировать, тоже хорошо получается. А с опытом само придёт.
2) Неси конкретный пример с версией EF (или попробуй поиграться с DbContext.Entry)
>Что быстрее передать в аргументы: лист или массив?
Превратим в
>Что быстрее передать в аргументы: ссылку на лист или ссылку на массив?
Упростим до
>Что быстрее передать в аргументы: ссылку или ссылку?
Как думаешь, какой ответ?
А с чего ты решил, что он передает ссылку? Может ему нужна именно копия.
Когда ты передаешь массив в функцию, разве не создается копия массива? Если ты ставишь ref, то тогда передается адрес.
Фриланс сдох 24.02, осталось только разве что лабы студентам на винформах делать. На дотнете фриланса особо и не было никогда.
>>384766
Айти в РФ более чем наполовину выкосило, осталась только работа в банках либо на государство.
Попробуй походи по всяким заводам и нии, хоть какой-то опыт может получишь.
Вкатун в ДС 35-40к рублей где-то стоит. Но вообще это вкатун с минимальным опытом. Совсем без опыта - бесплатная стажировка где-то 3-4 месяца, потом на 25-30к переводят. Это в Москве, повторяю.
>микросервисы для своих стартапов
Дотнет это не про стартапы, а про энтерпрайз в большинстве случаев. В РФ энтерпрайз это банки и гос - дотнет есть, но явно не в большинстве случаев и явно не с микросервисами.
Стартапы на дотенете нужно искать где-нибудь в Калифорнии, Лондоне, Берлине, а не в Москве. Стартапов у нас особо и не было никогда, а теперь и подавно не будет.
Если они не будут доебываться до этого, то перед ними встанет два чела с абсолютно равными навыками. Вот они и начинают искать хоть какую-то мелочь, которая бы отличала тебя от другого претендента. И чем сильнее схожи вы, тем мелочнее причина.
как понять "даже в жаву завезли"?
из вики
"В Java 1.1 green threads являлись единственной потоковой моделью (моделью распараллеливания потоков), используемой в JVM[7], по крайней мере, в Solaris. Ввиду того, что green threads обладают ограничениями в сравнении с native threads, в последующих версиях Java основной упор сделан на native threads. "
никто не запрещает просто пойти и создать нужный файл <имяпродукта>.exe.vmoptions в нужном месте.
просто у шарпистов ЛЕНЬ.Такая же, которая мешает перекатить тред.
А можно где-то почитать про вот такую базу? Я же ведь вот это утверждение где-то и подхватил. Как читаемое не воспринимать по своему?
>как понять "даже в жаву завезли"?
Чел, проджект луум (project Loom, virtual threads) завезли в JDK 19, которая выйдет уже в сентябре этого года.
>А можно где-то почитать про вот такую базу?
Любая книжка по C#. Одна из первых глав: Value and Reference Types
Если хочешь прям кишки понимать, то Рихтера.
>>387673
>Я же ведь вот это утверждение где-то и подхватил. Как читаемое не воспринимать по своему?
Вникать в прочитанное, а не пытаться накладывать свой х.з. где подхваченный недоопыт на новые данные.
>Создаётся копия ссылки на массив.
И если я начну менять массив в другой функции, то я изменю оригинал, даже если там не стоит ref?
Если стоит ref, можно сделать new [].
Если реф не стоит - можно обращаться к элементам и их менять.
Например в шарпе доступ к полям получают напрямую, можно вызывать поле через точку и тут же присваивать значение. В крестах такое считается лютым говнокодом, и для каждой переменной создаются отдельные сеттер и геттер.
Проверил. Если внутри другой функции изменить список или массив, то меняется оригинал.
Удивительно как я до этого сотни раз не наткнулся на это. Всегда ставил ref. А почему же тогда, остальные структуры, типа поинт или интеджер передаются в качестве дубликатов. Массив же тоже структура?
Так в шарпе тоже самое. Применять публичные поля — лютый зашквар, для этих целей используется свойства, у которых есть параметр set и get. Что не так?
В старых версиях бейсика примерно так же было: чтобы изменить значение поля класса, надо было использовать Set. Синтаксический мусор, почему этим должен заморачиваться пользователь? Пусть этим морочится создатель поля. Ограничения на Get и Set есть в свойствах шарпа.
Массив это объект, он хранится в куче и передаётся по ссылке. Инт и стракт это value type, они передаются копированием.
var k = new int [10];
это сокращение для
var k = Array.CreateInstance(typeof(int), 10);
>Удивительно как я до этого сотни раз не наткнулся на это. Всегда ставил ref. А почему же тогда, остальные структуры, типа поинт или интеджер передаются в качестве дубликатов. Массив же тоже структура?
Ты сейчас путаешь ссылочный тип и ссылка.
Ссылка - это адрес памяти.
Ссылочный тип - объект, хранящийся в куче (heap)
Джависты сидят на 8 джаве, которая в поддержке до 2030, так что похуй абсолютно на гринтреды. Их юзать будут в максимум 10% от всех проектов
Да те же самые настройки. Я же только новую студию поставил.
Список подсказок выпадает, но вот такой штуки, чтобы серым цветом подсказывало целые комбинации, типа пикрила — нет.
Зачем он нужен? Это же не бейсик, а буквально шарп, только с неудобным бейсиковским синтаксисом.
Это не интеллисэнс, это нейронка. А на VB никто не пишет, поэтому не обучили.
В шарпе визуально не поймешь наследование это или реализация интерфейса, если в названии интерфейса не стоит префикс "I-". В бейсике это длинные незапоминаемые слова, но зато сразу видно что и где:
Public Class Employee
Inherits Person
Implements IAccount
End Class
И вообще, эта тенденция перекладывать часть информации на название (которое из без того может быть длинным), типа дописывать "Async", мне не очень нравится. В бейсике функция сама сообщает, что она поддерживает ожидание. Может это вызовет проблемы с показыванием списка в intelliSence, когда у тебя есть оба варианта, но почему бы не реализовать так же, как это сделано с перегрузками?
Так что я не скажу, что C# по всем параметрам имеет удобный синтаксис. Про свойства уже писал не раз.
>В шарпе визуально не поймешь наследование это или реализация интерфейса,
Подсветку синтаксиса настрой и проблем и будешь понимать.
Можно ли его юзать как аналог ShowDialog?
*временнОй предел
Ну да, кстати.
Ну две минуты — недолго. Я имею ввиду, что есть шанс, что пользователь откроет окно (которое технически не должно отнимать много времени), но вдруг решит свернуть приложение на час.
Я просто думаю стоит ли мне событие генерировать или эвейта достаточно. Или хотя бы детектить, что эвейт всё.
> Инструкции верхнего уровня должны предшествовать объявлениям пространств имен и типов.
Это значит на уровне импортирования библиотек, выше чем начинается первый неймспейс или класс.
Using
...
Delegate
...
Namespace
{
Class
{
}
}
Это я знаю, но в 9+ версии при создании приложения по умолчанию не генерируется неймспейс, класс и main, вот я и спрашиваю, как в таком случае прописывать делегат, майки ведь явно это предусмотрели.
А, ну да, видел это дерьмо. Там же ссылка на статью с подробностями.
https://docs.microsoft.com/ru-ru/dotnet/core/tutorials/top-level-templates
Короче надо юзинги и делегаты добавлять в файл, смотри "глобальные директивы". Тут вопросик в том, почему они не генерируют файл (или я не заметил).
Ну либо отключить упрощенный формат. Я мимоходом это заметил, но пока работаю со старыми проектами и не вдавался в подробности.
Хм. Странно.
Ведь в каждом треде твердят, что можно всему научиться самому. Без курсов, без вышки, без менторов. Неужели пиздят?
>Куда копать, чтобы понять?
Ну а если серьезно, то копать в сторону паттернов и принципов программирования. Вроде ООП, КОП, SOLID, инверсия управления, паттерны GoF, DDD, TDD, ONION, CQRS, UoW и т.д. и т.п. Только не на уровне "пройти собес", а по серьезному с прицелом на то как все это нужно на практике применять.
Вобщем, дохрена всего, где-то на полгода...год плотной учебы.
Можешь попробовать найти какую-нибудь стажировку (сорт оф импосибл на данный момент) ну или искать того кто все это тебе объяснит.
<ControlTemplate TargetType="TextBox">
<StackPanel>
<Label x:Name="Lupa" Content="Zarplata" />
<Label x:Name="Pupa"/ Content="{ Binding ElementName=Lupa, Path=Content}">
</StackPanel>
</ControlTemplate>
Я проклинаю WPF и тек, кто наставила стили настраивать там. Все что имеет более или менее сложную логику, с мудреными отступами, превращается в ад. Кодом я бы написал это за три секунды.
О, благодарочка, пойду копать.
да откуда ж знать о чем это он. тут только часть код и все вырвано из контекста.
А без контекста у него пурга написана...значение 42 переданное...сравнении ссылочных типов.
42 не ссылочный тип, а правила сравнения зависит от типа сравнения. тот же стринг ссылочный, но сравнивается по содержимому
Если судить по тексту то он принимает 42 как object, получает упаковку и хрен пойми как потом сравнивает. У стринга же упаковки не происходит.
> да откуда ж знать о чем это он. тут только часть код и все вырвано из контекста.
Есть класс thing с полем Data типа object. В нем одна функция, которая принимает также object и сравнивает его с Data
ну при сравнении обжект он только и может что сравнивать ссылки
с 42 он сравнивает обертки и ссылки разные
при строке обертки нет и ссылки одинаковые
хотя немного уточнений
в примере строка физически ссылается на одно место - работает интернирование
но даже если нет и хз как он сравнивает, но Equals виртуальный, то есть он перегружен в string и все равно были бы равны, даже с разными ссылками
Интернирование. При компиляции все одинаковые строковые литералы являются одним и тем же объектом в памяти (пик1). При этом, помимо того что разные 42 это разные объекты, при присвоении значимого типа к переменной ссылочного типа происходит упаковка и каждый раз это будет новый объект.
Короче, RTFM.
>>388725
> хз как он сравнивает
Для стрингов переопределен ==
>Equals виртуальный, то есть он перегружен в string
в инте тоже
Поэтому можно сделать вывод, что в методе Process используется либо == либо ReferenceEquals
>>388674
Да дополню, как я написал в предыдущем посте, нам неизвестно содержимое метода Process. Если там сравнение идет через ==, то дело в том, что он переопределен для строк и сравнивает значения. Если сравнение идет через ReferenceEquals, то дело в интернировании - одинаковые литералы ссылаются на один и тот же объект.
вывод - может какой то мобилоид и портирует свой софт на десктоп и получится как с метро приложениями
Ну и всякие простые поделки можно
Но при такой "поддержке" линукса и фичастости - хз зачем оно нужно десктопщикам
>А можно наследовать функцию
Что ты имеешь в виду?
Если что методы public и protected наследуются, private тоже, но ты не сможешь их вызвать в наследнике. Если нужно написать другое тело метода - в базовом помечаешь метод или свойство как abstract или virtual, а в наследниках переопределяешь с помощью override. Так же можно обозначить метод как override sealed (или типа того, не помню точно) и тогда метод будет переопределен как законченный, все дальнейшие наследники наследника не смогут переопределить реализацию sealed метода.
вложи метод в метод. обычное дело
Щас ее зарегать достаточно проблематично и жетбрейнсы далеко не всегда это просто так хавают. Могут еще начать реально проверять и отключать.
>Но при такой "поддержке" линукса и фичастости - хз зачем оно нужно десктопщикам
Блин, десктоп на винде то уже мертв и воняет, нахуй он на линуксе то вам?
десктоп хоронят и хоронят. прям как винду, которая мастдай да никак не дай
А я сколько ни гуглил - пишут, что он люто тормозной, если поставить все нужные плагины, и по возможностям даже близко не тянет на продакшн. Ввиду своих малых познаний я пока не понимаю, чем это чревато и таки можно ли на нем нормально работать.
Есть какое-то решение интеграции пользовательского кода? Или это будет какой-то маркет, где будут одобренные партией расширения? Как это будет работать по вашему? Или уже есть кейсы?
вс код это для тех, кто оказался на необитаемом острове и у него ничего нет. Как у анона случай, когда некроноут не потянул студию.
Ну или для тех, кому просто нужно подредактировать чужой код. Всякие обладатели 3д принтеров меняют настройки в прошивке в вс коде, нет смысла устанавливать софт на несколько гигов.
В моем понимании это что-то мобильное и компактное, или даже бытовое.
Знаю что есть тулза, чтобы мерджить все DLL и вшивать в exe. А можно поинтерисоваться для чего перемещать?
>В моем понимании это что-то мобильное и компактное, или даже бытовое.
То есть непригодное для коммерческой разработки?
Корень проекта после сборки выглядит гипер засрано, хочется по своим папка разложить длл от нюгет пакетов
Это же ниже чем вс комьюнити. Я вот не понимаю, нафига себя ограничивать на своем рабочем месте? Это же как дизельный генератор — он хорош в походе или на даче, но нахрена его юзать в повседневной жизни? Это такая принципиальная цель, или что?
По-моему так во всех прогах. Я встречал отдельные папочки для только подключаемых плагинов и ресурсов.
Я не специально, мне для других задач крайне нужен линукс на постоянку, а там нет студии (а теперь и райдера). Если б оно там было, то и вопрос бы не возник.
Ни с какой. Путь в джуны начнется, когда ты закроешь это говно и найдешь нормальный источник.
Пилил я на работе сервер TCPшный. Ну, и меня чет оч грызет вот что. При 5к соединений он жрет 300МБ оперативки. И я не могу понять - много это или мало. Типа раньше был такой же сервер на жаве - он жрал 2 гига, но его другой человек писал, я хз что там да как. Но я понимаю, что на плюсах бы я должен был бы получить где-то 50МБ при этих же 5к соединений в худшем случае, как раз со всеми этими трейсами, логгированием и прочим.
В общем. Успокойте меня, скажите, что я ничего неправильно не делал и 300МБ на 5к соединений это норма.
Да епр. Ему нужно что то подобие паттерна "шаблонный метод"
Вот только кроме наследования еще есть делегирование
и через делегирование для методов это делается просто
public static void Main(string[] args)
{
var method1 = () => BaseMethod(() => Console.WriteLine("mutable part 1"));
var method2 = () => BaseMethod(() => Console.WriteLine("mutable part 2"));
method1();
method2();
}
private static void BaseMethod(Action mutablePart)
{
Console.WriteLine("stable pre");
mutablePart();
Console.WriteLine("stable post");
}
Я не знаю как ты понял чего ему надо. Но видимо ты прав.
Хотя учитывая:
> Я вывел повторяющийся код, но все равно в каждой следующей функции мне надо объявлять N переменных и вызывать N функций. Паттерн одинаковый, меняется только середина
Я в душе не ебу как делегирование и шаблонный метод ему помогут.
Без кода короче, хуй знает.
msdn
Тем, что большинство тем там расскрываются поверхностно. Научиться синтаксису языка - хуйня, это быстро, а писать нормальный код - дело практики и времени. Если активно обучаться будешь полгодика-год то изи выйдешь на уровень джуна. Запомни: джуниор это программист который умеет писать код, но не имеет коммерческого опыта. Имхо вот требования к джуну (все знания - поверхностные, ты просто должен уметь этим пользоваться):
1. LINQ, Основы рефлексии, C#
2. EFCore
3. Automapper
4. NoSql бд (MongoDb) + Postgresql
5. DI
6. Serilog
>а писать нормальный код - дело практики и времени
Два чая. После каждой итерации чувствую себя говном. Я уже раз по пять каждый участок проекта переписал и все равно выглядит как детское поделие.
>>389965
>А можешь объяснить, чем метанит-то хуевый?
А ты попробуй написать собственный проект и вопросики отпадут. Точнее начнут появляться вопросы, ответы к которым ты не найдешь на метаните.
>Я в душе не ебу как делегирование и шаблонный метод ему помогут.
Ну так и помогут. В общий метод передается делагат, который и выполняется в том месте где нужна изменяющаяся часть, а все остальное одинаковое.
Он не хуевый, просто это не учебник. Максимум сборник референсов для того, чтобы освежить память если что-то забыл.
>3. Automapper
Терпеть не могу эту хуету. С какого-то момента писать мапперы руками становиться намного проще, чем пердолить все условия для этой хуйни.
А есть какие-нибудь актуальные учебники по 11 шарпу? Глянул на торрентах и большая часть - это допотопная хуйня по 7 версии, в лучшем случае по 9.
По идее все технологии кроме самого шарпа, SQL, ASP и базового кодерского мышления (солид, паттерны, алгоритмы и структуры) опциональны. У каждой компании свой стек, под все учиться всю жизнь будешь. Самое главное - очень хорошо знать базу, остальное на месте поймешь за пару дней в гугле. Плюс личные проекты, где ты так или иначе поймешь, как оно все устроено, и поюзаешь еще всяких разных штук. Еще сейчас полезно хотя бы немного знать фронт: жс + тот же ангуляр.
Привет фронтендерам. 11 еще только в тестовой версии, полноценно выйдет вроде только в ноябре. Откуда по нему сейчас возьмутся актуальные учебники? Седьмая версия полностью валидна, девятая тем более. Потом просто сахар доучишь и все.
Учишь 7-й. Там все актально. После того как выучишь 7-й, на освоение новых вещей из 8, 9, 10 уйдет неделя, максимум две.
> Я уже раз по пять каждый участок проекта переписал и все равно выглядит как детское поделие.
Побольше констант и энумов - код будет точь в точь, как у профи дидов.
Каким образом некоммерческий программист будет уметь пользоваться перечисленным говном? Разве оно используется в некоммерческих программах?
>Я уже раз по пять каждый участок проекта переписал и все равно выглядит как детское поделие.
Двачаю. Я на первой работе проект переписывал с нуля раз 7 и всё равно не доволен.
>Каким образом некоммерческий программист будет уметь пользоваться перечисленным говном?
Эти технологии используются вообще везде для любого проекта.
>>389979
>1. LINQ
>2. EFCore
Вот эти две вещи встречаются везде. И их стоит знать, остальное из списка это nice to have и разобраться в них дело пары часов. От себя добавлю, что всё больше людей, которых я собеседую хуй клали на unit тестирование и все они были посланы нахуй.
>>389641
Когда сможешь сделать, не заглядывая каждые 5 минут на msdn, какое-нибудь апи с обычным crud и записью в нормальную базу, а не в документ чтобы всё как по учебнику, с полиморфизмом и тестами и сваггером. А если к этому ещё прикрутишь какой-нибудь простой фронт, то вообще хорошо будет.
>Мимо-восемь-лет в .net
{
List<T> _list;
public ReadOnlyCollection<T> ROC => new(_list);
}
или
class SlimSlowpoke<T>
{
List<T> _list;
ReadOnlyCollection<T> _roc;
public ReadOnlyCollection<T> => _roc;
public Yoba() { _list = new(); _roc = new(_list); }
}
Как определиться между вариантами? Знаний у меня чуть больше, чем нихуя, кроме предположения, что вариант 1 занимает больше памяти, но быстрее, а вариант 2 медленнее, но память экономит.
Допустим, слова Completed или Authenticated нет смысла писать с Is. У микрософтов где-то используют Is вместе с такими словами, а где-то нет. В книге по кодестайлу рекомендуют писать проще, то есть не использовать Is там, где и так всё понятно.
Я просто заметил, что иногда булевы свойства могут пересекаться с событиями в плане названий, если ты не используешь приписку Is. Допустим, у меня есть класс-сервис с свойством bool Connected. Мне понадобилось добавить событие, которое бы срабатывало, когда устанавливалось соединение. Разумное название для такого события - Connected, но тогда получается конфликт со свойством. Правда, я нашёл выход сделав событие ConnectionStateChanged<bool>
Использую "is" или "has". Но нужно избегать названий типа "IsNotConnected" потому что тогда "!IsNotConnected" выглядит странно.
ну так будь точным. знать концепции или конкретный инструмент.
Везде...в вакансиях, что конечно важно для джуна (да и то только асп.нет)
что вообще пытаешься сделать хз
заводишь коллекцию и используешь. Наружу выставляешь как ридонли через интерфейс (или обертку если параноик)
>что вообще пытаешься сделать хз
Что-нибудь. Просто что-нибудь.
>заводишь коллекцию и используешь. Наружу выставляешь как ридонли через интерфейс
Можно ведь обратно привести к исходному типу и сделать всё, что угодно.
>(или обертку если параноик)
Я не параноик, но хотел сделать так, типа чтобы точно не было возможности что-то изменить извне. Вопрос как лучше - создать заранее объект обёртки и передавать ссылку, или при каждом обращении создавать обёртку заново?
Можно не быть параноиком, но в шарпе слишком поздно ввели очевидные (фейспалмище) IReadOnly интерфейсы и поэтому обертки сами собой будут.
>опрос как лучше - создать заранее объект обёртки и передавать ссылку
Конечно же лучше не создавать лишний раз то, что можно не создавать.
.NET и сам шарп - это фосс продукты, то есть с ними ничего сделать в принципе нельзя. Азур вроде уже отрубили, но он заменяем. Могут сделать вендекапец конкретно для нас, но это тоже не беда - пересядем на линукс, только вот для него иде нету, райдер у нас не достать. Ну, будем как деды писать в вскоде. А вообще можно просто врубить впн и продолжать весело сидеть в вижуал студии комьюнити. Как-то так.
> Запомни: джуниор это программист который умеет писать код, но не имеет коммерческого опыта.
Ждунов без коммерческого опыта С# нонче берут только в госпомойки на .net 4.5 и винформы
Ну и норм для первого опыта
Это пока. Когда столкнутся с огромным дефицитом мидлов и старше - начнуть брать даже бомжей с помойки, отмывать и учить.
С гугления класса FileSystemWatcher
Бамп вопросом. Плагины для веб-приложений реализуемы?
>Допустим фотошопы всякие будут в вебе
Не будут. Браузеры не будут иметь доступа к файловой системе юзера как минимум и на этом уже можно закончить.
А есть у кого-нибудь на примете годный опенсорсный проект на микросервисах? Чтобы понять, как правильно с ними строить архитектуру. Или учебный курс в рамках которого такой проект реализуется.
Мимо-5-лет-пишу-монолиты
>к файловой системе юзера
Ну это порешали даже в наше время. Например есть такая программа Fusion от автодеск (типа легкий CAD), так вот одно время они запретили бесплатным версиям сохранять файлы на жесткий диск, проекты можно было хранить только в облаке.
Это тебе обрисовка ситуации в бущуем.
В смысле не имеют? А как мы скачиваем и загружаем пикчи? Я вижу другую проблему с облачными сервисами - ресурсы. Одно дело если это црмка какая-нибудь и совсем другое фш и прочее. На данный момент и на ближайшее будущее это будет либо слишком дорого, либо для ограниченного круга лиц (ынтырпрайз например). Плюс нужны бешеные каналы интернета, которые есть очень далеко не везде.
Компоненты HTML еще не настолько развиты чтобы заменить десктоп полностью это раз, два - браузеру по большей части не доступен функционал IO, который доступен десктопу (реестр, файловая система, экран, микрофоны итд итп). Ты можешь только загрузить вручвную на сайт файл и редачить, но не можешь напрямую взаимодействовать с компонентами ОС как это делает десктоп, вот и получается тебе. Огромная часть ПО - десктоп, браузеры ограничены всратым HTML который годен только для отображения, но не для редактирования и тем более уж рисования и прочих сложных систем вроде размытия, рендера итд.
Зачем системе взаимодействовать с реестрами и компонентами ОС, когда вся логика работает на сервере и ей важен доступ к компонентам ОС сервера?
Это интересно какой? У меня фш наглухо отключен от интернетов и там все работает.
>>390736
Я думаю еще возможно движение в сторону простой видеотрансляции, как у нвидии с играми, забыл название. То есть весь пк превратится в выделенные ресурсы в дата-центре с накатанной сверху ос, там же будет работать весь софт. А у юзера будет только монитор с клавиатурой и мышью/тачпадом. Офк, все это сделают закрытым и проприетарным, а железо либо вообще перестанут продавать просто так, либо оно будет дохуя стоить. Но это еще очень не скоро, мощностей нужно ебанись.
>наглухо отключен от интернетов и там все работает.
В последнем. Новый функционал, где используется нейронные фильтры, типа лендскейп миксера https://youtu.be/3YZQ08GHbyA
А, ну это говно никто не юзает.
Шо это за хуйню ты тут выложил?
Вот нормальный список для джуна:
База
Информатика. ЦП, АЛУ, ОЗУ, базовая архитектура компуктеров, системы счисления.
ОС. Чтобы не срал в штаны, когда на другой системе ему вместо BigEndian LittleEndian прилетит и уебок не сможет догадаться в hex перевести и посмотреть. Это самый минимум. По хорошему, про то что такое ос, зачем нужно, какие механизмы используют, какие бывают. Как разные многозадачность реализуют и это вот все.
Сети. Блядские модели оси. Чтобы уебок, не фантазировал себе будто его байтики по эфиру какому-то передаются туда-сюда.
Многопоточка. Примитивы синхронизации, проблемы которые бывают, как решать. Всегда ли пизже чем однопоточка.
ООП. Базовая хуйня плюс пара паттернов.
SQL на уровне составить сложный запрос, а потом с помощью плана запроса - оптимизировать его, знать про индексы, какие бывают, знать про хранимки
База+
Матан, алгоритмы, дискретка.
HTTP на уровне в состоянии взять сокет и написать многопоточный сервер для отдачи статики
Трехуровневая архитектура, зачем, почему, какие еще бывают
.NET
История, может пояснить что было раньше, почему было хуево и как кора дала вторую жизнь. Чем вообще кора от .net'а старого отличается, кроме ко-ко-ко кроссплатформенности
Чем ссылочные типы отличаются от значащих
Коллекции
Женерики
Асинхронщина. Что зачем и почему. Плюсом будет, если сможет свою имплементацию простенькую написать, для банального таймера.
Parrallel. Когда оно лучше чем асинхронщина. Вообще, что делает.
Interlocked, как работает, зачем надо.
IDisposable, когда надо, когда не надо.
Финализаторы, чем от деструкторов отличаются, когда надо, когда не надо.
Ковариативность, контрвариативаность,
Собственно это темы, которые джун должен знать. А вот то что ты перечислил - в массе говнотехнологии, которые еще и далеко не везде юзаются, тот же серилог - нахуй не нужен, автомапер - говно без задач, а EF - так вообще пизда говна ебаная, которая жрет памяти охуевшая мразь и при этом там столько церемоний, что проще взять и руками сделать.
Шо это за хуйню ты тут выложил?
Вот нормальный список для джуна:
База
Информатика. ЦП, АЛУ, ОЗУ, базовая архитектура компуктеров, системы счисления.
ОС. Чтобы не срал в штаны, когда на другой системе ему вместо BigEndian LittleEndian прилетит и уебок не сможет догадаться в hex перевести и посмотреть. Это самый минимум. По хорошему, про то что такое ос, зачем нужно, какие механизмы используют, какие бывают. Как разные многозадачность реализуют и это вот все.
Сети. Блядские модели оси. Чтобы уебок, не фантазировал себе будто его байтики по эфиру какому-то передаются туда-сюда.
Многопоточка. Примитивы синхронизации, проблемы которые бывают, как решать. Всегда ли пизже чем однопоточка.
ООП. Базовая хуйня плюс пара паттернов.
SQL на уровне составить сложный запрос, а потом с помощью плана запроса - оптимизировать его, знать про индексы, какие бывают, знать про хранимки
База+
Матан, алгоритмы, дискретка.
HTTP на уровне в состоянии взять сокет и написать многопоточный сервер для отдачи статики
Трехуровневая архитектура, зачем, почему, какие еще бывают
.NET
История, может пояснить что было раньше, почему было хуево и как кора дала вторую жизнь. Чем вообще кора от .net'а старого отличается, кроме ко-ко-ко кроссплатформенности
Чем ссылочные типы отличаются от значащих
Коллекции
Женерики
Асинхронщина. Что зачем и почему. Плюсом будет, если сможет свою имплементацию простенькую написать, для банального таймера.
Parrallel. Когда оно лучше чем асинхронщина. Вообще, что делает.
Interlocked, как работает, зачем надо.
IDisposable, когда надо, когда не надо.
Финализаторы, чем от деструкторов отличаются, когда надо, когда не надо.
Ковариативность, контрвариативаность,
Собственно это темы, которые джун должен знать. А вот то что ты перечислил - в массе говнотехнологии, которые еще и далеко не везде юзаются, тот же серилог - нахуй не нужен, автомапер - говно без задач, а EF - так вообще пизда говна ебаная, которая жрет памяти охуевшая мразь и при этом там столько церемоний, что проще взять и руками сделать.
Да. В дотнет еще забыл добавить
Делегаты, события, почему события говно и когда таки можно.
Статика, чем от обычных классов/методов отличается, когда надо, когда не надо.
Виртуальные методы, абстрактные классы.
Интерфейсы
Какие есть методы у Object и на кой хуй они нужны.
Хочу начать научиться программированию на C#.
Есть макбук на м1. Хочу использовать последнюю версию Visual Studio, которая унифицирована с виндозовской по интерфейсу.
Какие подводные камни?
Говнина ебаная, размазывающая легкочитаемый лаконичный синтаксис в аморфную кашу.
Единственное, что из этого хоть как-то стоит использовать - is not в сочетании с null. Все.
>когда на другой системе ему вместо BigEndian LittleEndian прилетит и
Хм. Я не спорю что знать такое приятно и полезно. Но где современной кодомакаке придется с таким сталкиваться, с трудом себе представляю. Я сам с такими ньюансами сталкивался когда в лохматые годы под спектрум кодил и лет 10 назад в промышленных устройствах. С тех пор как в энтерпрайз ушел даже близко ничего такого не было.
Тут то и настанет мой звездный час
Когда ж вы шапку уже читать начнете.
Для обучения:
>— C# 8.0 in a Nutshell (Joseph Albahari и Eric Johannsen) — огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином.
Читаешь внимательно, разбираешь каждую тему. Находишь/решаешь примеры. Закрепляешь.
Для контроля знаний и просто таскать с собой чтобы почитать в свободное время.
>— C# 8.0 Pocket Reference (Joseph Albahari и Ben Albahari) — просто выжимка из книги сверху, можно всегда держать рукой.
Когда сможешь взять любую тему из оглавления и вкратце ее пересказать, хотя бы так же как она описана в этом кратком справочнике, тогда можешь считать, что ты нормально знаешь шарп.
Алсо, эти книги есть для 9-й версии (возможно и для 10-й), но учить спокойно можно и на 8-й (и даже на 7-й)
После этого можешь считать, что ты знаешь шарп и где-то процентов на 60 готов к реальной работе. Далее тебе нужно учить фреймворки, паттерны, шаблоны и т.д.
И еще совет. Сразу забей хуй на фреймворки типа WinForms и WPF.
Не вылезай из консольных приложений, пока не будешь свободно плавать в стандартном синтаксисе.
> Он мертв.
Он опенсорц. Возьми исходники и оживи. В этом суть опенсорца. Он бессмертен. Он может казаться мёртвым, но на самом деле он спящий. Как Ктулху.
Вот это используй https://metanit.com/sharp/tutorial/2.33.php быстрее чем куча, а коллекции это куча.
is isItem, isNot isNotItem, has hasItem, b bItem.
b boolean типа говорит какой это тип данных.
Про второе уже писали - долбоебизм, т.к. в логических условиях, любое отрицание идет по пизде в плане понимания.
Лучше такие конструкции заменять на положительные. Например вместо IsNotPresent использовать IsMissing и т.д.
Четвертое параша оставшаяся от C, не имеет смысла в шарпах.
как вариант, я не использую isNot, но использовал его когда сидел на луа love2d.
Пикрелейтед - как микрософты в основном именуют булевы свойства. Вроде логично. Но с другой стороны. Слово "Enabled" - это прошедшее время, а значит вместо Is нужно писать Was.
Или вот взять булево свойство, которое обозначает успех операции. У микрософтов можно встретить 3 вариант: Success, IsSuccess и IsSuccessful. Грамматически вернее всего последний пример вроде как?
Даже если модальное окно запускает другое окно, но в обычном режиме, то там тоже все идет по пизде.
Я иногда меняю местами слова в словосочетаниях тупо для удобного поиска в IntelliSence, или логической группировки. Да и Is приписываю просто чтобы все ISы были в одном месте.
>Successful
Слишком длинно томущо. Охуей в Environment.NewLine и попробуй это применить на практике.
>Но с другой стороны. Слово "Enabled" - это прошедшее время, а значит вместо Is нужно писать Was.
Учи инглиш, чтобы не be butthurt. Все правильно, это passive voice.
Со своей колокольни и многолетнего опыта скажу, что называть переменные стоит так, чтобы максимально просто понять, для чего она служит. Назовёшь ты её Enabled или IsEnabled, или Enbl - если в контексте всего кода легко понять, что она значит, то ты всё сделал правильно. Гайдлайны майкрософта это хорошо и полезно, но слепо следовать их советам не стоит, это всего лишь рекоммендации. Если в тиме какие-то разногласия по этому поводу, то выработайте свои правила наименования переменных но почти всегда всем похуй.
>>390282 анон
А чем тебе маркеры Structure и Class не нравятся?
Потому что иди на хуй, вот почему. Сука, тут, блядь, нету ни одного экстрасенса. Принеси свой вонючий код и покажи его нам, а мы скажем где ты съебланил.
Да я ебу что показывать? Там дохуя чего. Я думал что есть какие-то "НО", которое заставит запуститься окно.
Может поле какое.
Короче, есть два окна StrokeProperties и ColorPicker.
В первом окне я нажимаю на кнопку и в событии создается новый экземпляр ColorPicker, весь остальной код я закомментировал. В самом событии есть подписка на четыре события: Window_Initialized, Window_Loaded, ContentRendered.
Внутри этих событий все закомментировано, кроме сообщения в виде печати строки в окно интерпретации. Вот порядок их срабатывания:
## StrokeProperties: MouseLeftButtonUp
### ColorPicker: Window_Initialized
### ColorPicker: Window_Loaded
### ColorPicker: ContentRendered
Есть еще сообщение из функции Show (Shadowing), но его в списке нет, при этом какого-то хрена срабатывает Loaded и ContentRendered
Вот код под запускающей кнопкой:
ColorPicker CP = New ColorPicker();
Может че в xaml. Вот свойство окна:
<Window x:Class="ColorPicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ColorCurve"
mc:Ignorable="d"
Title="ColorPicker" Width="690" Height="375" Topmost="True" AllowsTransparency="True" Background="Transparent" WindowStartupLocation="CenterScreen" WindowStyle="None"
ShowInTaskbar="False" HorizontalAlignment="Stretch" VerticalAlignment="Top" SizeToContent="WidthAndHeight" Visibility="Visible" WindowState="Normal" ResizeMode="NoResize"
Initialized="Window_Initialized" Loaded="Window_Loaded" ContentRendered="Window_ContentRendered" >
Да я ебу что показывать? Там дохуя чего. Я думал что есть какие-то "НО", которое заставит запуститься окно.
Может поле какое.
Короче, есть два окна StrokeProperties и ColorPicker.
В первом окне я нажимаю на кнопку и в событии создается новый экземпляр ColorPicker, весь остальной код я закомментировал. В самом событии есть подписка на четыре события: Window_Initialized, Window_Loaded, ContentRendered.
Внутри этих событий все закомментировано, кроме сообщения в виде печати строки в окно интерпретации. Вот порядок их срабатывания:
## StrokeProperties: MouseLeftButtonUp
### ColorPicker: Window_Initialized
### ColorPicker: Window_Loaded
### ColorPicker: ContentRendered
Есть еще сообщение из функции Show (Shadowing), но его в списке нет, при этом какого-то хрена срабатывает Loaded и ContentRendered
Вот код под запускающей кнопкой:
ColorPicker CP = New ColorPicker();
Может че в xaml. Вот свойство окна:
<Window x:Class="ColorPicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ColorCurve"
mc:Ignorable="d"
Title="ColorPicker" Width="690" Height="375" Topmost="True" AllowsTransparency="True" Background="Transparent" WindowStartupLocation="CenterScreen" WindowStyle="None"
ShowInTaskbar="False" HorizontalAlignment="Stretch" VerticalAlignment="Top" SizeToContent="WidthAndHeight" Visibility="Visible" WindowState="Normal" ResizeMode="NoResize"
Initialized="Window_Initialized" Loaded="Window_Loaded" ContentRendered="Window_ContentRendered" >
Ну че, нашел? А я нашел. Дело действительно в xaml, конкретно в теге свойств окна Visibility="Visible". А теперь поясните шо происходит?
> C# 8.0 in a Nutshell (Joseph Albahari и Eric Johannsen)
Понял. А этой книги в пдф у тебя случайно нет? На торрентах не нашел, а 5к на озоне за нее отдать не могу - я нищееб.
Я читал книги из шапки...
> Каково ощущение, что вас опускают до уровня домохозяек?
Если код становится красивее и понятнее, то почему бы и нет.
Почему не станет? Может, он там с зарплатой 20к хуй без соли доедает. Конечно, у него пятерка на книжку не найдеться.
Да просто забавно, как бейсик ссаными тряпками гнали, и все больше и больше заимствований я вижу. В целом, идея-то хорошая — взять все лучшее из бейсика, а бейсик похоронить.
Надо еще Properties забрать.
Из проекта на framework ты не обратишься к core библиотеке, наоборот можно.
Библиотеку на core можно собрать под разные платформы. На framework только под винджу.
Сцук, первая ссылка в гугле.
Ну ё-моё. У меня стороннее приложение обращается к неуправляемой библиотеке. Конвертер я сделал, но сборку Core приложение отказывается жрать и падает.
Пытался типа мост сделать, чтобы приложение обращалось к библиотеке на фреймворке, которая запускала библиотеку на коре. Результат — пикрил. А мне переделывать проект никак нельзя. Есть какие-то обходные пути?
У меня был запасной, как я полагал временный вариант — передачу информации в .exe через MemoryMappedFile, но это супер уебанский и неудобный вариант и я не хочу светить exe-шник, чтобы юзер своими потными ручками его не запускал. Есть какие нибудь мысли более грамотные?
float Test(char someText, double optValue, char outputBuffer, int optBuffer1Size,
char pOptBuffer2, int optBuffer2Size, char* zData)
{
strcpy(outputBuffer, "Hello!");
return 0.0f;
}
Вся проблема с outputBuffer. Это что-то вроде MemoryStream и передается ссылкой. Есть сторонная программа внутренним языком скритинга. Скрипт обращается к DLL с функцией выше, но преде этим выделяет память. Команда выглядит так:
[MemCreate, _mem , 256, 0] // _mem - имя переменной, 256 - выделенная память,
После отработки функции, я могу обратиться к _mem и получить данные.
Я попытался сделать аналог на C#. Да, на крестах неуправляемая библиотека, но я это уже превозмог.
private float Test(ref IntPtr someText, double optValue, ref IntPtr outputBuffer, int optBuffer1Size, ref IntPtr pOptBuffer2, int optBuffer2Size, string[] zData)
{
outputBuffer = "Hello!";
return 0.0f;
}
И у меня просто пустота на выходе. Точнее выдает либо пустоту, либо рандомный символ. Еще я читал про IntPtr, и делал даже так
outputBuffer = Marshal.StringToHGlobalAnsi("Hallo! Again!")
Это не помогло. А MemoryStream нужно стринговое название "переменной", но никак не ссылка.
Ах тыж бля, все звездочки по пизде пошли. Вот скрин когда на C++.
Ну вот тонкостей я не знаю. Находится в main.cpp
Лучше расскажи, что за магия происходит?
Почему простое присвоение переменной в C# ничего не происходит?
Я уже подал документы в один, но больше никаких не знаю. В вышке C# не учат. А для страховки мне надо в несколько наверное подать.
и не надо мне рассказывать про то что вуз не нужен, я всё знаю, пропустим этот момент
Ты забыл дописать, что начинать надо с чистого С, а лучше с ассемблера. После окончания мехмата мгу офк, никак не раньше. А после изучения всего тобой предложенного радостно поскакать в ООО "Хуи и залупы" и ковырять там легаси говно на винформс до пенсии, унижая всех своими познаниями на двачах.
>>390886
>Аноны, нужен ваш совет.
Выбрось говно с пика и возьми нормальную книжку. Тут в шапке и в теме много советов. Только сразу шли нахуй ебанатов с их справочниками по 1к+ страниц, ты по ним никогда ничего не выучишь. Справочник - это, блять, справочник, а не учебник.
>>391019
Жаль пока не дают пенсию за то, что ты вынужден сам себе писать рабочие инструменты. Так бы я с радостью, но мне надо работать, а не хуйней заниматься.
Бамп анончег.
Аргумент char⚹ оutputBuffer
превратил в Ref string оutputBuffer
дальше присваиваю строку outputBuffer = "Hallo! Again!"
При каждом новом выполнении функции, выдает разный результат из кракозябр. Куда копать? неужели С#ом никак не заменить C?
Алсоу, если я до использования функции что нибудь впишу в по адресу оutputBuffer, то у меня функция вообще падает.
>Это пока. Когда столкнутся с огромным дефицитом мидлов и старше - начнуть брать даже бомжей с помойки, отмывать и учить.
Не столкнутся. Половина шарпа - галеры. А они либо не нанимают, либо вообще уходят из России. C# закончился.
>Говнина ебаная, размазывающая легкочитаемый лаконичный синтаксис в аморфную кашу.
Это для свича, маня. Покажи, каким ты синтаксисом свичи делать собрался.
>Подстава на пустмо месте.
Ты говоришь так, как будто тебе кто-то когда-то обещал вечную совместимость со всеми предыдущими версиями. Тогда тебе лучше в джаву, там вон народ до сих пор на восьмой версии сидит и им норм.
Да что за дерьмо? Как заменить этот ебаный char⚹ оutputBuffer из С++? Все советы на стаковерфлоу касаются импорта библиотеки, это не подходит.
Как только я использую string оutputBuffer или же IntPtr оutputBuffer , у меня внутри функции все адекватно читается, но не перезаписывается.
Но если я использую ref, то я читаю какой-то бред и около-пустоту. Как сделать аналог пикрила, на на шарпе? Даже Try не помогает защититься от вылета и отловить ошибку.
Еще кое что. Если я использую Marshal.PtrToStringAnsi(OutputBuffer) то получаю пустоту, если я захочу использовать Marshal.PtrToStringUni или же Marshal.PtrToStringAuto, то получаю краш.
640x360, 0:06
Это какое-то издевательство судьбы надо мной. Оказывается, что работает просто string outputBuffer.
Но ведь я такое совершенно точно первым же делом проверил. Я целый день убил на какую-то тупость и дебри, чтобы ходить вокруг очевидного и самого простого, что только может быть? Сука, как же я ненавижу свою тупость.
И ведь недавно поднимался вопрос на тему ref и стрингов. И все равно те же грабли.
Хотя нет, вот чего я раньше не знал и действительно раньше просто string не работал.
Для начала снова обрисую ситуацию и заранее извиняюсь, что я засрал тред. Начнем с вводных данных:
В мою функцию передается массив символов по ссылке - Char*. Принимаю я их с помощью аргумента string outputBuffer.
Когда я просто присваиваю
outputBuffer = "Какой-то текст"
то снаружи функции не наблюдается изменений. Но если я использую, что-то типа
outputBuffer.Replace ("Старый текст", "Какой-то текст")
то изменения видны и снаружи.
В чем дело? Типа присвоением я создаю новую ссылку? Я всегда думал, присвоение значения это изменение данных по ссылке.
В C# строки иммутабельны. Поменять строку по ссылке ты можешь только через unsafe.
Обычные причины отказа:
-Нет опыта с облаками
-Нет опыта настройки пайп-лайнов гита
-Слабые теоретические знания фронта
-Нужен английский уровня С1
Сука еще и мода пошла уебанская с код ревью. Раньше на каждом втором собесе тупо гоняли по Рихтеру, ша на каждом втором собесе код ревью.
>>384400 -кун
Учи ангуляр. Шли нахуй?, если просят C1 за 1800.
Да, бля я бы и бесплатно согласился поработать пару месяцев, чтоб получить этот ебаный опыт с облаками этими вашими.
С учетом требований за сотыгу, я бы не переживал на твоем месте.
1. Идёшь в любой вуз где учат основам, алгоритмам, плюсам
1а. (Опционально) там ещё и не должны сильно ебать
2. Учишь актуальный шарп самостоятельно
3. ??????
4. PROFIT!
Может и разное, но по итогу все твердое и густое едят одной вилкой, а не выпендриваются набором из разновидностей столовых приборов.
Я прям щас расписался в своей неопытности
В абстрактные классы ты можешь запихнуть методы, которые не нужно реализовывать, но которые можно использовать "из коробки".
В интерфейсах ты можешь только реализовывать свойства и методы, остальное придется дописывать ручками. Для того, чтобы реализовать полноценный абстрактный класс, тебе придется:
1) Написать базовый класс
2) Написать интерфейс
А зачем, когда абстрактным классом ты можешь сделать это за раз? Иногда это менее гибко, если речь идет о множественном наследовании, но иногда "нахуя"?
>Может можно ЕЁ пересобрать/переделать под фреймворк?
Ну вот мне нужно WPF окно, но при этом оно должно запускаться из библиотеки классов. А из предложенного студией мне доступна библиотека "классов WPF на net 5-6".
И что в такой ситуации делать? Винформс это говнище с отсутствующим функционалом.
>а у нас это получается нужно делать изначально как раз с помощью абстрактных классов
Можно не изначально, а потом. И тогда у всех потомков будет этот новый метод. Это касается и базовых классов.
А вот изменения в интерфейсы может крякнуть всех, кто его реализовал. Ну потому что та часть, которая реализуется — она в принципе считается обязаловкой, в то время как добавленный метод в базовый класс, это вещь уровня "хочешь используй, хочешь — нет".
Такие дела.
Винду придется ставить, если хочешь нормальную иде. Либо ищи способ купить райдер.
Разобрался, переделал другой шаблон. Только теперь встал вопрос:
dll запускает окно и тут же закрывается (потому что окно не модальное)
А можно как-то ожидать закрытия не используя async?
>студия есть (от майков можно ожидать всякое)
Да студия-то есть, причем нативная, для м1
Я просто не пойму, подойдет ли вообще мак ось, причем на м1, для полноценной учебы и работы с сишарпом
Да хрен знает. Самому интересно какие там различия. Понятно что под нетфреймворк путь тебе заказан. Остается мауи и веб.
А если тебе скажут, что не подойдет, ты продашь? Ты начни по туторам делать и потом нам расскажешь о подводных камнях.
Какой в пизду мауи? Брось каку. В дотнете стоит юзать только асп.нет и впф, все остальное - это эксперименты майков над психикой разработчиков.
>во всех туторах настоятельно рекомендуют покупать мак, если захотим пилить на мауи© под мак
Зачем пилить что-то для этих закрытых хуесосов? Им надо - пусть пилят че хотят со своими анальными ограничениями и необходимостью покупать их металлолом для разработки.
>>393289
Это обрубок студии, который к виндовой студии почти никакого отношения не имеет. По сути это бывший опенсорсный Mono Develop, в котором майки поменяли логотип и забили хуй на это поделие. Как иде - полное говно.
>Им надо - пусть пилят
Это важные птицы. Это ты должен покупать их железо, а потом еще купить лицензию, если захочешь выставить приложение в сторе, иначе будет столько ограничений в правах, что вряд ли можно будет написать что-то работающее.
С другой стороны, я пишу приложуху для хуйдожников и теряю большой кусок аудитории, возможно более платежеспособной.
>я пишу приложуху для хуйдожников
Тогда лучше вообще писать нативно на свистке. А если там хоть сколько-то сильная работа с графикой, то это вообще строго плюсы.
>Тут в шапке и в теме много советов.
Да вас, честно говоря, хуй поймешь. Я сам, помню, тут спрашивал по поводу книг. Набегает несколько человек, каждый предлагает свой вариант и хуесосит варианты остальных. Кому верить-то? Тот же метанит, упомянутый в шапке - его тут не обхуесосил только ленивый.
Вызывается функция из DLL, эта функция запускает окно WPF
public static void RunWindow()
{
W = new MyWindow();
W.Show();
}
Но проблема в том, что запустив окно, не являющееся модальным, функция доходит до конца и закрывается вместе с окном. Кстати, когда я делал тесты с окном на WinForms, этого не происходило (кстати, почему?).
Я пытался тупо без async поставить while с ожиданием закрытия, но запускается окно по видимому в одном и том же потоке, поэтому интерфейс блокируется циклом. Как решается подобная задача, чтобы немодельное окно работало само по себе, а запускающий метод RunWindow не блокировал его и при этом ожидал завершения работы окна?
The Player's Guide тут несколько раз упоминали - очень годно для старта. Уже слито последнее издание по C#10 и .NET6 (ищи и найдешь). Послее нее уже можешь идти дрочить WPF, если ты именно на указанную тут >>390886 вакансию собираешься. А там по ходу дела доучишь нужные темы более глубоко и освоишь инструменты вроде гита и так далее.
В общем смотрите пик. По задумке это должно обновить запись в базе но это так не работает потому что в момент присвоения Entity framework теряет объект и больше не трекает его в итоге... получается пик номер 2, что бы не присваивать новый объект нужно в ручную перебирать каждое свойство объекта, и это гребаный АД
надо что то в стиле сделатьхорошо(любойисходнийОбект, любойНовыйОбект)
Попробуй загрузить исходный с .AsNoTracking(), а обновленный добавить в dbContext через .Update . По идее при сохранении контекста должен тогда уйти запрос на обновление всех полей у строки с заданным id.
Это было супер быстро, люблю тебя двач, спасибо Анон, два чая тебе, пофикшено,
Куда ему в новый, он только родился по сути.
Раньше же микрософты рекомендовали НЕ использовать префиксы для приватных полей. А теперь наоборот рекомендуют использовать "_", да ещё и "s_" для статических полей. Что за дела? Это вдруг стало стандартом?
> — C# 9 and .NET 5 – Modern Cross-Platform Development (Mark Price) — подойдёт для ознакомления с платформой. Затрагивает все технологии, имеющиеся в .NET (веб, мобильная разработка, машинное обучение), ни во что не углубляясь.
Уже вышла новая редакция с c# 10, в которой автор перешел с вскода на студию.
РЕГИСТР ВЕРБЛЮДА
все это разные вещи
одно филд, другое свойство, а третье вообще не для конструкторов придумано
>Раньше же микрософты рекомендовали НЕ использовать префиксы для приватных полей.
Не рекомендовали использовать прочерк для именования классов. До сих пор не рекомендуют.
Прочерк активно используется в бейсике т.к. там отсутствует чувствительность к регистрам и нельзя сделать так:
value = Value // лично я такое осуждаю
поэтому там делается так:
_Value = Value
Возможно это осуждаю не один я и это очередной пример слияния с уходящим на покой бейсиком.
А еще не рекомендовали префиксы, дублирующие информацию о типе, вроде TextBox именовать как tb_MyText
Ну с филдой понятно, она отдельно. Но зачем кто-то будет делать init и прописывать значения при инициализации, если можно просто сделать конструктор? Непонятно применение.
Вот ты всяким либам сериализации, мапперам дтошек, ормкам расскажи что "юзайте всегда конструктор с параметрами, че это вы".
А, я до таких дебрей пока не дошел еще.
> До сих пор не рекомендуют
Почему же. Вот их свежий кодестайл
https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md
> прочерков в названиях классов
А, не заметил, что ты про классы написал. Но они в целом не рекомендовали прочерк в именах. И ещё "s_", который теперь рекомендуют.
DO NOT use underscores, hyphens, or any other nonalphanumeric characters.
DO NOT use a prefix for field names. For example, do not use "g_" or "s_" to indicate static fields.
Посоветуйте годные видеоуроки на русском, дорогие анончики. Чисто для старта. К книгам и прочим материалам хочу только в процессе перейти
Петцольд лютая душниловка
Я вот тоже не понимаю с чего вдруг в шарпе VB заставляет дублировать информацию, которая и так видна.
Чего мне не хватает, так это как-то визуально отделить поле от элемента графического интерфейса.
Канал #SimpleCode, Христ
Все что угодно, только не Леша Корепанов и Sergey Nemchinskiy, если не хочешь засрать голову бесполезным говном.
>ищи и найдешь
Нихуя не нашел. Просмотрел несколько страниц гугла и яндекса, проверил наши торренты и пират бай, и еще несколько англоязычных, специализирующиеся на книгах. Нашел только третью версию на рутрекере. Надеюсь, она не устарела?
Кроме Симплкода особо никого и нету. Есть еще курс от Ильи Фофанова, но он немножк сумбурный, хотя основы даст. Он щас его выкладывает у себя на канале в свободный доступ. Но Симплкод таки лучше.
>>394116
В ближайшие годы интернет будет по сути впн-онли. Без него получится только нестабильный обрубок, который еще и банить везде будут. Так что добавляй к стоимости интернетов стоимость впн и живи с этим.
>>394128
Немчинский поп-инфу рассказывает, то есть это скорее развлечение, нежели образование какое-то.
>>394157
Третья немного устарела. Новая, так уж и быть, тут: twirpx(тчк)com. Там вообще почти все книги в наиболее новых изданиях есть.
Подчеркивание в начале имен приватных полей уже года 2...3 как стандарт. Это в первую очередь позволяет избавиться от дохуилиона "this." в конструкторах и локальных методах/функциях.
Насчет "s_" пока не встречал. Но большое количество статических полей само по себе не слишком частый случай (в нормальной архитектуре по крайней мере), чтобы выделять для этого отдельный префикс. Тут обычно каждый лепит как привык, ну т.е. с простым подчеркиванием, как у нестатических полей.
>Кроме Симплкода особо никого и нету.
Христ, это что-то среднее между экстримкодом и симплкодом.
Еще он не сходу говорит как надо делать, а сначала идет по предсказуемому, но неправильному пути, показывает какой пиздец из этого получается, а уже потом показывает верный подход.
Канал ExtremeCode на ютубе. Старый плейлист "C# для маленьких и тупых"
Плюс еще несколько видосов того же времени.
Современные не смотри, там они уже просто хуйню ради хуйни снимают.
Такой подход для обучения лютое говно.
Т.е. ты ничего не знаешь по теме, чел начинает тебе что-то рассказывать. Т.к. ты не в теме то нормально проанализировать информацию не можешь и поэтому мозг запоминает ее как есть. А потом тебе так хуяк, "все говно, давай по новой".
На определенной итерации такой хуеты, твой собственный мозг пошлет тебя и ты заебешься разгребать кашу у себя в голове.
Я считаю напротив. Если человек не осознает почему ему нужно следовать конкретным правилам, то он не будет им следовать. Это как копипастить из стакофоверфлоу, в мозгу ничего не задержится. А потом рождаются либерахи, которым видите ли противны старые устои и начинают изобретать велосипеды грабли, на которые наступили миллионы раз их предки.
>А потом тебе так хуяк, "все говно, давай по новой"
Я так детей своих буду учить. Дети в хуй не ставят теоремы в школе — их надо сперва заебать окольными путями, а потом показать, что их гемор можно было заменить одной формулой. Возможно это будет повод меня ненавидеть, но я использую метод дополнительного пряника, чтобы компенсировать потраченное время.
Есть какие-то альтернативные пути?
>Я считаю напротив. Если человек не осознает почему ему нужно следовать конкретным правилам,
Каким нахуй правилам он должен следовать если он самих правил не знает, и даже о чем эти правила говорят.
Это как если прийти в спортзал, тебе показывают приседания, а после того как ты наприседаешь, тебе скажут, "ну ты понял, почему ты таким образом грудные не накачаешь? Поэтому давай я тебе покажу отжимания, вот их нужно было делать"
> "ну ты понял, почему ты таким образом грудные не накачаешь? Поэтому давай я тебе покажу отжимания, вот их нужно было делать"
В данном примере сложно применить такой подход — он будет либо незаметен, либо деструктивен для здоровья. На примере с кодом это лишние 10 минут, зато более информативен.
Шарпаны. Что нужно в .editorconfig прописать, чтобы нельзя было русские (и вообще unicode) символы использовать в именах переменных, классов, интерфейсов и т.д.?
Хз, но я нашел нужный тебе System.IO в System.Private.CoreLib.
Бамп вопросом или можно заюзать обфускатор, то какой? Все что я читал, было написано лет 10 назад и все склонялись к мнению, шо говно.
У меня нет ничего суперсекретного, нормальный программист сделает без меня и намного лучше, но я открываю дикдотпиком и там просто картина маслом.
Емнип, код жабы и шарпа никак нормально не обфусцировать.
Бамп вопросу.
Поверь - проще забить хуй. Проще не в том смысле, что обфусцировать сложно, а в том, что тебе должно быть насрать на то, что кто-то посмотрит твой код.
>тебе должно быть насрать на то, что кто-то посмотрит твой код
Большой и богатый энтерпрайз не может себе такого позволить. Во-первых, могут спиздить какие-то решения, обеспечивающие конкурентное преимущество. Во-вторых, недоброжелатели могут в этом коде найти уязвимости и использовать их в своих целях.
Как снизить потребление памяти в связке webApi+Sqite без EF?
Просто как. Оно жрет в определенный момент 100МБ. Что как-то много. Типа у меня просто один поток, который берет из БД следующую задачу на чтение чего-то из стороннего апи, читаю, сохраняю в БД результат. При каждом запросе к БД - руками открываю соединие, закрываю руками, диспозю. Вроде как особо объектов не создаю, но 100МБ - жрется. Если я эти же задачи реализую путем чтения из файлика - такой фигни нет, но это геморно и вообще тупо. Из объектов что создаю - это как раз сущности из БД, чтобы задачу достать и послать куда надо HTTP-запросец, потом - получить ответ и все.
Код примерно следющий:
while(true){
var task = _repo.GetNextTask();
var taskResult = _api.ExecuteTask(task);
_repo.SaveResult(taskResult);
Thread.Sleep(500);
}
Ты долбоеб или как. Энтерпрайз наружу максимум апиш-ку от своего приложения выставит, и то не всю. А все остальное будет крутится в его внутренней сети под впн-ом и ты самого приложения даже и не увидишь.
Этого >>394773 двачую. Это во-первых.
Во-вторых. Пиздинг чужих решений - это хуета из под коня. В реальном мире важнее занять первыми нишу и как можно большее количество пользователей захапать, а не ебаться с тем чтобы 2 года страдать непонятной хуйней, в итоге пока вы MVP выкатили - все пользователи у конкурента и фич там столько, что даже если они откроют исходники - вы на их анализ и перетаскивание себе - еще 2 года потратите.
В-третьих, использование уязвимостей в своих нехороших целях - это суд и 100500 лярдов долларов и несколько пожизненных, потому что в контексте вреда - вы уже можете нарисовать любую сумму, а каждый случай использования уязвимости рассматривается в международных судах как отдельное нарушение. Т.о. если кто-то нашел уязвимость - он обязан сообщать, если сообщения не было - суд; если было, а вы такие ебланы и проигнорировали, то хоть сколько ты там код прячь - вы ебланы. Ну и да, Кому надо - тот и до аппаратного уровня дойдет и что угодно сделает, а потому страдать непонятной хуйней ссылаясь на каких-то там нехороших людей - это детский лепет.
сервис - широкое понятие от "вечноработающего демона" до обычного сервисного класса, в который впихнута какая то логика
Тебе нужно почту отправить... ты пишешь код отправки (подключение, отправка, отключение) и тебе нужно его куда то положить чтобы был порядок. Вот так и рождается у тебя сервисный класс
Сталкивался. И даже видел как народ несколько месяцев обфусцировал библиотеку которой не должно было быть в сертифицируемом софте. А так же наблюдал грустные ебала руководства которые эту идею выдали и потом не прокатило, потому что вскрывается это на раз.
Если у тебя опсек, то ты явно не будешь критические модули писать на языках подобных джаве/шарпу, или если будешь, то не будешь выставлять наружу ничего критического на чем тебя можно пробить.
> Когда класс пойдет в папку Models, а когда в Services?
В модель тот что ничего не делает и нужен для того чтобы данные представлять
В Services - когда что-то делает.
User - модель
UserEmailSendService - сервис
А как тогда разделять бизнес логику и логику приложения?.. (domain/business и application)
Ее разделение не на уровне в какую папочку что ложить происходит.
Короче. Смотри код, это почти кристально чистый пример того как дела делают сейчас
https://github.com/dotnet-architecture/eShopOnContainers
>Если у тебя опсек, то ты явно не будешь критические модули писать на языках подобных джаве/шарпу
И тут в комнату заходит бабло. У тебя целый офис шарпистов, вся инфраструктура под него. Нанимать целый новый отдел, включать его в работу, налаживать взаимодействие команд - это ебейшие затраты денег и времени.
Спасибо!
>И тут в комнату заходит бабло. У тебя целый офис шарпистов, вся инфраструктура под него. Нанимать целый новый отдел, включать его в работу, налаживать взаимодействие команд - это ебейшие затраты денег и времени.
И поэтому ты идешь на двач, спрашивать советов, как тебе лучше обфусцировать свое дерьмо. Good choice.
Стринг же не снижает перформанс при парсинге и форматтинге.
Оверинжиниринг и обобщение сверх меры, так ведь?
>какие-то решения, обеспечивающие конкурентное преимущество
Анон, код у всех примерно одинаковый сегодня.
Это в 1980-х в какой-то команде мог оказаться гениальный красноглазик и порвать рынок суперфичей. Сегодня прорывов в софте нет и не будет.
Ты можешь гарантировать, что это всегда будет точка или запятая? Вот для какого-нибудь научного софта для разделения целой и дробной части нужно будет .. использовать. Что будешь делать, если у тебя char использовался?
Ну если ты не совсем макака, то можешь поковырять сорсы rolsyn'а, там есть весь код, который из шарпа делает IL, и который из IL делает машинный код. Дальше покури, как устроены exe-шники под винду, и этот машинный код запакуй в exe-шник и его отдавай конечному потребителю. Наверняка кстати что-то такое опенсорсное есть.
Так-то ты прав, но. Для таких интересных случаев, как и например для 20-ричных систем исчисления племени охотников на крокодил с озера Чад, можно будет запилить свой кастомный нумбер формат инфо, парсер и форматтер, а для 99.9999999% юзеров съэкономить машинные такты. Всяких стандартных интерфейсов для такой кастомизации в шарпе предостаточно.
Тот же юнити транспилирует шарп в плюсы. Что мешало, например, сделать также и потом биндить нативную дллку?
Потому что у нас есть CLR. Нахуй в какие-то там плюсы транслировать, если байткод после оптимизаций - почти не отличается от плюсового?
>Нахуй
Человек задался вопросом как обфусцировать библиотеку. Вот - за этим. Чтобы дотпиком любой школьник не смотрел куда не положено.
>Что мешало, например, сделать также и потом биндить нативную дллку?
Ничего не мешало, так же как не мешает делать и сейчас. Гугли AOT компиляцию в C# и пользуйся на здоровье.
Как дедушка ленин завещал. "Учиться, учиться, учиться."
Учить теорию, начинать с простых примеров. Задрачивать их до автоматизма. Переходить к более сложным и так же задрачивать. Удачные решения разбирать и записывать. Чаще использовать в работе и т.д.
Другого способа нет.
Регулярки никто не читает. Их пишут один раз для конкретной задачи.
Их проще переписать с нуля, чем искать ошибку.
Это как скрипты для билда или установки, их проще выкинуть и написать новые.
Ну а про писать сложные. Уже классическая хохма: "У вас проблема, и вы собрались использовать регулярные выражения для её решения. Теперь у вас две проблемы."
Так что вердикт: не нужно.
Ситуация:
Приложение Application.exe импортирует unmanaged либу по некому специфическому пути:
[DllImport("E:\Libraries\Biba.dll")]
А та библиотека, в свою очередь, импортирует managed библиотеку по локальному пути
using Boba;
Библиотека лежит там же в "E:\Libraries\"
Я-то думал, что Biba.dll будет искать Boba.dll относительно своего нахождения, а оказывается библиотека ищется относительно пути запускающей программы Application.exe
Как мне заставить Biba.dll искать либу относительно своего адреса?
Че бесит, что если бы я Boba.dll сделал тоже unmanaged и импортировал его так:
[DllImport("Boba.dll")], то искался бы относительно импортирующего.
Тебе не позавидуешь.
Флаттер на самом деле по ощущениям как сын шарпа и питона какого-нить. Я его не учил, разобрался по гайдам и чисто по ощущениям нашлепал нужную себе штуку, получилось даже норм.
>>395850
Как же бесит.
>Просто добавьте в конфигурацию вашего приложения probing privatePath
Это не мое приложение — я делаю плагин. Приложение подгружает мою либу, видит референс и пытается искать его по месту своего запуска, а не в папке с плагинами.
ууух, бля. И что за все время существования нельзя было сделать возможность установки относительного пути? До сих пор в свойствах netframework нельзя установить относительный путь запускаемого приложения. Энтерпрайз-лежбище котиков.
Нарыл "позднее связывание"
Вы шо, ебанулись такие простыни, да еще через медленный рефлекшн делать? Методы и неймспейсы использовать "вслепую" — без IntelleSence. Я ебал в рот. Это же смешно, это издевательство над здравым смыслом. Огороды тупо из-за того, что нельзя указать относительный путь, хотя это возможно реализовать с неродной unmanaged библиотекой.
Ещё до кучи, нужен класс, который получает в качестве аргумента строку типа: "1 x + 2 * (3 - 4 / x)" и имеет метод double Calculate(x), который это бы вычислил. Как это реализовать?
Что почитать на эту тему?
А что там в сравнении с Авалонией и Уно? Юзал кто-нибудь эти поделки?
То есть единого решения от самих разработчиков языка у вас нет?
Да, есть. В .csproj надо прописать:
<GenerateDocumentationFile>True</GenerateDocumentationFile>
Или всё опять нужно велосипедить?
Имеем енумчик:
public enum BinaryInfixOperator
{ Add, Subtract, Multiply, Divide}
Надо, чтобы BinaryInfixOperator.Add.ToString() выводился как "+", а не как "Add".
Разве переменная, которую он использует не удалится сборщиком мусора при выходе из функции?
Не, это вряд ли.
Переменная-то удалится, а вот обект процесса в химе нет. Он будет висеть и ждать сборки мусора. А заодно и держать системные неуправляемые ресурсы (дескрипторы и т.д.), которые только при финализации перед уборкой данного объекта освободятся. С using'ом он тоже в химе до сборки мусора висеть будет, но системные ресурсы отдаст сразу.
* в хипе висеть будет
Process.GetProcessesByName()
который возращает массив тех же процессов и не может быть using? Да и MSDN не используются юзинги.
https://docs.microsoft.com/ru-ru/dotnet/api/system.diagnostics.process.getprocessesbyname?view=net-6.0
Мне кажется это пустая перестраховка.
Ну, в случае с массивом нужно просто в цикле для каждого объекта вручную метод .Dispose() дёрнуть. Ну или можешь свою обёртку написать и ее в using'е использовать, чтобы при выходе из блока все переданные в нее объекты задиспозились.
https://pastebin.com/1JY3n29h
https://pastebin.com/aqZU1vGy
первая попроще потому что там решили не заморачиваться с типом параметра в Action (а также с его возможным отсутствием)
Во втором случае это сделано
а через интерфейс тут 2 причины
1 очень маловероятно - ну чтобы работая с командой эти методы не путались в подсказке
2 крайне вероятно - так было тупо в нагугленом примере с которого каждый пилит свой велосипед
и это еще не накручено. Вот еще больше накручено https://pastebin.com/zbrtXwBD
Тебе надо привести обратно к твоему классу B1(или что там у тебя)
Читай про даункаст и апкаст.
Когда ты B1:B хранишь в массиве типа B, то ясен пень у тебя доступен функционал онли B, но доп свойства B1 не уничтожаются, а прячутся.
Т.е. тебе надо что-то вроде этого:
MyClass B1 = Array[0]; // я бейсикодебил, мог что-то проебать в синтаксисе
С этого момента у тебя снова будут доступны все доп свойства.
Пасиба, анон. Тоже думал про даункаст (или это апкаст, хз), но как-то он с первых попыток не получился и я забил. А сейчас поковырял еще и эта хуета наконец заработала. Фух, день прожит не зря.
Простите, Тамара Николавна, что мой негодник опять натворил?
На самом деле это вселенский долбоеб-беспризорник, срущий в каждом профильном треде.
Дезва это кал для долбоёбов.
Имхо ему в вашем треде самое место. А то у вас там весь мир на жабе написан, а на дотнете до сих пор ничего (вообще ничего, воооообще, лол).
НИЕЕЕЕТ!!!!! ТУПОЙ ЖАБАЖАУН!!!!! ПЕТУШАРП КРОСС-ПЛОТ-ФОРММ-МЕНН-ННЫЙ И ДОТ! ТВЕРДО И ЧЕТКО!!!!!!
Потому что операции двухместные
Ох как порвался, любо дорого посмотреть!
Ебло, хоть на двоичном коде фичи пиши. Если ты делаешь то, что нужно, оно работает как нужно и ты ещё за это бабки получаешь - ты уже победил.
Фитчм
Не обращай внимания. Это наш локальный жавашиз. Можете его зарепортить
Конченный мудак который нихуя не обьясняет
Какие-то свои винформочки дрочит и пропускает 70 процентов всей темы
ICommand.CanExecute
Это называется явная реализация интерфейса (implicit interface implementation):
https://stackoverflow.com/questions/143405/c-sharp-interfaces-implicit-implementation-versus-explicit-implementation
Что за санкции? А вообще ты кал прочитал, троллсен это кал, почитай барта де смета хотя бы.
Можешь подробнее расписать чем он плох? куда ни глянь, везде пихают троелсона да штился(based)
Я вообще не представляю зачем его рекомендуют, чувак просто не умеет писать, он излагает не последовательно, не даёт точных определений а просто "пиздит" на заданную тему довольно сумбурно в результате если вдумыватьв в текст будет больше вопросов чем ответов.
Единственное моё объяснение почему он стал популярным - т.к. он описывает не только язык а еще кучу прикладных фреймворков вроде асп и впф (другое дело что там описание такое краткое что кодить на них все равно не сможешь) и видимо нашел свою аудитория среди западных студентов раздолбаев которые пытаются сэкономить и покупают одну книку вместо десяти.
тогда такой вопрос: достаточно ли сайта metanit.com для основ, а далее изучать конкретные направления по составляющи? Т.е. в полной ли мере там раскрываются основы?(Планирую подтянуть ещё одного человека не хотелось бы обосраться)
Так ты уже рихтера прочитал, это мега продвинутый уровень, зачем тебе курсы?
Я хз про курсы, не воспринимаю их, только по книжкам все изучаю.
> вба это говно мамонта
Тем не менее, ты прямо щас можешь открыть любой из МС офисов и написать на нём скрипт.
Странно, когда айтишники в одном месте кудахчут
> отточеная проверенная временем технология
а в другом месте
> говно мамонта
> dll запускает окно и тут же закрывается (потому что окно не модальное)
Не потому.
А потому, что в длл нет майнлупа. Когда-то давно я боролся с этой проблемой и как-то заборол. Но то было вообще не в сишарпе, а во фрипаскале, и я не помню, как заборол проблему, а если бы и помнил, тебе вряд ли это помогло бы.
ЕМНИП, майнлуп создаётся, когда мы пишем Application.Run(); и доступ к нему через инстанс Application. И вроде как я пробрасывал ссылку на этот инстанс из приложения, в либу. Что-то как-то так было вроде.
Вы видите копию треда, сохраненную 4 августа 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.