Вы видите копию треда, сохраненную 10 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Литература вторым постом
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
А у вас как было, когда вы вкатывались? Склоняюсь к мнению, что мне стоит почитать общую информацию о работе браузеров и сетях.
У тебя есть несколько вариантов на мой взгляд. Спиздить курсы где рассказывают все рассказывают досконально как будто душевно больным itvdn например либо рекурсией гуглить самому едва ли не каждое слово а затем непонятные слова которые видишь в процессе гугления. Ну либо книги тут в шапке есть, правда сам с ними дел не имел, ничего сказать не могу.
Если тебя веб-разработка интересует (а другой мало), то не нужно знать.
Некоторое время были непонятки, но решая вопросики все прояснилось.
Че там, блядь, знать-то? XAML - обычный xml, по сути, под копотом оно тебе в объектики собирается, охуеть как сложно, биндинги, ну биндинги и хули, что отписываться нужно если решил INotifyPropertyChanged, ну, блядь, это банальность же.
Я вообще не понимаю, что современные вкатыши хотят делать-то на работе и что думают ты там делать будешь. Тебе скажут - ты программист - бери в руки ассемблер и пиздуй вилкой ковырять регистры - пойдешь как миленький, никуда не денешься, а не пойдешь - ну, отправишься на улицу.
Программист, это в первую очередь - инженер, а инженер - это тот, кто не знает фраз: не могу, не знаю, не хочу. Это, считай, твоя должностная обязанность: по первому зову все что скажут делать: скажут верстать - будешь, скажут алгоритм для вычисления оптимального пути придумать и чтобы был круче существующих на 20% - придумаешь, а скажут - пили 5 лет круды - будешь пилить круды. Такая судьба у инженера, который не хочет быть кабанчиком.
1. Нужно было не просто учить, а пробовать писать. До аналога хоста я к 5й лабе в вузе дошел, когда заебался каждый раз кучу одинаковых хуевин делать чтобы графика была на сишечке.
2. Нужно было про паттерны читать, неткор решил наконец хоть немного стать похожим на что-то удобное для разработки.
3. Коды открыты, нихуя там сложного нет.
4. Как программиста - тебя ебать это не должно. Ты же не думаешь в момент написания программы, что там под каптом электрончики транзисторы теребят, тебе до пизды это, как до пизды в 99,(9) случаев во что там с точки зрения машинных команд собирается твой код, как до пизды большинству что под капотом у листа или как так получается что html написанный буквами в браузере превращается в пямоугольники, таблички, списки и вообще всеми цветами переливается.
> А у вас как было, когда вы вкатывались?
Только на первых курсах, пока не осознал, что программист работает с абстракциями. Конечно, базу знать хорошо бы, но, по факту, не это важно в программировании. Ты, блин, свой-то код через полгода-год не будешь узнавать и не сможешь с ходу сказать как он работает, если там хотя бы 20к строк уже набралось.
Дядь, расслабься пожалуйста, я не ворочу еблом. Я знаю слово "надо", и если надо учить но выучу. Просто мне больше по кайфу в шестеренках ковырять нежели рисовать йоба-дизайн, и поэтому уточняю у тех кто хорошо знаком с внутренней кухней, насколько мое " по кайфу" сопоставляется с нынешними реалиями веб дева. Может у многих компаний есть флешмоб поддрачивать бэков лепить какие нибудь приложухи для внутренних задач, откуда я это узнаю если не у того кто собаку схавал в этом дерьме. Домой аригато.
Лол, видели бы люди со стороны как дизайн 99% внутряка выглядит: табличка-табличка-поле-поле-кнопочка-лейбл и это все стандартом абсолютным и срать все хотели на разные разрешения, красивости, анимации и прочее, это внутряк, он должен какую-то внутреннюю задачу решать даже на баги некретичные похуй, все свои, обматерят в курилке, да попросят что-то в следующей сборке поправить.
А сделать таки заставить могут, если задача такая стоять будет и нет тех кто с этим лучше справится. Просто, блин, УЧИТЬ? Ты берешь, гуглишь, 2 вечера читаешь доки - делаешь, что там учить-то?
Большое спасибо за вменяемый ответ!
Забей хуй на то, как это работает, тебе выше правильно сказали аноны. Просто делай и все. Когда привыкнешь к тому, как ASP работает, как на нем что-то базовое и не только делать - тогда уже можно лезть в пизду и пытаться вникнуть, что за черная магия происходит под капотом, и то при необходимости.
Я лично неделю уже уделяю несколько часов в день на изучение ASPа по книге Фримана. Первые несколько дней хватался за голову от того, как все сложно, непонятно и что за черная блядь магия в каждой строчке происходит. Сейчас уже попривык ко всякой ебале. Копипасчу все из книги нещадно, но хотя бы начинаю понимать, что я копипасчу. Сегодня вот даже смог написать свою первую полностью самостоятельную строчку кода - вроде мелочь, а по сравнению с тихим ужасом от первого взгляда на ASP - ебать прогресс.
мимо вкатун
Чем C# отличается от Python?
Ну хотя бы типизацией.
А то ну основы, конечно, не изменились, но все-таки хочется освежить знания
Вот есть стандартный способ как поменять две переменных местами с помощью третьей:
int c = a;
a = b;
b = c;
в CIL он выглядит вот так:
IL_0022: ldloc.0
IL_0023: stloc.2
IL_0024: ldloc.1
IL_0025: stloc.0
IL_0026: ldloc.2
IL_0027: stloc.1
Ок. Все понятно.
------
Теперь берем метод через деконструкцию кортежа:
(a, b) = (b, a);
Смотрим в дамп, а там практически то же самое, только чуть в другом порядке:
IL_0022: ldloc.1
IL_0023: ldloc.0
IL_0024: stloc.2
IL_0025: stloc.0
IL_0026: ldloc.2
IL_0027: stloc.1
Почему так? По логике деконструкции он же должен взять два значения, закинуть их в стек, а потом просто забрать их оттуда в обратном порядке, т.е. вот так:
IL_0022: ldloc.1
IL_0023: ldloc.0
IL_0024: stloc.1
IL_0025: stloc.0
Зачем он во втором способе заводит лишнюю переменную? Или эта херня уже дальше потом оптимизируется при конечной компиляции?
Вот есть стандартный способ как поменять две переменных местами с помощью третьей:
int c = a;
a = b;
b = c;
в CIL он выглядит вот так:
IL_0022: ldloc.0
IL_0023: stloc.2
IL_0024: ldloc.1
IL_0025: stloc.0
IL_0026: ldloc.2
IL_0027: stloc.1
Ок. Все понятно.
------
Теперь берем метод через деконструкцию кортежа:
(a, b) = (b, a);
Смотрим в дамп, а там практически то же самое, только чуть в другом порядке:
IL_0022: ldloc.1
IL_0023: ldloc.0
IL_0024: stloc.2
IL_0025: stloc.0
IL_0026: ldloc.2
IL_0027: stloc.1
Почему так? По логике деконструкции он же должен взять два значения, закинуть их в стек, а потом просто забрать их оттуда в обратном порядке, т.е. вот так:
IL_0022: ldloc.1
IL_0023: ldloc.0
IL_0024: stloc.1
IL_0025: stloc.0
Зачем он во втором способе заводит лишнюю переменную? Или эта херня уже дальше потом оптимизируется при конечной компиляции?
> Или эта херня уже дальше потом оптимизируется при конечной компиляции?
Да. После компиляции у тебя пикрил получается.
Ебать жалко тебя. Ты судя по всему ни разу в достойной компании не работал, где знают про зоны ответственности работников
Берешь винформс и делаешь. Что конкретно тебе не понятно? Если хочешь готовый код, то заходишь на гитхаб и вбиваешь в поиск notifier и фильтруешь результаты по сишарпу
Изучи класс TimeSpan и его свойства.
azure
у меня много где написан код вида
T[] array;
for (int i = 0; i < array.Length; i++) {
int nextIndex = i + 1;
if(nextIndex == array.Length) nextIndex = 0;
}
подскажите изящный способ без if получать 0 на последней итерации.
Добавляй в конец массива первый элемент этого массива, в итоге получится:
for (int i = 0; i < array.Length - 1; i ++) {
int nextIndex = i + 1;
}
>совсем говноспособ же.
Почему ты так решил? Говноспособ или нет, но работать будет быстрее чем деление по модулю при каждой итерации.
так делают только дегенеративные личности. ты любитель наступать на грабли? подкидывать себе какашки в песочницу?
через пол года эта логическая лапша прокиснет. открываешь код а потом думаешь "а почему тут лишний индекс. а почему в него чтото суётся".
или дальше код пишешь и забываешь что тебе надо копировать лол первый индекс в последний при повторной подобной итерации.
нельзя использовать Length/Count как указатель количества элементов. надо вычитать единичку!
ну и наконец случаи когда надо написать просто нормальную библиотечную функцию у которой инпут и аутпут без выебонов.
итд
код надо писать так чтобы ты мог потом в него заглянуть и прочесть не хватаясь за голову. нашел, блядь, что обменивать. читаемость всего связанного куска кода на разницу между делением по модулю и его отсутствием.
WPF, есть одна кнопка в гриде, в одной колонке. Могу ли я во view model кодом растянуть эту кнопку на несколько колонок?
Ну запили свойство во виeв модели, ButtonColumnSpan, потом в кнопке в xaml Grid.ColumnSpan="{Binding ButtonColumnSpan}".
async ValueTask foo(){
if(isConfigured) {.....}
isConfigured = true;
....
}
является потоко безопасным или нет? Подозреваю что нет. А как его по нормальному переписать? Шарп ругается на локи в асинке, а плодить таску семафором через semaphore.waitasync, ради такой простой фигни, как-то не хочется.
Делай через Interlocked.CompareExchange, только придётся либо в int переводить и обуславливаться тем что 1 это true, а 0 это false, либо боксить булево значение в объект.
Что-то вроде такого, предполагаю, прокатит https://pastebin.com/ApGKuZQV. Но в некоторых случаях double-checked locking считается антипаттерном.
Спасибо, перевел бул в инт просто.
Алсо, вопрос по этим мутексам и семафорам. Правильно ли я понимаю, что когда пишу sem.Wait() или lock(), то поток становится залоченым и просто ждет, когда нужный ресурс освободится? И в это время ничто в программе не может использовать этот поток?
Почему тогда в стандартную либу не добавили асинхронные мутексы, локи и тд?
Все таки убрали из шапки про "язык богов".
Для асинхронного лока есть SempahorSlim с его WaitAsync. Переписывать старое просто нет смысла.
заебало - постоянные, бесконечный спринты, ебля с юаем и, вообще говоря, история далекая от настоящего проганья
в общем, знаю юнитишные си шарп и питон (довольно много на нем пиходилось писать)
Куда можно вкатиться с такими знаниями без потери в зп? (была 80, тк контора очень мелкая) В бекенд реально?
Реально только в другую бнити контору, иначе охуеешь от того сколько всего нужно знать. Помимо бекенд фреймворков вида асп.нет и сигналР, нужно еще SQL щнаит на уровне не хуже шарповского. Дополняется это всё знанием JS и базовым знанием html+css. Если уверен, что сможешь всё это освоить и не потерять в зп, то дерзай. Но я бы лучше в текущей сфере развивался, благо юнити не теряет в популярности.
У нас их нет, у нас все фуллстеки с зп от 100-140, при этом нанимают только если у тебя уже был опыт работы во фронте.
Да, открой hh.ru, там картина примерно такая же.
кек. а кодзимой то стал? разбогател? игру мечты выпустил? есть что показать?!
мимо пилю велосипеды на юнити 6 лет
наверно интересно. мне вот не повезло ничего такого. хотя я не очень искал. в итоге все шесть пилил велосипеды для проекта мечты.
а какие скиллы нужны то чтобы дронами в промышленности управлять?
Ох, братиш
Ну, в целом то, дохуя. Но смотря что
У нас был стартап, поэтому область отвественности была довольно обширная
Ну понятно, что на юнити висит юай и логика - тут все мало чем у игроделов отличается
Помимо проганья нужен матан и знание основ теории управления (но я этого касался поверхностно, другие ребята занимались управлением).
Я сам сперва, помимо самого юнити, в соляну, потом уже с тимой пилил зрение - обработку облаков точек с ргбд камеры (ну тут был питон).
Короче зависит от размера команды: если мелкая, как у нас, то нужно много чего знать. Если штат крупный, то у каждого будет четко ограниченная роль и необходимый набор скилов. К слову, мы потом набирали людей на юнити именно геймдевных - для всяких оптимизация и прочего, требующего хороших знаний специфики юнити
Всегда ловил лютый криндж с языков типа Java и C#, точнее не с самих языков, а инфраструктуры и специфики разрабов. Всё такое официальное, стандартизирован каждый пук, тысяча уровней абстракции с модными билдерами, фабриками, фабриками билдеров, билдерами визитёров стейта стратегии фабрик и т.д. Ещё очень угараю всегда с сертификаций всяких майкрософтов. В итоге все это вместе всегда вызывало чувство некоей КОЛХОЗНОСТИ происходящего.
Это все так на самом деле? Или мое впечатление ложное и обстановка кодоебов на шарпе такая же приятная, как и кодоебов на всяких Го/Питонах и т.д.? Или реально всё так официально-деловито? Если что не траллинг, прост рил интересно.
а вообще не так и много и довольно размыто. разве что теорию управления я как что-то целостное никогда не изучал, но учитывая что меня обычно звали в проекты делать ИИ, то наверно я знаю больше нуля. и анализ облака точек для меня не кажется таким уж сложным учитывая что мой первый крупный самостоятельный проект был это был навмеш собранный на коленке. пикрелейтед. видеорелейтед.
а че там ещё нужно? вычислительные шейдоры? новомодная хуйня вроде DOTS?
Паттерны проектирования не только в C#/Java применяются. И применения паттернов позволяет писать безопасный код, который устойчив к изменению и расширению. При этом сами языки не требуют от программиста управления памятью. Что в целом делают эти языки отличным выбором для крупных компаний с большой кодовой базой.
Restoring packages for E:\хуйпизда.csproj...
GET https://api.nuget.org/v3-flatcontainer/mysql.data/index.json
Unable to load the service index for source https://dotnet.myget.org/F/roslyn/api/v3/index.json.
Response status code does not indicate success: 404 (Feed does not exist.).
Time Elapsed: 00:00:01.1212230
========== Finished ==========
Это у меня какая-то хуйня с вижаком, или в майкрософте где-то обосрались?
Да, но почему он вообще в неё ломится?
да я не пытаюсь тебя как-то отпугнуть типа "смотри как я крутой, я облака точек знаю как обрабатывать"
типа камон, мне до мудрых дядек, знающих все еще хуячить и хуячить
Да и задачи были не самые сложные - классика робототехники: найти объект в облаке, движение по траектории (ну тут, правда, все чисто на RGB + D канале)
просто я к тому, что чистым кодингом тут не отделаешься, скорее всего, нужно знать еще что-нибудь из роботоетехнической области
шейдоров каких-то сложных у нас не было
У тебя, кстати, интересный опыт, как мне кажется
расскажи вообще, что за проекты с ИИ (Примерно)? навмеш на колентке это просто пет проект? Ты работаешь именно с юнити?
Просто у меня вот этап смены работы и я прям парюсь: валить ли с юнити или оставаться
Буду рад, если ответишь)
Вопрос вообще не об этом.
Короче хрень какая-то была. Я поудалял из инсталлера ненужные компоненты, обновил вижак до самой последней версии, сделал ему "восстановление", и оно всё равно после этого не работало. Ну думаю, пиздос, придется писать им куда-нибудь. Нажал Install ещё раз чисто чтобы скопировать текст ошибки, а оно взяло и установилось.
да не мне так интересно какой вообще минимальный набор скиллов требуется за пределами гейдева. что-то такое поверхностное то на юнити ебошить то много знать не надо. а то открываешь порой требования для обычных погромистов а там список всяких интересных требований. открываешь к юнити а там можно сформулировать как "не быть говноделом" и "знать какую-то узкоспециализированную хуйню"
>расскажи вообще, что за проекты с ИИ (Примерно)?
всякие. пару раз делал и доделывал ИИ для стратегии, для РПГ одной делал, для хуевого шутана. ничего такого чем я бы гордился. обычно задача ставится "чтобы расширять можно было не через жопу и без моей помощи", а не какие-то интересные решения чтобы принимало. чтобы интересные решения принимало это надо обычно в проект нанимать отдельного человека у которого там своя атмосфера в проекте.
>навмеш на колентке это просто пет проект? Ты работаешь именно с юнити?
юнити просто знаю лучше всего. так то и в некоторых других движках кнопки найти смогу если что. навмеш скорее мой основной проект в портфолио и проект над которым я работаю дольше всего. когда начинал над ним работу у юнити вместо навмеша был пиздец который билдился только в эдиторе, а я хотел именно процедурные уровни. были конечно другие решения для навигации но они мне все не нравились и я стал ебошить своё. в итоге лол юнитеки допилили себе навмеш до того состояния который мне был нужен ранее, но к тому моменту я запилил уже своё получше. вообще навигация конечно мегаважна в ИИ, так как позволяет решать какие-то пространственные задачи. например в той РПГ мне дали задачу научить ИИ использовать предметы в запертых комнатах лол. то есть ИИ должен был построить путь в запертую комнату(уже интересное начало), в этом пути должен был содержатся флажок "тут заперто", вернуть ИИ информацию где находится ключик от комнаты и сказать чтобы он пиздовал туда где ключик, взял ключик, вернулся к запертой двери, отпер дверь, наконец применил предмет в запертой комнате. вроде тривиальная задача, а чем больше информации доступно изначально тем проще её решить. идеально если она доступна сразу вся чтобы поток думалки не лез лишний раз в поток навигации. а ведь задача может усложнится! когда например от комнаты нужно два ключика и один из них у патрулирующего стражника, тогда надо ещё знать какой из ключиков ближе учитывая расстояние хождения.
ну а могущество залезть в генерацию навмеша и какую-то свою хуйню сделать это конечно замечательно. например лол вон у меня есть генерация зон доступных только "присев" где соответственно сложней передвигаться. что-то такое в стандартном навмеше сделать несколько проблемно. или вон та информация о "укрытиях" тоже результат генерации. не руками же такое расставлять!
ну а так то разумеется не один навмеш я умею. умею вычислительные шейдоры, обычные шейдоры, всякую геометрическую хуйню, допиливать функционал самого юнити. это наверно чаще всего просят. ну и по мелочи. вообще я могу тут весь тред засрать всякими интересными картинками и видосиками.
>Просто у меня вот этап смены работы и я прям парюсь: валить ли с юнити или оставаться
с одной стороны на юнити самый наверно повышенный спрос, а с другой стороны много просят тривиальную хуйню а платят за неё мало. но это я сужу с точки зрения гейдева. а тут управление дронами охуеть.
да не мне так интересно какой вообще минимальный набор скиллов требуется за пределами гейдева. что-то такое поверхностное то на юнити ебошить то много знать не надо. а то открываешь порой требования для обычных погромистов а там список всяких интересных требований. открываешь к юнити а там можно сформулировать как "не быть говноделом" и "знать какую-то узкоспециализированную хуйню"
>расскажи вообще, что за проекты с ИИ (Примерно)?
всякие. пару раз делал и доделывал ИИ для стратегии, для РПГ одной делал, для хуевого шутана. ничего такого чем я бы гордился. обычно задача ставится "чтобы расширять можно было не через жопу и без моей помощи", а не какие-то интересные решения чтобы принимало. чтобы интересные решения принимало это надо обычно в проект нанимать отдельного человека у которого там своя атмосфера в проекте.
>навмеш на колентке это просто пет проект? Ты работаешь именно с юнити?
юнити просто знаю лучше всего. так то и в некоторых других движках кнопки найти смогу если что. навмеш скорее мой основной проект в портфолио и проект над которым я работаю дольше всего. когда начинал над ним работу у юнити вместо навмеша был пиздец который билдился только в эдиторе, а я хотел именно процедурные уровни. были конечно другие решения для навигации но они мне все не нравились и я стал ебошить своё. в итоге лол юнитеки допилили себе навмеш до того состояния который мне был нужен ранее, но к тому моменту я запилил уже своё получше. вообще навигация конечно мегаважна в ИИ, так как позволяет решать какие-то пространственные задачи. например в той РПГ мне дали задачу научить ИИ использовать предметы в запертых комнатах лол. то есть ИИ должен был построить путь в запертую комнату(уже интересное начало), в этом пути должен был содержатся флажок "тут заперто", вернуть ИИ информацию где находится ключик от комнаты и сказать чтобы он пиздовал туда где ключик, взял ключик, вернулся к запертой двери, отпер дверь, наконец применил предмет в запертой комнате. вроде тривиальная задача, а чем больше информации доступно изначально тем проще её решить. идеально если она доступна сразу вся чтобы поток думалки не лез лишний раз в поток навигации. а ведь задача может усложнится! когда например от комнаты нужно два ключика и один из них у патрулирующего стражника, тогда надо ещё знать какой из ключиков ближе учитывая расстояние хождения.
ну а могущество залезть в генерацию навмеша и какую-то свою хуйню сделать это конечно замечательно. например лол вон у меня есть генерация зон доступных только "присев" где соответственно сложней передвигаться. что-то такое в стандартном навмеше сделать несколько проблемно. или вон та информация о "укрытиях" тоже результат генерации. не руками же такое расставлять!
ну а так то разумеется не один навмеш я умею. умею вычислительные шейдоры, обычные шейдоры, всякую геометрическую хуйню, допиливать функционал самого юнити. это наверно чаще всего просят. ну и по мелочи. вообще я могу тут весь тред засрать всякими интересными картинками и видосиками.
>Просто у меня вот этап смены работы и я прям парюсь: валить ли с юнити или оставаться
с одной стороны на юнити самый наверно повышенный спрос, а с другой стороны много просят тривиальную хуйню а платят за неё мало. но это я сужу с точки зрения гейдева. а тут управление дронами охуеть.
наверно ещё это покажу. один из моих любимых проектов.
Как в SeleniumWebDriver делать прокрутку страницы ?
Именно что бы страничка неспеша так скролила вниз?
А то что то не выходит найти инфы.
Или все делать через JSExecutor ?
блин, вообще прикольно
а если не секрет, тебе сколько лет? Ты работаешь юнити прогером сейчас? или только проектные истории?
1680x966, 0:15
уравнение навье стокса вообще клево! смотришь на такое и техномагия какая-то! жаль довольно поверхностно знаю. то на что можно убить пару лет и не заметить. и мало практического применения имеет, не пропорционально тому времени которое требуется на него.
мне тридцатник уже. вкатывался в погромирование лет 8 назад без каких либо скиллов на энтузиазме. сейчас я не работаю, скорее возвращаюсь к погромированию после продолжительной хандры от навалившихся проблем.
надо наверно доделать уже пару фич для навмеша, подучить пару вещей, да завести свой проект.
Почему пикрил не использовать как карту высот для симуляции воды? Пробовал так делать? Или слишком медленно вычисляется?
Еще раз извиняюсь - а какой тип свойства/поля в вм мне юзать?
В итоге решил вкатиться полностью в с#, поясните насколько он перспективен если сейчас учить - смогу я норм работу найти - чтобы при этом не скучную? (как я понял самое скучное это легаси поддерживать - на сколько в с# плохо с этим?)
И еще пытался вкатиться в frontend - не зашло, но что-то как я понял если в с# вкатываться то все равно в итоге придется скорее фулстеком быть??
бамп вопросу
>на сколько в с# плохо с этим?
Всё плохо, особенно если попадешь на проект который писался на винформс. При этом сам язык и платформа хорошо развиваются, ты смотришь на эти отчеты об улучшениях и облизываешься, потому что на работе у тебя .Net Core и пахнуть не будет, если попадешь на 4.5 фреймворк - считай повезло.
>вкатываться то все равно в итоге придется скорее фулстеком быть??
Так и есть. Если хочешь работать с современным шапром, то должен шарить в JS + HTML + Angular/React в качестве фрона и ASP NET, EF, SQL, Identity, SignalR в качестве бэкенда. Можешь всё перечисленное прям сейчас уже учить, упор делай на SQL и ASP NET.
1680x966, 1:14
кекеке. вообще я делал это на стриме, так что особо не заморачивался с именами. хотел чтобы ИИ ходил в лес за грибами! если интересно, но непонятно то на скриншоте в целом тот-же сорт ИИ как в FEAR. довольно клёвый планировщик. https://en.wikipedia.org/wiki/Stanford_Research_Institute_Problem_Solver состояние мира описывается как набор bool, каждое действие имеет прекондицию и то как оно меняет флаги в состоянии мира. а поиск заключается в изменении представления состояния мира пока оно не достигнет целевого.
хорош тогда когда пулл действий должен быть максимально динамичным, так как связи между действиями описаны в прекондициях к ним. можно вешать пулл действий прямо на предметы в мире, например. а в качестве целевого сосотояния использовать какую-нибудь эристику. как в симсах например. хочет срать - роется в планировщике в поиске способа посрать.
>>1916388
карту высот? имеешь в виду что красное = количество воды? так себе идея. между водичкой сверху и газиками снизу есть разница в способе перемещения их. водичка перемещается вариацией https://en.wikipedia.org/wiki/Shallow_water_equations там есть интересный шаг который исключает "потерю" воды при перемещении так как перемещаться она может только в соседние клетки. там где красный дым там просто берётся отрицательный вектор движения для текущего пикселя и смотрит чё там с помощью билинейной интерполяции. синее это очень сильно увеличенная зона где "длина" векторов различается и соответствует повышенному давлению (там есть пониженное, просто оно не отображается тут), зелёное это то где направление различается и оно делает завитушки. изначально хотел сделать такое в несколько слоев и использовать для атмосферной симуляции. чтобы облака были похожи на настоящие! но немного не оценил масштабы проекта. там где водичка землю размывает кстати применяется комбинация обоих методов. эрозия размягченной земли перемещается как красный дым. эрозия под действием гравитации это уже вода где не сохраняется инерция. видеорелейтед.
ну а производительность то что. оно на гпу обрабатывается же целиком. это шейдор. верней конкретно это вычислительный шейдор. https://docs.unity3d.com/520/Documentation/Manual/ComputeShaders.html с клевым API. гпу такое проглатывает и даже кулерами гудеть не начинает.
1680x966, 1:14
кекеке. вообще я делал это на стриме, так что особо не заморачивался с именами. хотел чтобы ИИ ходил в лес за грибами! если интересно, но непонятно то на скриншоте в целом тот-же сорт ИИ как в FEAR. довольно клёвый планировщик. https://en.wikipedia.org/wiki/Stanford_Research_Institute_Problem_Solver состояние мира описывается как набор bool, каждое действие имеет прекондицию и то как оно меняет флаги в состоянии мира. а поиск заключается в изменении представления состояния мира пока оно не достигнет целевого.
хорош тогда когда пулл действий должен быть максимально динамичным, так как связи между действиями описаны в прекондициях к ним. можно вешать пулл действий прямо на предметы в мире, например. а в качестве целевого сосотояния использовать какую-нибудь эристику. как в симсах например. хочет срать - роется в планировщике в поиске способа посрать.
>>1916388
карту высот? имеешь в виду что красное = количество воды? так себе идея. между водичкой сверху и газиками снизу есть разница в способе перемещения их. водичка перемещается вариацией https://en.wikipedia.org/wiki/Shallow_water_equations там есть интересный шаг который исключает "потерю" воды при перемещении так как перемещаться она может только в соседние клетки. там где красный дым там просто берётся отрицательный вектор движения для текущего пикселя и смотрит чё там с помощью билинейной интерполяции. синее это очень сильно увеличенная зона где "длина" векторов различается и соответствует повышенному давлению (там есть пониженное, просто оно не отображается тут), зелёное это то где направление различается и оно делает завитушки. изначально хотел сделать такое в несколько слоев и использовать для атмосферной симуляции. чтобы облака были похожи на настоящие! но немного не оценил масштабы проекта. там где водичка землю размывает кстати применяется комбинация обоих методов. эрозия размягченной земли перемещается как красный дым. эрозия под действием гравитации это уже вода где не сохраняется инерция. видеорелейтед.
ну а производительность то что. оно на гпу обрабатывается же целиком. это шейдор. верней конкретно это вычислительный шейдор. https://docs.unity3d.com/520/Documentation/Manual/ComputeShaders.html с клевым API. гпу такое проглатывает и даже кулерами гудеть не начинает.
Есть ли какой-то символ, который выглядит похоже на косую черту типа "/", но на самом деле ей не является и допустим для использования в именах переменных и т.п. Мне нужно не расстраивающее мои чувства о прекрасном написание в енумах вещей типа kg/m3, например kg⳺m3 (не работает, т.к. не допустимый символ).
Это похоже какая-то проблема исключительно шарпистов, потому что к бэкендерам на других языках таких требований не предъявляют.
Пчел, я пыхо-джун и на работке заставили реакт с тайпскриптом учить. А вообще на западе фулстек это тренд уже пару лет как, вакансий чистых бэк/фронт у них все меньше становится.
мимо
> карта высот
Не, имею в виду, что красное - это высота. Естественно я не о полной симуляции воды, я больше про волны, например от интерации с персонажем.
Кастомные nuget каналы устанавливал? Можно проверить в nuget.exe sources, удалить лишнее
Хмм, а действительно, нашел в AppData\Roaming\NuGet в конфиге ссылку на этот рослин.
Я когда-то ставил опции для разработки расширений для вижуал студии, видимо они туда этим насрали.
>>1917040
Еблан, ты о других людях подумай, которые твой код потом будут поддерживать. Не все, блядь, в студии кодят, не все используют всякие приблуды при написании кода, та и тупо при сохранении твоего кода в ASCII-кодировку пизда прийдет твоим символам.
Как человек пиши: kgPerCubicMetre, это и набирается легко и найти легко и запомнить легко и выглядит отпрятно. Нет, сука, нужно извратиться, чтобы потом никто нахуй не мог, если ему нужно, найти то что ему нужно.
Давай, ебани еще иероглифов в код, хули, шарп-то позволяет на любом языке писать. А для пущего эффекта - называй классы на русском, чтобы все знали какой ты молодец и постоянно раскладку меняли.
Отвратительно, нахуй. Пидорасу неприятно, а тем кто потом будет 3 часа нужную переменную напечатать - будет охуеть как приятно.
Я ожидал такую реакцию, и я понимаю её, как программист, если оторваться от предметной области.
Я попытаюсь объяснить свою позицию, и хотел бы услышать мнения на этот счёт.
Для читаемости кода, краткость и лаконичность, а также привычное написание известных физических и математических сущностей - превыше всего.
kgPerCubicMetre - это очень длинно. А ведь есть ещё кг/м/с2 или Дж/К/моль. Это ещё длинней придётся так писать. Если таких вещей полно, это абсолютно нечитаемо.
Я ведь есть ещё физические формулы. P = ρ g H - это понятно, легко и читаемо. А вот это: pressure = density accelerationOfGravity height уже в таком простом примере читается тяжело. А если формулы длинные? Намного более длинные? А если код целиком состоит из обилия формул? Мне кажется любители латиницы и длинных верблюжьих названий не писали физических и инженерных приложений, иначе бы они так не думали. И да, есть некоторые термины, которые применяются в российской инженерной практике, которым нет прямого эквивалента на английском. В результате этого одно и тоже понятие в коде разных авторов называется совершенно по разному (в меру знаний английского и понимая предметной области теми или иными кодерами). В таких случаях я также настаиваю на написании имён переменных именно русскими буквами, именно так, как она называется в пост-СССР. Я кстати видел код своих немецких коллег, так вот у них использование немецких названий переменных немецким алфавитом - это норма, подозреваю, по тем же причинам.
Очень печально, что С# не имеет отдельного оператора для возведения в степень.
все идентификаторы должны быть однобўквенными.
каждая бўква - отдельный идентификатор.
зачем вообще многобўквенные идентификаторы?
как бўдто бўквов мало, полный юникод бўквов.
а кому мало бўквов, тот может юзать эмодзи.
Лол, няша. Программисту это удобнее для чтения. Потому что программисту - собственно похуй что за этим стоит, он на тестах проверит, что результат тот что нужно. Важно чтобы эта переменная легко запоминалась. И как раз kgPerCubicMeter - запоминается легко, а имя достаточно уникально, чтобы сразу найти место где оно используется.
Программисту до пизды что там за предметная область, какие законы там стоят и прочее - для него это просто данные в памяти, байтики, нахуй, ему нужно их посчитать, передать куда-то еще, потом сохранить или показать результат. Важно, чтобы можно было нажать ctrl+f и сразу найти то что нужно тебе, а не еабться с тем что формула красиво выглядит, до пизды как выглядит в тексте программы, тем более что программист это в первую очередь тот кто программу пишет, а не тот кому есть какое-то дело до предметной области, на фронте уже нарисуют как надо тем кто этим пользоваться будет. Тебе важно, чтобы в 100500к строках кода - ты без труда мог нати то что тебе нужно, для этого и придуманы стандартные нотации, для этого и придуманы стандартные структуры файлов, для этого и пишется velocity = velocityPrevious + (acceleration time); вместо v=v0+at, чтобы ты не зная что, блядь, за v - мог понять что это такое, Тебе завтра скажут вместо физических величин - писть ПО для банка, послезавтра - для роботов, а потом - для самолетов, и ты должен писать быстро, иметь возможность найти то что нужно, ты не на уроке, блядь, где вы зазубрили формулы и дрочите задачки, ты, сука, программист, нахуй, эксперт во всем, и чем меньше ты создаешь сложностей себе и коллегам - тем тебе проще.
>найти место где оно используется
Вот тут не очень понял в чём сложность. Если используешь студию, то она сама всё подсветит, или ты о том, чтобы просто найти все переменные во всём проекте, имеющие подобное название? Но тогда не понятно, зачем это. Если не используешь студию, ну ты сам себе злобный буратино.
>чтобы ты не зная что, блядь, за v - мог понять что это такое
Для такого существует ридми, документация, на худой конец в заголовке файла в комменте освятить основные сокращения, например.
>завтра скажут вместо физических величин - писть ПО для банка, послезавтра - для роботов, а потом - для самолетов
Ну это уже макакинг. Там где предметная область не нужна для таких кодеров будет внешний рафинированный интерфейс, за который ему и лезть не стоит.
> Вот тут не очень понял в чём сложность
Допустим, у тебя проект чуть до среднего не дотягивает, скажем 60к строк. Ты только пришел, тебе говорят: Скорость неправильно считается, пофиксь, пожалуйста. Как думаешь, вот лично тебе будет интересно ковыряться в 60к строках кода в поиске места где твоя переменная находится, ведь нормальным поиском - ты не можешь ее найти, т.к. v не такая и редкая буква, а где что лежит - не знаешь, ты же только на проект пришел. Думаешь тебе кто-то специально в ридми напишет: "Мы рассчитываем скорость в таком-то файлике на такой-то строке"? Да нихуя. И как раз если бы оно нормально называлось - ты просто жмакаешь ctrl+f и пишешь velocity - все, ты нашел все места где оно встречается, за 10 минут прошелся - нашел баг, пофиксил, пошел пить кофе и мацать за жопу практикантку, которая очень хочет научиться программировать и просит тебя, скиллового чела, что баг за 10 минут пофиксил - после работы научить примудростям, а если в проекте используется всякая хуета вида v=a+b+c - ты будешь неделю только вникать где что лежит и как сделать так, чтобы нахуй не поломалось все.
> Для такого существует ридми, документация, на худой конец в заголовке файла в комменте освятить основные сокращения, например.
Да, ты ведь каждую переменную в ридми записываешь, а внутри метода каждую строчку сопровождаешь комментарием, когда тебе нужно за день 10 тасков закрыть, конечно, заняться больше нечем. Действительно, зачем написать название переменной, которое всем понятно - если можно высрать комментарии. 11/10 решение, ничего не скажешь.
> Ну это уже макакинг.
Это обычная такая реальность разработки. Вы - крутые спецы, клиенты знают что вы делаете быстро и качественно, а берете меньше чем в европах/сша кодеры, сегодня к вам клиника стамоталогическая обратилась, нужно софт для ведения карточек пациентов сделать, чтобы в них хранились 3d сканы челюсти и было удобное мобильное приложение, чтобы можно было эксперту скинуть и он удаленно мог провести диагностику; завтра фирме грузоперевозок понадобилось программу, которая будет считать время водителей в пути и прокладывать оптимальный маршрут с интеграцией со всякими картами, местными сервисами и т.д. Сидеть и дрочить одну специфическую область программисты даже в конторах которые занимаются продуктом не могут: тут конкуренты прикрутили стриминг - нужно и нам скорее; появилась охуенная платежная система - скорее нужно и нам; менеджеры по продажам говорят что мобилки рулят - нужно скорее наш софт на мобилки переносить; нам срочно нужно CI/CD организовать и теперь все dev's внезпрно превратились в devops'ов. Кучу хуйни приходится учить ежедневно, куча хуйни меняется, выходят еще и новые технологии, которые ты должен учить, чтобы быть крутым спецом и запоминать как в предметной области X называется какой-то термин, тем более через, допустим, 2 года - ебантизм, ты не всю жизнь будешь вот эту вот хуету писать.
> Вот тут не очень понял в чём сложность
Допустим, у тебя проект чуть до среднего не дотягивает, скажем 60к строк. Ты только пришел, тебе говорят: Скорость неправильно считается, пофиксь, пожалуйста. Как думаешь, вот лично тебе будет интересно ковыряться в 60к строках кода в поиске места где твоя переменная находится, ведь нормальным поиском - ты не можешь ее найти, т.к. v не такая и редкая буква, а где что лежит - не знаешь, ты же только на проект пришел. Думаешь тебе кто-то специально в ридми напишет: "Мы рассчитываем скорость в таком-то файлике на такой-то строке"? Да нихуя. И как раз если бы оно нормально называлось - ты просто жмакаешь ctrl+f и пишешь velocity - все, ты нашел все места где оно встречается, за 10 минут прошелся - нашел баг, пофиксил, пошел пить кофе и мацать за жопу практикантку, которая очень хочет научиться программировать и просит тебя, скиллового чела, что баг за 10 минут пофиксил - после работы научить примудростям, а если в проекте используется всякая хуета вида v=a+b+c - ты будешь неделю только вникать где что лежит и как сделать так, чтобы нахуй не поломалось все.
> Для такого существует ридми, документация, на худой конец в заголовке файла в комменте освятить основные сокращения, например.
Да, ты ведь каждую переменную в ридми записываешь, а внутри метода каждую строчку сопровождаешь комментарием, когда тебе нужно за день 10 тасков закрыть, конечно, заняться больше нечем. Действительно, зачем написать название переменной, которое всем понятно - если можно высрать комментарии. 11/10 решение, ничего не скажешь.
> Ну это уже макакинг.
Это обычная такая реальность разработки. Вы - крутые спецы, клиенты знают что вы делаете быстро и качественно, а берете меньше чем в европах/сша кодеры, сегодня к вам клиника стамоталогическая обратилась, нужно софт для ведения карточек пациентов сделать, чтобы в них хранились 3d сканы челюсти и было удобное мобильное приложение, чтобы можно было эксперту скинуть и он удаленно мог провести диагностику; завтра фирме грузоперевозок понадобилось программу, которая будет считать время водителей в пути и прокладывать оптимальный маршрут с интеграцией со всякими картами, местными сервисами и т.д. Сидеть и дрочить одну специфическую область программисты даже в конторах которые занимаются продуктом не могут: тут конкуренты прикрутили стриминг - нужно и нам скорее; появилась охуенная платежная система - скорее нужно и нам; менеджеры по продажам говорят что мобилки рулят - нужно скорее наш софт на мобилки переносить; нам срочно нужно CI/CD организовать и теперь все dev's внезпрно превратились в devops'ов. Кучу хуйни приходится учить ежедневно, куча хуйни меняется, выходят еще и новые технологии, которые ты должен учить, чтобы быть крутым спецом и запоминать как в предметной области X называется какой-то термин, тем более через, допустим, 2 года - ебантизм, ты не всю жизнь будешь вот эту вот хуету писать.
Как вывести 500кк $ через битки в валюту в расии?
1680x966, 0:31
вопрос масштабов же. можно же например как в fishing north atlantic просто бултыхать водичку рядом не меняя её реальный уровень.
вообще опять же метод с газиками годится больше для газиков. так как само перемещение векторов там происходит за счет зон давления, которые чтобы получить надо много итераций (на том видео кажется 30). если давление не нужно то и сам метод не нужен.
для водички как например на этом видео достаточно 2. одну чтобы посчитать статическое давление, приплюсовать энерцию и сколько максимально воды может переместится из клетки. а вторую чтобы посмотреть сколько воды переместилось в эту клетку. если хочется почитать то я ориентировался в основном на этот текст. https://hal.inria.fr/inria-00402079/document "Fast Hydraulic Erosion Simulation and Visualization on GPU"
помню натыкался на более крупный текст про водичку в играх вообще... а во. https://trepo.tuni.fi/bitstream/handle/10024/115052/kellomaki_1354.pdf "Large-Scale Water Simulation in Games" там уже больше методов рассматривается.
хотя вообще всё это в играх конечно имеет довольно маленькое применение. наверно только в From Dust это было главным элементом геймплея.
Одно дело, когда на работке заставили учить, другое - когда изначально требуют все.
Где вообще брать задания на этапе изучения синтаксиса? Когда я учил Пайтон по книге Гэддиса и Java по Эккелю, там для каждой главы были задания, благодаря чему я мог глубже осваивать материал.
Есть какие-то ресурсы или книги для вот такого вот комплексного изучения языка?
Т-есть само изучение понятно - доки, книги разные, курсы. А задачки, по типу лаб из универе для закрепления тем, где брать?
Я какое-то время смотрел сайт с олимпиадными задачками. Сортировал их в порядке, начиная от задач для дебилов. Там реально простенькое было, но не привязанное к языку.
А вообще, если ты где-то работаешь, лучше находи проблемы из своей практики, пусть даже мелкие совсем, и для них что-то пили.
Я вот на зеленом старте пилил себе формочку с БД для вноса ежедневных трат по категориям и с возможностью вывода статистики по различным временным периодам.
Берешь кодфорс или кодворс или любой другой ресурс, где задачки можно решать, решаешь, закрепляя таким образом синтаксис.
Другое дело, нахуя тебе разные книги по разным языкам читать, блядь? Ты смотришь вакухи - смотришь что надо для работы - дрочишь за месяц и идешь работать. Все, блядь. Я хуею. Я вот ебалн из универа, нам дали базу на первом курсе, но прогать на чем-то кроме ассемблера, С и С++ не давали осбо. Ну и хули, я смотрю, нет вакух по С и С++, потом смотрю в карманы, денег нет, а тяночка хочет жрать, хочет шмотье, ну и хули, пробегаюсь по джаве и через месяц я уже - на испытательном сроке, через 2 недели - в штате и работаю, потихоньку приношу пользу, через год меня заебала джава и я так же с СРешоткой поступил, но сразу на мидла заскочил.
Я хуй знает че вы там учите с синтаксисом эти, 99% языков - сиподобные, тебе просто нужно знать что к тут чтобы получить доступ к члену класса - ты используешь . тут ->, все, блядь, дальше просто пишешь алгоритмы, гугля иногда инструментарий что есть в языке, ну и пишешь так чтобы твой код другие люди понимали. Все, нахуй.
Опять же, ХЗ, может быть я какой-то аурой обладаю, но ни разу меня на собесах целенаправленно не валили, ни разу не ебали кишочками, чтобы прямо знал как там в память все укладывается, ни разу не ебали сверх меры алгоритмами, просто пришел, показал диплом, показал регалии(ыыыы, ездел в Испанию на стажировку, брал места на олимпиадах, дипломчик красненький, статьи - цитируют): Можешь сделать? Могу! Покажи гит - показал, оки-доки, мы пока доки подготовим, используем то-то и то в разработке, поддрочи чтобы как вышел - работать нормально мог. Все, блядь. Иду - дрочу, потом работаю. Короче, хз в чем у людей сложности.
Код:
MediaElement.Source = new Uri("pack://application:,,,/папканейм/1.avi");
MediaElement.Play();
В xaml'e пробовал ковырять LoadedBehavior, тоже ничего не дало.
>просто пришел, показал диплом, показал регалии(ыыыы, ездел в Испанию на стажировку, брал места на олимпиадах, дипломчик красненький, статьи - цитируют): Можешь сделать? Могу! Покажи гит - показал, оки-доки, мы пока доки подготовим, используем то-то и то в разработке, поддрочи чтобы как вышел - работать нормально мог. Все, блядь.
Ты же понимаешь, что тебя легко берут как раз за это? У тебя есть вышка, петпродежкты, стажировка не в СНГ. Этого почти ни у кого нет, максимум вышка задрищенского политеха и скудные знания.
Хз как вообще работу без стажировки найти можно. Даже как на ебаную стажировку записаться не понятно, если на .Net, три стажировки на весь dou
ну теперь через nuget.exe (вроде ещё через командную строку разработчика) удаляй.
Вообще нугет в этом плане странная штука, если он не может получить пакет в одном сурсе, в другой он не ломится
>смотрю в карманы, денег нет, а тяночка хочет жрать
есть релевантная повесть и фильм, лучшие собаководы рекомендуют. жизненно.
https://ru.wikipedia.org/wiki/Парень_и_его_собака
Смотрите, у меня есть контроллер апишный, в него должно постучаться устройство со статическим IP, я должен сохранить информацию и IP с которого стучались, потом переодически что-то с этим делать, например смотреть не отклоняется ли время устройства сильнее чем должно и корректировать, если отклонилось.
Так вот, в чем хуйня. Я думал просто брать IP с помощью context.HttpContext.Connection.RemoteIpAddress, но хуйня в том, что таким вот макаром на моем ПК откуда-то берется IPv6 адрес, который, как я понимаю там где-то маршрутизаторами получается(я не настолько хорошо за сеть шарю пока что, но я знаю точно адрес устройства и он в формате IPv4), а на другом компьютере IPv4, но внутри локальной сети, а не тот что реальный и как-бы доступен всем. Я посмотрел с помощью Dns.GetHostAddresses() адреса и среди них есть тот, который я заведомо знаю что устройству принадлежит, только вот как быть уверенным какой брать? Вдруг в следующий раз нужный адрес будет 6м?
Вообще, кто-нибудь с такой вот хуйней сталкивался? Как это работать должно? Может быть сохранять все адреса разом и по ним простукивать?
Например:
Static string ОдинПлюсДва (_первое, _второе)
return _первое + _второе;
Static void main
a = 2;
b = 2;
ОдинПлюсДва(a , b) //Я ведь правильно передаю параметры в метод?
Консоль.показать(???) Как мне результат то где взять что? Мне ruturn метода ОдинПлюсДва сюда надо. Где значение того что вернулось то взять?
Смотри, для начала можно думать так: Когда ты вызываешь метод, компилятор на самом деле - подставляет туда, откуда ты его вызываешь весь метод. Вот. Таким образом, допустим, твой метод:
string Combine(string a, string b) => a+b;
это все равно что если бы ты вместо метода везде писал то что в нем происходит.
Чтобы получить результат, ты, в зависимости от того что метод возвращает, используешь переменную.
Т.е. в твоем примере ты должен был бы так вот сделать:
int c = ОдинПлюсДва(a , b)
Да, насчет последнего. Не всегда обязательно явно переменную использовать чтобы результат использовать.
В твоем примере ты мог бы делать и вот так, например:
a = 2;
b = 2;
Консоль.показать(ОдинПлюсДва(a , b));
Так делать нехорошо, конечно, но когда дойдешь до Linq и Fluid'ов то там, в принципе так вот и делается зачастую.
Да, тут не int нужен для сохранения результата, а string, просто не обратил внимание на сигнатуру. Думаю это и так понятно, но на всякий случай уточнил.
>>1918988
Пасиба, ананасик. Вроде яснее стало.
Я не понимал, что получение результата метода происходит в момент когда ты передаёшь методу параметры (а из метода мейн в _первое в метод ОдинПлюсДва и б из мейн во _второе в метод ОдинПлюсДва. Потом тут же отдаёт результат.
Как на твоём примере с переменной, новый метод при вызове из mein сразу получает параметры, сразу их считает/выполняет код и сразу возвращает, присваивая их в переменную "int c".
Надеюсь я правильно представляю всё это. Во всех мануалах это подается как само собой разумеющееся.
У меня почему-то изначально всё представлялось как по строкам кода. Сверху вниз
Отдали параметры. Результат посчитался;
//они где-то там висят в памяти* в какой-то несуществующей переменной куда их записал return
Обращаемся когда захотим к результату;
Задаём другие параметры если надо.
Не пришло в голову, что результат нужно где-то хранить самому и самому объявлять где.
Спасибо еще раз.
Даже тут проебался с разметкой, извиняюсь
>вот лично тебе будет интересно ковыряться в 60к строках кода в поиске места где твоя переменная находится, ведь нормальным поиском - ты не можешь ее найти
Краткие обозначения используются внутри методов. Классы и методы конечно должны иметь самодокументирующие названия.
Ну и твой пример скорее в мою пользу. Если скорость неправильно считается, но считается она сложно, то когда формулы записаны символьно, ты хотя бы можешь их прочесть, сверить с исходниками (статьи, учебники, тех. документация) и увидеть ошибку. Если же формулы записаны по-программистски (с длинными именами переменных, и выносом каждого микровычисления в отдельный метод), то ты никогда в этом не разберёшься, только заново переписать все вычисления.
>Да, ты ведь каждую переменную в ридми записываешь
Ну ты перегибаешь. Комментарии почти всегда нужны, в любом коде.
>Это обычная такая реальность разработки.
Обычная практика такова, что все более менее крупные специализированные компании (банки, нефтяники, медики, с очень узкой специализацией от разновидностей стоматологов до хирургов, военные и т.п.), которым нужен свой софт, БД или автоматизации, имеют своих программистов, которые либо пришли из математиков и АСУ ТП в предметную область, либо наоборот, дополнили предметные знания навыками кодинга. А то, о чём ты говоришь - это сайтошлёпство и обезьяний бигдата+машоб на корзину для пускания пыли в глаза акционерам.
Хотел тут спросить, но пока спрашивал сам допёр.
Вот из-за этой херни целых джва часа тупил тормозил. Метод возвращал Int вместо Int[], пиздосье. Массив интов и инты, это оказывается разные типа. Я весь гугл излазил, не понимая в чём дело.
Малорик, так держать!
C# Player's guide из шапки довольно плохо объясняет в этом плане, учусь по нему.
Думаю его сначала проглотить, даже если что-то не пойму и не смогу задания выполнить. Потом уже к мелкомягким за сухими мануалами полезу
Вообще, конечно наверное не обязательно тебя таким сейчас заебывать, но я бы советовал как-то так вот читать пользовательский ввод. Все же лучше, чем рассчитывать, что пользователь все правильно введет сразу, даже если этот пользователь ты.
Есть while(true){} в котором работает основная логика хочу в нее что-то типа менеджера задач чтобы в каждой итерации проходила работа по всем задачам, НО вот тут начинается загвоздка, я хочу иметь возможность в задаче написать что-то типа
stopwatch.Elapsed > 10 sec остановись и дай поработать другим, а на следующей итерации продолжишь.
И все это работает в 1 потоке.
Вот в остановись и дай поработать другим, а на следующей итерации продолжишь. у меня проблема, не понимаю как это вообще релизовать. Так же хотелось бы не просто говорить на следующей итерации, а типа жди Х события или Х секунд или пока тебя не запустят.
Пытался разобраться с этим, но не понял как это сделать.
Вот есть у меня 10 задач на парсинг чего-то огромного что займет по часу времени, плюс надо постепенно закидывать мелкие задачи чтобы они тоже отрабатывали как это на авэйте сделать?
И мне именно надо на 1 потоке, потому что крутить программу я хочу на мелком сервере и занимать на нем ровно 1 поток чтобы остальное что на нем крутится не тормозило.
Анон, есть пара вопросов по github-репозитариям.
Вот, значит, на github'e, там - есть репозитарии всякие,
например этот https://github.com/JamesNK/Newtonsoft.Json
и там, в Releases - https://github.com/JamesNK/Newtonsoft.Json/releases
есть версии различные, и можно скачать их код в zip-архивах,
например, эта версия, которая успешно компилируется в Visual Studio 2010: https://github.com/JamesNK/Newtonsoft.Json/releases/tag/7.0.1
Там, внизу, есть ссылка: https://github.com/JamesNK/Newtonsoft.Json/archive/7.0.1.zip
И если кликнуть на тег, можно видеть этот вот код: https://github.com/JamesNK/Newtonsoft.Json/tree/7.0.1
с последним коммитом 20cc266, то есть 20cc266712a3b361358e1e35ae87518ecf8e0dfd .
Если кликнуть на Branches, то такого бранча, v7.0.1 нет, но рядом есть вкладка Tags, и там эта версия есть, и код доступен - по тегу.
Пусть теперь, я хочу качнуть код именно этой версии. Как это сделать?
И ещё...
Пусть есть репозитарий, в котором этот код является подмодулем.
Как в .gitmodules включить именно версию v7.0.1, чтобы не качать весь исходник и не заливать его снова. Там около 1000 файлов, блядь, не хотелось бы раздувать репу. Может можно как-то попроще, что-то вроде:
>[submodule "имя"]
>path = папка
И ещё, можно ли как-то форкнуть репу с определённой версии, чтобы на форк сослаться в .gitmodules, а не на основную репу, где продолжаются изменения???
Ыыыыы))))
Тока эта, ты там вместо такого вот - проверки делай своего времени и сбрасывай таймер после yield, вот.
Ну или можешь погрузиться в прекрасный мир прерываний, тоже тема.
По-мойму, через две точки, после URL, надо указать то ли версию, то ли огрызок хэша коммита. Но это не точно.
Окей, тогда как теперь решить вопрос с try-catch ?
Можно конечно же писать их между yield, но это же пиздец АД.
Плюс слышал что так делать нельзя, типа антипаттерн использовать yield для такого.
Ага. Спасибо. Я остальное то вроде усвоил. Дальше только зажать нос и нырять в раздел книжки ООП.
Там у меня чисто для себя чтоб понять методы образец. Я просто не понимал почему ретюрн отказывается возвращать. Пытался и его как-то конвертировать, думал может каждый индекс массива нужно отдельно доставать в новую переменную, а потом обратно собирать в массив.
Там у меня в посте было просто максимально коротко чтоб ясно изложить свой затуп.
Там у меня требуется ввести количество элементов в массиве.
Можно запрос на ввод и в методе организовать наверное. Хотел себе позже много-много методов сковать и в каждом каждый запросить. Чтоб прям стресс тест себе устроить.
Надо конечно наверное сразу приучать себя проверять ввод на правильный возврат с консоли. Но я слишком начинающий еще, едва только циклы усвоил. Если сущностей наплодю потом, то конечно более подробно буду описывать вызов и консолей и исключения обрабатывать.
Спасибо за совет
Почему C# сам не может нормально собирать COM-мусор, и мне приходится на кучу промежуточных объектов вызывать Marshal.ReleaseComObject(obj) ???
Самое простое известное правило - не использовать два оператора точки в одном выражении при работе с COM-объектами. Вот например, такая штука обычно оставит висячие ссылки на КОМ-объекты: Excel.Sheets sheets = app.Workbooks[1].Worksheets; .
Но и использование этого правила помогает далеко не всегда.
Вот например код из приложенной картинки без вызова Marshal.ReleaseComObject(books) оставляет висеть в диспетчере задач процесс Excel после закрытия приложения и всего, что с ним связанного. Хотя казалось бы, почему я тут должен маршала просить релизнуть объект?
Вызывать Marshal.ReleaseComObject() на всё подряд также нельзя. Вот почему:
Excel.Workbook b1 = app.Workbooks[1];
Excel.Workbook b2 = b1;
Инициализация переменной b1, а точнее, вероятно, вызов app.Workbooks[1], увеличивает счётчик ссылок на возвращаемый Workbook на 1. Но вот эта операция b2 = b1 не увеличивает счётчик ссылок. Поэтому если после того как b2 станет не нужна, если я сделаю Marshal.ReleaseComObject(b2), то b1 тоже будет освобождена и перестанет работать.
Конечно из всего этого можно примерно догадаться, как всё это работает. Но только догадаться.
По существу, я не могу надежно понять, когда счётчик ссылок на КОМ-объект:
1. приращивается автоматически?
2. когда он автоматически уменьшается? В норме релизить через маршал нужно далеко не всё.
3. когда он автоматически НЕ уменьшается после присвоения объекту обёртке значения null, и, возможно, отработки GC.
4. как узнать текущее значение счётчика ссылок на КОМ-объект?
>Работаю с Excel через C#.
используйте Delphi.
оно умеет прозрачно работать с COM еще с 90-х годов.
https://docs.microsoft.com/en-us/dotnet/api/system.object.finalize?view=net-5.0
Выводиться должно что-то типа этого:
> The example displays output like the following:
> Instantiated object
> This instance of ExampleClass has been in existence for 00:00:00.0011060
> Finalizing object
> This instance of ExampleClass has been in existence for 00:00:00.0036294
У меня же до Finalizing object не доходит и не выводится в консоль. Даже если ставлю точку останова в финализаторе, до неё не доходит. Почему так?
Хуя советчик нарисовался. А денех на дельфи дашь?
У меня всё работает, попробуй переустановить шиндоус.
Я никогда не работал с COM через C#. Но потребляю .NET код через COM в С++.
Допустим у нас есть COM visible класс типа Human в C# , при использование в С++, класс можно будет юзать через Human или HumanPtr, так вот HumanPtr - это смарт COM поинтеры, которые очищаются автоматически, а вот если юзать Human - то он останется висеть в памяти и чистеть надо вилкой. Как это разделение будет выглядеть через C# код - наоборот - не знаю.
Теперь, допустим у нас есть массив, какой массив у нас есть в COM? Я лично использую и знаю про SAFEARRAY. Так вот, даже SAFEARRAY наполнен объектами типа HumanPtr - он автоматически не обрабытвается, и нужно вызывать SafeArrayDestroy().
Так что, как мне представляется, твои books - являются SAFEARRAY объектами, которые не обрабатываются, и в C++ коде нужно было бы вызывать SafeArrayDestroy(books). Почему - не знаю, но я хорошо в лужу сел, когда выяснил что у меня память проливается c SAFEARRAY.
В рот ебал эту разметку.
А готовые библиотеки тебе религия использовать не позволяет?
У меня будет очень много словарей, у каждом из которых будет по несколько элементов чаще всего 1-3, но в некоторых может быть до ста где-то, подойдет ли для этого Dictionary?
гонять бенчмарки впадлу, да и с листом все норм работает, просто спрашиваю вашего мнения
Зависит от данных. Может у тебя там префиксное дерево можно использовать, а ты словари с листами хуяришь.
А чем словарь хуже? В теории, он должен быть быстрее при поиске и добавлении опредленного слова.
Алсо, никто не знает оверхед словаря на перечисление всех key-value pair? На сколько он в этом плане медленнее листа? и медленнее ли
фриланс/аутстафф? Не хочу за бесплатно работать на конвеерной галере и слушать выебоны какого то прыщавого инфантильного долбоеба. Что имеется:
1. Опыт писания кода на # (около 2 лет) - ASP.NET MVC, Core (за WPF молчу - мервое говно);
2. Английский уровня B2+ (Общение, чтение);
3. Опыт в фронте (такой себе, но ковырял React, могу сверстать под адаптив или поправить, чтобы не наебнулось);
4. Нелюбимая, в тоже время не напряжная РАБотка под $800, на которой стал мертвым грузом и хочу перемен.
Реально залететь на проект и хотя бы за 300-400 американский рупий перенять опыт, носмотреть что и как с upwork или freelancer.com?
Делитесь опытом, кто через это прошел.
А как можно инжектить длл-ки в процесс с помощью шарпа? Есть какие-нибудь гайды нормальные?
На проектах, с которыми удалось поработать, да и в смежных тоже, я какого-то засилия C# не увидел. В довольно крупной конторе, где я сейчас как контрактор работаю, от силы два три репа на C# из 200+. Язык хороший, инфраструктура тоже сейчас отличная стала (я имею в виду поддержку кросс-платформенности), только вот работы интересной походу нет нихуя.
Я не троллю, я не тролль-джавист, я рил спрашиваю. Без наебала.
Тип зырьте, в чём вообще преимущество виртуальной машины над конпиляцией. Это кроссплатформенность. Один раз скомпилил, запустил где угодно.
C# это на 80% веб-петушня, круды-хуюды и прочий фуллстек анал.
За вычетом юнити девелоперов все пишут под винду и в visual studio. К чему вообще эта кроссплатформенность? На линуксе хоть и есть моно, но кривое и никто с linux сервером не будет бэк ебошить на C# когда есть Java.
Мобильная разработка мертва. Ксамарин мёртв. Universal Windows Platform мёртв. C# это язык для крудов. К чему эта кроссплатформенность? Просто чтоб какуджавы?
>ссылкой на скачивание
Это шутка такая или ты правда думаешь, что в 2к21 кто-то будет качать дерьмо по ссылке?
>как в нормальной разработке делают
Вот так: https://lichess.org/source
> Это кроссплатформенность
Это отсутствие необходимости управлять памятью в ручном режиме.
>Один раз скомпилил, запустил где угодно
Ну да, скомпилировал под 32 битные ARM системы, запускаешь на 64 битных Intel. Всё так.
>Это отсутствие необходимости управлять памятью в ручном режиме.
Паясни. Разве ГК это только с виртуалкой бывает? Разве в ПЩ нет ГК?
> Ну да, скомпилировал под 32 битные ARM системы, запускаешь на 64 битных Intel. Всё так.
Нак нахуя? Ты же это всё равно будешь компилить под одну и ту же архитектуру винсервера?
Думаю что хуйня.
Плюс, на сишарпе не так много вакансий, при этом в вузах его учат, т.е. ежегодно выпускается насколько тысяч студентов, среди которых многие довольно хорошо знают шарп, умеют кодить и при этом как раз готовы идти работать за еду первые пару лет.
Я эт к чему. А вот к чему: Либо переставай из себя целку строить и иди работать как есть, все равно в конечном-то итоге ЗП поднимут; либо вкатывайся в JS, там хоть конкуренция и больше, но средний уровень вкатышей наоборот ниже и если ты осилил шарпы, то уж как-нибудь, да справишься с тем, чтобы с вебпаком каким-нибудь разобраться да npm, а дальше будешь делать кнопочки да посылать запросики.
Еще один чел, что в последний раз смотрел что такое шарп в 2005м?
Под линуксы уже давно есть неткор, а уже и нет5, весь бек шарповский сейчас пишут именно под него. Ну и довольно удобно, что код писать можешь на винде, а работать без какой либо ебли он будет одинаково и на линуксе.
Я даже малинку в качестве сервера для пет проектов использую и все работает.
А вот зачем его сделали на виртуалке в самом начале, в нулевых, когда он под был только под виндой, я понятия не имею. Мб просто хотели чтобы было как в модной на тот момент джаве.
> но кривое и никто с linux сервером не будет бэк ебошить на C# когда есть Java.
Хуя сказанул, на шарпе и пишут только потому что он лучше джавы. Если бы майки не протупили и сделали его сразу опенсорсным, вряд ли джаву вообще сейчас бы вспоминали.
>на шарпе и пишут только потому что он лучше джавы
А в чем шарп существенно лучше джавы? Имхо, принципиальных отличий в лучшую сторону, кроме синтаксического сахара, почти нет. Ну дженерики сделаны по-человечески, да. И костылей меньше, работа с массивами, примитивами, коллекциями удобнее.
Но все это не так уж и критично на самом деле. Видимо поэтому вакансий на джаве больше аж в 2 раза в крупных городах.
>Имхо, принципиальных отличий в лучшую сторону нет
А что это за такие принципиальные отличия? Шарп это не хаскель, а просто лучшая джава. Очевидно что в двух ооп языках, один из которых создавался как копия второго, много общего. Но писать то приятнее на шарпе и это факт. Не думаю что в джаве есть хорошие аналоги ef core, async/await или хотябы геттерам/сеттерам.
Код конечно и без этих вещей можно писать, но блять, кодить можно на любом тюринг полном языке и вопрос состоит лишь в том, где это делается приятно, быстро и удобно.
Двачую этого Жака Фреско (кто понял - тот понял)
я писал на JS (react) - нормально, но без ООП это хуйня. Лучше уже жабу дрочить, если работу не найду. Так или иначе - C# мертв на всем, кроме веба, за бугром так то я вакансии видел, но н мидла требования конские, а джуны никому нахуй не нужны. Вот тебе и два стула.
По поводу работы на галере - это зашквар, ибо приходят готовые мидлы (возможно без опыта в интерпрайзе) и их мокают в говно первый год-два. У меня жопа бомбанет от такой хуйни.
Пацантре, у меня возник вопрос.
Предположим в у вас есть tabControl в котором 2 вкладки (tabPage). И вам нужно чтобы при открытии одной из вкладок информация на ней начинала периодически обновляться, а при закрытии вкладки нет.
Так вот, как сделать так, чтобы при открытии вкладки создавался таймер, а при закрытии вызывался его метод dispose?
Если создать таймер при евенте enter, то мы не сможем обратиться к нему из метода leave.
Единственный вариант создавать "глобальный" объект?
при открытии в вижле разделяет тесты на .net2.0, .net3.1 и .net5.0. Как такое повторить? Тесты на Xunit написанны.
нашел, спасибо
поддвачну пост и заодно задам вопрос: Тут есть те, кто реально работает на # (web)? Если да, то какой стэк, какая версия ASP.NET/.NET Core на проекте/проектах.
Разработка под Dynamics CRM считается? Помимо плагинов в ней куча приложений для сотрудников и апишек для интеграций.
Если да, то подавляющая часть сервисов на ASP.NET, .NET Framework 4.7.1, есть несколько на .NET Core 3.1, из фронта Angular
На бугор работаешь, в каком формате (аутстаф/продукт)? В офисе или удаленно? На WebApi пишешь? Фронта касаешься?
Аутстаф, на наших.
В условиях пандемии свободное посещение офиса, так в основном удалённо сижу. Апишки периодически клепаю. Фронт бывает, но не так часто, и огромное спасибо, что не ASP.NET MVC.
>на наших
сочувствую, я представляю днищенскую ЗП
На чем бэк написан? Апишки под микросервисную архитектуру? Тесты/бенчи? По эстимейтам ебут мозги или 5 минут делаешь и 2 часа хуй пинаешь?
ЗП на жизнь хватает, 140, ДС.
Бэк? В плане? Всё на шарпе пишем. Апишек куча старых, написанных как попало, новые да. Тесты почти никто не делает, я в своих проектах клепаю. По эстимейтам не парят, если задачи не очень важные, но задачи у меня, так уж получилось, есть всегда.
походу апихи с простой работой по get-post данных из БД, без особой логики? 140к (я хз, сколько это в $, около 2к походу) - не плохо, думал меньше.
Всегда поражаюсь опенсоурсу, где все обсосано, все по паттернам, дженерики-хуерики, абстракция, тесты. А по факту, с кем не общаюсь - все клепают, только эстимейт закрыть (это не камень в твой огород, просто суровая реальность).
>>1922008
как пример, хотел закинуть пул реквест, чтобы была галочка на CV на участие в проектах, но в нем только разбиратся нужно хуеву тучу времени.
Так или иначе - спасибо за отзыв
Не, простыми крудами тут и не пахнет, тут ты пишешь методы, делающие определенную бизнес-логику. Это сделано для того, чтобы соседние системы своими руками не лезли в наш процесс, а довольствовались лишь некоторыми методами, торчащими наружу. Иногда эта логика конфликтует с плагинами Dynamics, тогда приходится искать по цепочке вызовов, что же именно там происходит. В общем, достаточно весело, да и в бизнес-процессе клиента кое-что понимаю, это интересно.
По поводу быстрого закрытия тасок - тут уж как повезёт с загруженностью и с руководителями. Обмазываться абстракциями и паттернами никто не мешает, главное, чтобы люди после тебя могли доработать проект без особых проблем.
Сам чем занимаешься?
> с плагинами Dynamics
не понимаю, потом погуглю
>Сам чем занимаешься?
финансист/экономист/аналитик/хуй пойми кто
Я летом хотел перекатится - подготовился, CV, пет проекты, вся хуйня. По факту прошел 3 собеса, по одному предложили $200 (типо джун), по другому не прошел по софт скилам (Швейцарская компания), по третьему предложили за бесплатно стажером на 3 месяца.
Сам на решетках уже пишу хуй знает сколько, года 2-3 точно, начинал с WinForms, WPF, потом когда понял, что Desktop мертвый, начал корвырять ASP.NET MVC5, потом Core2.0 и т.д. Сейчас начал смотреть .NET5, по тому опенсоурсу, что скинул выше, что то пиздец, даже влень разбиратся, чтобы закрывать какие то таски в issues.
Планирую поковырять что ни будь, повспомнить, уже много чего из головы вылетело и пытаться вкатыватся, но уже делать ориентир на фриланс или буржуйский аутстаф (напрямую)
В общем такая же хуйня, но написано не двачером, а со смишнявками. В итоге взял Троелсона, полёт нормальный.
Допустим у меня есть апач(чтобы фронт запускать), есть гейтвей, есть пара вебапишек. Все это в докере. Допустим я хочу иметь возможность одним из сервисов какой-то ip получить(чтобы добавить в ЧОРНЫЙ ЛИСТ). Я правильно понимаю что для этого я должен пошаманить с докером? Или можно как-то просто в гейтвее дописать заголовки? Просто я чет не ожидал что у такой вот фигни возникнут сложности, опять же вскрылось это только когда таки в докере запустил, до этого тестил так и нормально ip просто из контекста доставал - все работало, а тут, не то чтобы выжная функция, но раз уж сделал ее - хорошо бы разобраться почему в докере оно не работает. Вернее как, ip-то отпределяется, но видй 172.xxx.yyy.zzz эт сосвсем не тот что настоящий, я гуглил, это вроде как на ip что докер выдает при запуске контейнеров, но я опять же не настолько щарю, просто хотел разобраться как оно работает на самом деле и как надо делать.
Двощик, не бей лучше обоссы, но я совсем дурак и так и не могу понять методы.
Вот смотри, почему если убрать/заккоментить метод Reverse который переворачивает цифры в массиве задом наперед, то всё идёт нормально.
Но когда он выполняется, то он переворачивает и массив который должен оставаться неперевернутым?
Я ведь "создаю" две разных переменных с массивами? Или не "создаю"?
int [] numbers (Этот создаётся в методе GenerateNumbers)
и
int [] reversedNumbers (Этот создаётся путём переворачивания задом наперёд первого)
Или второй вообще не создаётся, а ссылается на первый или как понять?
Или нужно вызывать как-то метод в методе (или прям в Main вызывать метод в методе через метод чтобы было правильно?
Я хотел.
Создать массив от [0] "1" до, например, [4] "5".
Напечатать его,- 1,2,3,4,5
Напечатать его же но перевернутым 5,4,3,2,1
Почему переменная numbers то меняется?
Или мне дальше изучать, а там придёт? Инкапсуляции всякие и прочие приват, протектед нужны?
Да я гуглил же. Хотел посмотреть. И их у меня нет, кек. При том что в мидлваре - прописано все.
Вернее как, они есть, когда запрос идет от фронта или через гейтвей, но если напрямую в контейнер постучаться по тому порту что я ему в докере прописал - нету. А я как-бы исходя из того что каждый контейнер должен быть самостоятельным - хотел понять, почему так вот выходит.
Хотя ладно, наверное надо лучше погуглить. Хотя я вроде гуглил часа 4, на стековерфлоу тоже просто про X-Forwarded-For пишут, на сайте майков так же, на гитхабе видел ишью как раз по поводу того что не удается узнать верно ip клиента из докера, но не стал вникать, оно вроде закрыто было, а значит если это баг, то должны были пофиксить, а если не баг, то хз, я там беглым взглядом не нашел решения проблемы, может жопой читал.
Из-за соображений, почти все, в шарпе являются ссылками(есть еще типы значений).
Когда ты пишешь, что
int[] newArr = arr - ты считай создал ярлычек на рабочем столе. Ты можешь создать много таких, но вести они будут к одному файлику и если ты его удалишь, как-то изменишь или что-то еще, то когда ты будешь пытаться по ярлычку кликнуть - тебе будет выдано то что стало с настоящим файлом.
Аналогия конечно, но для того чтобы суть понять я думаю сойдет.
Так вот, массив - ссылочный тип. Всякие int,double и структуры - значения, они копируются при передачи в метод или при присвоении.
Т.е. чтобы не происходило изменений с исходным объектом - ты должен скопировать его, либо как в прикриплейде - создать новый массив и заполнить его самостоятельно.
Пасиба огромное. Стало понятней.
Побаловался с копированием массива и созданием через метод GenerateNumbers, всё стало чуть ясней.
А вообще, ты молодец что стал разбивать на методы. На начальных этапах многим это кажется не оч полезным, но потом такая боль, когда на реальной работе приходится приучать себя к этому. Лучше это делать сразу, а то как я будешь: 400 строк метод - хех, ну не 600 же; 600 строк метод, ну, бывало и хуже; 2к строк метод - ай, потом отрефакторю.
Ну к примеру код выполняет одну и тоже задачу. И на примере его описания видна польза интерфейса.
Типо вот тот не юзаем интерфейс и получается хуйня а тут юзаем и получается как в сказке.
Интерфейсы нужны как абстракция. У тебя есть тип, реализующий контракт. Как он будет это делать- второй вопрос, инкапсуляция жи.
Я в рот ебал советующих изучить английский.
Ниосилятор, ты?
Вверху на тулбаре был комбобокс в котором можно было выбрать какой проект запустить для отладки и сегодня он куда-то взял и проебался. Как его добавить назад?
Пацаны.
Есть такая проблема.
Есть объекты класса. Нужно, чтобы изменение в этом объекте приводили к изменению в control'ах (textBox например), причём нужно, чтобы изменение в разных объектах приводили к изменению в разных контролах.
Как это сделать? Про эвенты я знаю, но как сделать так, чтобы при обработке эневна изменялось свойство нужного мне контрола?
Модификаиоры это инкапсуляция а не абстракция
Мой говнокод здеся:
https://pastebin.pl/view/c495c232
Свитч по дикшинари нейм сделай, в кейсах пиши что надо вызвать, ты вообще читал туториалы хотя бы? И dictionary пишется с t
Тебе свитч не нужен, тебе нужен Dictionary<string, Action>();
Создаешь его и в методе у тебя будет:
myDict[dictionaryName]();
Вот, блядь, я наговнокодил штуку. Она работает, клиенты довольны, но там реальный пиздец. Думаю: Проще переписать, чем пытаться рефакторить. Создаю новый проект и часа 2 просто сижу - туплю, думаю о том что и как лучше сделать, а потом удаляю проект и начинаю делать задачи которые стоят. Говнокод копится, рефакторить не хочется, потому что кажется что проще новый сделать. Так уже 3й год идет.
Хм. А я бы так вот сделал, кек.
1280x720, 0:01
Ты прав, спасибо!
Есть какой либо способ верификации приложения?
Возможно не правильно сформулировал вопрос, объясню на примере.
К примеру есть телеграм бот код которого выложен на гитхаб. Есть какой нибудь способ сделать так что бы юзер мог узнать когда будет писать в этого телеграм бота что код этого бота не менялся.
Понимаю что скорее всего нет но все же решил уточнить.
Я тоже вкатывальщик. Посмотри какой-то базовый видос про гитхаб на тытрубе где рассказывают про базовые понятия гита.
Дак а причем тут гит?
Есть какой то апи который может верефицировать запускаемое приложение?
Тебе же блин сказали: Хеш.
Смотришь оригинальное приложение, обычно там и так лежит файлик с хеш-суммой, либо рассчитываешь его. Затем рассчитываешь хеш для приложения что у тебя. Если отличаются - значит поменялось. Что сложного-то?
> код которого выложен на гитхаб
> Дак а причем тут гит?
...
> Есть какой то апи который может верефицировать запускаемое приложение?
Нету. Зато есть системы контроля версий.
Блять, короче. Если ты менял код делаешь коммит (точка сохранения). У этого коммита есть id, вот этот id ты можешь цеплять и сравнивать.
>>1923677
Да вы не поняли просто что нужно.
Еще раз повторю.
Есть к римеру бот на гитхабе. Ну к примеру мне нужно гарантировать что именно бот который я выложил будет запускать юзер.
Но юзер может его скачать и модифицировать, и просто подсовывать нужный хеш.
А мне нужно как то гарантировать что код запущенного бота это код на гитхабе. В частности бот не должен сохранять ни каких данных о пользователе который ему пишет. Но как я могу подтвердить что мой бот не сохраняет данные? Только выложить бота на гитхаб. А как пользователь может проверить вдруг на гитхабе один бот а запущен у меня другой?
Вроде разобрался, с помощью атрибута [Remote].
Смотрите, допустим есть некая база. В ней есть довольно общая сущность, допустим это товар. У нее есть связанная таблица атрибутов, в зависимосмти от типов товара - там разные могут быть атрибуты, они привязаны через доп-таблицу: ТоварАтрибут
Так вот. Суть в чем. На клиенте для разных типов товара должны быть разные вьюшки. Ну, типа: Технические характеристики, размеры для товаров что имеют эти характеристики, поддерживаемые интерфейсы для товаров у которых есть уже эти вот характеристики.
Ну, собвственно, мне интересно, как это было бы лучше реализовать. Пока что я думаю о том, чтобы просто добавить поле группа для таблички атрибут, ну, соответственно фронту будут отдаваться данные в сгруппированном виде и на нем можно будет просто отрисовать.
Может быть есть какие-то более изящные решения?
Ну, да, чому в шарпотреде - потому что я шарпоняша и это все на шарпах пишется.
Ну если группировка не изящное решение, то я даже и не знаю, какое изящное.
Йоу, пацантре.
Такой вопрос. Есть WPF приложение. Нужно периодически проверят коннект с сервером и отображать это. Есть самодельный класс, который отвечает за запись и чтения с сервера. Собна каким образом всё это можно сделать?
Таймер для этого нормально или есть какие-то более современные и нормальные подходы?
А причём тут stopwatch?
1. Сейчас адекватные мобильные игры на джаве не пишут. Используют шарп.
2. Сейчас мобильные приложения пишут на Kotlin. Не на шарпе.
Вопрос: вне контекста трудоустройства, мешает ли мне что-то клепать приложения на шарпе? Просто геймдев у шарпа, как я понял, гораздо лучше чем в джаве. Но и мобильные приложения тоже есть идейки. Подойдет ли шарп и для этого?
Xamarin для приложений (и простых игр)
Unity для игр.
Смысл есть, особенно если будешь крутиться исключительно в .core и mono
вот у меня пример моего говнокода который где много раз повторяются похожие функциии и методы, они работают так же единственное что отиличается так это тип данных, как мне фиксить такое и вместо 20 одинаковых функций под каждый тип данных сделать одну под все без ифов форов и медленных проверок?
> но все каким-то убогим и нагроможденным казалось
Можешь навести пример не убогого фреймворка? Я прост только асп знаю, интересно чем он плох.
Я на C# вообще не гоню, меня все устраивает, так как я смотрел разные фреймворки, ларавел и тому подобное, и там только на одних миграциях можно голову сломать
>конструктор
Дружище, у тебя статический класс.
>абстракции
Опять же, статический класс.
>много раз повторяются похожие функциии и методы, они работают так же единственное что отиличается так это тип данных, как мне фиксить такое и вместо 20 одинаковых функций под каждый тип данных сделать одну под все
Загугли дженерик классы и дженерики вообще. Они для этого и нужны.
И вообще. Не используй слово static без четкого понимания, зачем оно нужно. Статические классы только в соснольке с сотней строк кода удобно использовать, в чем-то мало-мальски серьезном ты только говна поешь, пытаясь понатыкать лишних статиков.
А каким образом я могу реализовать концепцию inMemoryDatabase без статического класса в котором хранятся данные?
так ведь для использования например не статических классов я должен буду создавать новый экземпляр класса каждый раз когда я хочу его использовать, учитывая что у меня будет много пользователей и много данных мне никакой памяти не хватит что бы хранить все эти экземпляры отдельно
В зависимости от связанности твоих "пользователей" (а я не уверен, что ты имеешь в виду) применяется Dependency Inversion или синглтоны.
нет, сингелтон точно не используется, потому что дб может изменять свое состояния и кешировать данные динамически, сингелтон это вообще про другое, насчет Dependency Inversion я не совсем понимаю к чему ты это, это просто паттерн, и да я спросил именно про то какие образом можно реализовать такой патерн в концепции inMemoryDataBase
>я спросил именно про то какие образом можно реализовать такой патерн в концепции inMemoryDataBase
1. Убираешь статики
2. Делаешь класс дженериком и сокращаешь с помощью этого код
3. Делаешь для класса интерфейс и наследуешь его классом
4. Используешь DI-фреймворк/пилишь DI вручную (по сути хуячишь инстанс своего класса в ~мейне и прокидываешь этот инстанс через конструкторы или методы к классам, где он нужен)
Ты троллишь, что ли, блять? Памяти у него не хватит, видите ли, если создавать объекты. Профилировал уже?
Пиздуй пикрелейтед читать.
Ну, блин. Зависит от архитектуры приложения.
Но самый простой способ - берешь таймер из класса Timers.
> ведь для использования например не статических классов я должен буду создавать новый экземпляр класса каждый раз когда я хочу его использовать
С хуя, лол?
Вот серьезно, с какого хуя-то? Ты можешь создать один экземпляр и передавать его сколько хочешь кому хочешь. Можешь ебануть синглтон и закрыв конструктор получать один и тот же экземпляр откуда угодно.
По ходу дела желаю всем уебанам, вручную имплементирующим синглтоны, всю жизнь писать для них юнит тесты.
>я должен буду создавать новый экземпляр класса каждый
>насчет Dependency Inversion я не совсем понимаю к чему ты это, это просто паттерн
На пальцах.
1 изначально дергаем статик класс зависимость или синглтон зависимость прямо из класса. Работает, но все прибито гвоздями и невозможно ни нормально тестировать, ни подменить реализацию
2 Вносим Dependency Inversion - не лезем к зависимостям сами, а получаем их через конструктор. Тестируется на отлично и подменяются реализации. Но как результат - нужно создавать экземпляры
3 И если у нас экземпляры, то как же синглтоны? Решение простое - прокидывать всем один и тот же экземпляр зависимости.
4 И тут на сцену выходят IoC контейнеры (которые суть автофабрики, которые рантайм просто пишет за нас) и в них декларативно задается время жизни зависимости в рамках контейнера.
И поскольку все создается с помощью IoC контейнера, то он позаботится о том чтобы все получили один и тот же экземпляр "синглтона"
Я уже писал, синглтон не применим ни в коем случае, МНЕ НУЖНЫ РАЗНЫЕ ЕКЗЕМПЛЯРЫ а не один и тот же
любой, кто увидел static, разумно делает предположение, что нужен синглтон
ведь для этого static и применяется - не создавать экземпляры.
и реализовать опять же очень просто - нужные разные экземпляры...так создавай разные экземпляры там, где они нужны разные.
Проблемы то нет
>Решение простое - прокидывать всем один и тот же экземпляр зависимости.
не валидно
судя по постоянными переложениям юзать синглтон я понял что никто не читал код который я выложил поэтому объясню на пальцах
для каждой сущности (продукты, счета, и тп) данных свой класс, а для каждого пользователя свой экземпляр с ЕГО сущностями
сейчас работает так, 20 классов которые возвращают из физической базы и кешируют в память свои сущности, они биндятся в 20 словарей под каждую сущность, ключем является пользователь, данные обновляются реальном времени, а если пользователя нет/сесия пользователя нет, то и данных нет/данные удаляются
и очевидно что все словари с данными должны ДОЛЖНЫ быть статическими, и их должно быть 20 по каждому на сущность, другой вопрос нужно ли мне 20 статических классов которые возвращают каждый сво сущность или это можно сделать умнее
Значит используй моностейт, а не синглтон.
Я класс inMemoryDB со всеми вложенными статическими классами инициализирую при старте сервиса если ты об этом, а классы которые возвращают данные из физической дб в inMemoryDB в синглтонах не нуждаются
конечно не читал. никто не понял зачем нужен этот инмеморидб и что он делает
а когда увидел множество "new Thread()" то тут аж сердце прихватывает от такого
А "20 классов" - ты тут криво описал нечто похожее на обычные repository с кешированием внутри себя.
>не валидно
конечно не валидно. ведь это середина истории. А самая суть под пунктом 4
>что все словари с данными должны ДОЛЖНЫ быть статическими
ты путаешь понятие "статический" и "один для всех". Для "один на всех" не нужно быть статическим - достаточно сделать так, чтобы был один инстанс для всех
Тебе нужно понять концепт
Задача разбивается на ответственности. Затем, в соответствии с SRP, реализуешь классы, где каждый класс отвечает за свое.
Далее из этих классов (как из кубиков) собираешь граф объектов с зависимостями.
Ну а потом просто пнуть его и оно заработает.
И вот тут при создании графа ты и решаешь что должно быть в 1 экземпляре, а что создаваться каждый раз. А еще есть скоупы, где экземпляр переиспользуется в рамках скоупа.
Вот эту концепцию вкури, а "статики/синглтоны для того чтобы он был один" забудь как страшный сон
Можешь не любить IoC, а написать код инстанцирования руками (IoC просто генерит тот же код за нас, позволяя нам декларативно задавать).
Статики/синглтоны - зло
Экземпляры, но гарантирована1 штука - добро.
У тебя класс inMemoryDB, у тебя 20 классов реп, которые читают из бд. Каждый из них может кешировать тупо в словарих внутри себя. А может быть у них общий кеш - тогда еще один класс. И все это НЕ-статическое.
А что из них создается каждый раз, а кто один раз - решит тот, кто собирает граф.
конечно не читал. никто не понял зачем нужен этот инмеморидб и что он делает
а когда увидел множество "new Thread()" то тут аж сердце прихватывает от такого
А "20 классов" - ты тут криво описал нечто похожее на обычные repository с кешированием внутри себя.
>не валидно
конечно не валидно. ведь это середина истории. А самая суть под пунктом 4
>что все словари с данными должны ДОЛЖНЫ быть статическими
ты путаешь понятие "статический" и "один для всех". Для "один на всех" не нужно быть статическим - достаточно сделать так, чтобы был один инстанс для всех
Тебе нужно понять концепт
Задача разбивается на ответственности. Затем, в соответствии с SRP, реализуешь классы, где каждый класс отвечает за свое.
Далее из этих классов (как из кубиков) собираешь граф объектов с зависимостями.
Ну а потом просто пнуть его и оно заработает.
И вот тут при создании графа ты и решаешь что должно быть в 1 экземпляре, а что создаваться каждый раз. А еще есть скоупы, где экземпляр переиспользуется в рамках скоупа.
Вот эту концепцию вкури, а "статики/синглтоны для того чтобы он был один" забудь как страшный сон
Можешь не любить IoC, а написать код инстанцирования руками (IoC просто генерит тот же код за нас, позволяя нам декларативно задавать).
Статики/синглтоны - зло
Экземпляры, но гарантирована1 штука - добро.
У тебя класс inMemoryDB, у тебя 20 классов реп, которые читают из бд. Каждый из них может кешировать тупо в словарих внутри себя. А может быть у них общий кеш - тогда еще один класс. И все это НЕ-статическое.
А что из них создается каждый раз, а кто один раз - решит тот, кто собирает граф.
ну смотри, предположим у меня 10 пользователей, они будут получать данные по своему айди но данные у них одинаковые, тот же набор продуктов и тп, правильно я понимаю что с нестатическими классами они все забиндуют в словарь 10 одних и тех же копий тех же данных, но в разных потоках которые не будут иметь отношения друг к другу? потому что мне кажется что именно так и будет и это уже не похоже на базу данных в памяти, это просто кеширование,
Словарь так то только при инициализации создается, а про тред я вообще не понял в чем претензия
То, что ты описал это называется Identity map - кеш загруженных сущностей.
А значит каждый из твоих 20 классов получит ссылку на общий экземпляр такого кеша, где они и будут спрашивать "не загружено ли"
он как раз нужен чтобы НЕ создавать новый поток, а взять уже созданный из пула. Это экономит и время и ресурсы.
поэтому минимум Task.Run() вместо new Thread()
если оно вообще нужно конечно - ибо ты обращается к I/O
Я почитаю об этом
об этом тоже почитаю
Ты же понимаешь, что я описал DI-реализацию ТВОЕГО кода с ТЕМ ЖЕ функционалом? Где вместо статика (который по определению является одним инстансом) мы используем один инстанс? Пиздец у тебя каша в голове.
А по факту делается это так:
1. Добавляешь в интерфейс строку
static void GetInstance() => throw new NotImplementedException();
2. Добавляешь в класс строку
static void GetInstance() => new inMemoryDB();
3. Вместо имеющегося инстанса кидаешь в конструкторы _instance.GetInstance()
А по факту это не делается, а используются DI-фреймворки, которые делают все вышеперечисленное вместо тебя, а тебе нужно написать одну строку. И ты бы быстро нашел этот функционал в любом из них, потрать ты хоть секунду на изучение темы, а не беги на двачик с вопросом, который при твоем непонимании статиков объяснить примерно нереально.
А в чем проблема лока кроме того что он статический? и что в данном случае можно использовать кроме сторонних фремворков?которые типа "написал строку и ок" а в реальности "написал строчку и там выполняется полная каша которая делает код процентов на 200 медленнее как например с ЕФ
Можно, например, использовать ConcurrentDictionary. Тогда, может, кому-то и захочется читать ту простыню.
На Энтити гон абсолютно необоснованный, он генерирует запросы, которые от рукописных отличаются только переименованием полей. В два раза медленнее он, потому что вместо тебя реализует вот это кеширование, транзакции и другое.
unique key
Тебя в яндекс-переводчике забанили? Зачем ты пытаешься понять смысл предложения только по двум словам?
Конечно, она самая. Автор говорит, что формат даты будет у тебя другой, потому что ToString по дефолту форматирует для текущей локали.
united kingdom
Так вот, когда я пробовал вот так вот
Dictionary<string, Dictionary> - студия меня матом послала, дескать нужно указать типы для ключа и значения. Но ведь в том и суть что мне нужно чтобы словари что являются значением - могли быть любыми. При этом хотелось бы чтобы тип был виден нормально и не нужно было преобразования эти делать.
Есть хак какой-нибудь, кроме как: Dictionary<string,Dictionary<object,object>>?
>могли быть любыми. При этом хотелось бы чтобы тип был виден нормально
нужно подключить библиотеку libastral в проект и это станет возможным.
data Yoba a b = Dictionary<string, Dictionary<a, b>> (с точностью до синтаксиса)
анончик, а давай вместе вкатываться. Я немного дальше тебя в изучении C# прошел, но думаю все равно обоим будет полезно.
@SpaceCowBoy2176
Хаскеллист в треде?
Experience with ADO.Net, MVC, WebAPI, SignalR
Experience with Lucene.NET
Knowledge of JavaScript, TypeScript
Knowledge of xUnit, MsTest, Moq
Experience with SQL (Microsoft SQL Server)
Familiarity with Agile process, Scrum, Git
Можно завернуть Dictionary<object, object> в класс Yoba и прописать проперти Type - будешь хоть как-то видеть тип. Или завернуть Dictionary<string, Dictionary<object, object>> в класс Yoba и прописать свистоперделки для удобства. А так - только Dictionary<object, object>, динамическая типизация не предусмотрена, так что придется иначе ставить задачу или терпеть неудобства.
>>1926921
Так можно сделать, но по сути это то же самое, что Dictionary<object, object>, только без предохранения от Студии и компилятора. Любой обосрамс в коде ебанет только в рантайме, и местами выявить проблему очень непросто. Лучше писать эксплицитно Dictionary<object, object> - меньше вероятность выстрелить себе в ногу, хоть и придется везде прописывать приведение вручную.
задачи разные бывают
Два года назад стал разработчиком. Писал на C#, в основном на фреймворке Террасофта (бэк на C#, фронт на их специфическом JS).
Сейчас у компании свой новый проект на Java, без Гибернейта и Спринга.
В каком направлении развиваться. Я работал немного с Java в своё время, он показался мне всратым по сравнению с дотнетом. Но вопрос в рынке труда и перспективах.
Плюс, на изучении чего сосредоточиться, какие вопросы нужно хорошо знать, а что можно подглядеть по ходу работы?
Также, стоит ли концентрироваться на .Net Framework 4.8, или в нынешних реалиях это легаси? Перекатываются ли все массово на Core на .Net 5?
>в нынешних реалиях это легаси
Да
>Перекатываются ли все массово на Core на .Net 5?
Да (кроме закоренелого легаси, по очевидным причинам)
Можно как-то в WPF'e с код бехайнда изменять текст в TextBlock'e с разметкой/форматированием?
Вот такая хуита https://stackoverflow.com/questions/53508956/wpf-c-sharp-how-to-set-formatted-text-in-textblock-using-text-property кидает на каждый чих эксепшн (<UnderLine> not found).
ну так напиши сам код который будет транслировать твои <Underline> в правильный Inlines, а не тот ужас что по ссылке
Когда вас спрашивают кем вы работаете - вы скрываете, что пишите на C#? Это ведь зашквар.
Меня на фронт перевели, а я и не против. но петпрожект на решетке допилю, лень на электрон переписывать
наоборот горжусь.
Ну и сколько челиков в тренде пишет на чем-то кроме винды? Понимаешь, на php тоже можно писать в винде. Но неудобно.
Как минимум я пишу
Зачем вообще на винде писать?
Работаю под линуксом, весь продакшен на линуксовых серверах, докер образы под кубером.
мимо .net core бэкендер
я тоже пишу
Короче, сяду за новый пет-проект на .Net 5.
Но вопрос ещё и вот в чём: стоит ли смотреть в сторону Java?
Она мне кажется совершенно всратой. Плюс, шарп я люблю за то, что можно смотреть в сторону геймдева на Юнити.
Не понял что ты спросил.
Пишу на винде, потому что студия тупо удобнее чем все всякие vsCode и дргуие говноредакторы, типа райдера. И попробуй пусть хоть один пидорас скажет, что студия неудобна, почти каждый плсюовик - в ней кодит, хоть и не все признаются. Просто вот так уж вышло, что по факту - лучше студии и нет ничего для разработки. Разве что в нишах всяких, типа под яблоко - лучше их xcode (или что там у яблочников сейчас, я давно не следил), под андроид - андроидстудия; но если смотреть в общем - студия все еще остается лучшей иде, если ты на плюсах или языке из .net кодишь.
А то что пишу сейчас - запускают как на линуксах, так и на винде.
ну епта, вы чего
Я думал это революционный фреймворк, в вы чета заигнорили вопрос, не знаком чтоли никто
Главная проблема студии (помимо кривого перегруженного неинтуитвного интерфейса, в котором все свалено в одну кучу) - её громоздкость. Т.е. либо она у тебя будет отжирать половину ssd, либо грузиться по пол часа.
когда с программистской зарплаты не можешь купить ссд на 128гб и айпять десятилетней давности?
ну ты даешь, Яблочники уже всю всю зарплату потратили на оверпрайснутый еир, на подписку АЙтюнс, на АЙклоуд, откуда у них деньги еще и на ссд, да и нету слотов расширения у епловых поделок
В базе уже есть таблица с результатами, только они сохраняются в конце. Я хочу переписать так чтобы запись апдейтилась после каждого вопроса. В таблице есть поле - перечисление ответов, туда запихивается сериализируемый list<answer>.
Дальше у меня начинаются вопросы. При загрузке теста нужно определить есть ли запись или нужно начинать новый тест. В начале я подумал что нужно доставть тот лист и смотреть сходятся ли каунт листа и каунт вопросов, но это мне не совсем подходит. Дальше я подумал что мне нужно добавить флаг - пройден ли тест, но добавить поле в таблицу не совсем правильно т.к. у меня шифрование/безопасность и юзверь может залезть в файл бд и поменять флаг. Дальше я подумал что нужно этот флаг засунуть в само поле ответов, т.е. в лист, но лист это перечисление ответов, а мне нужно записать как-то поверх него вот этот стейт. Подумал записывать в поле словарь, но у меня не соблюдается уникальный ключ, т.е. ответы могут быть идентичными. Короче как это правильнее реализовать? Или можно как-то юзать словарь без уникального ключа?
Так и не понял в чем проблема еще одну таблицу создать и что там у тебя шифруется и почему новая таблица не будет шифроваться.
У тебя ответы в ОЗУ "шифруются"? В чем проблема юзеру сейчас "залезть в файл бд и поменять" что-то?
Хуй знает. Непонятно что там у тебя накостылено. Нарисуй на бумажке нормализированную схему БД типа: Test (Id, IsCompleted), AnwerFact (Id, QuestionId,...) и подумай, сможешь ли ты осилить рефактор нормальный.
Оно оба ASP.NET
Но вот именно ASP.NET MVC со всякими рейзорами я уже года три нигде не видел.
Так что не преимущество, но скорее всего и не большой пробел. Иногда на собесах и за рейзор спросить могут.
Подскажите куда смотреть. Нужно получить доступ к скроллу другого приложения.
Что для этого надо?
Где можно почитать что у синьёра на собеседовании обычно спрашивают? Интересующий стек ASP.NET MVC/Web Api + вопросы по самому шарпу.
Плохо, придется архитектуру проектов повспоминать, а то я уже на автомате бизнеслогику меняю.
let me google for you
https://stackoverflow.com/questions/5272177/console-writeline-slow
Why Console is slow:
Console output is actually an IO stream that's managed by your operating system. Most IO classes (like FileStream) have async methods but the Console class was never updated so it always blocks the thread when writing.
Console.WriteLine is backed by SyncTextWriter which uses a global lock to prevent multiple threads from writing partial lines. This is a major bottleneck that forces all threads to wait for each other to finish the write.
If the console window is visible on screen then there can be significant slowdown because the window needs to be redrawn before the console output is considered flushed.
Говно, ты?
Что почитать по azure?
Приложение на asp накидал(простенькое говно), подумал что стоит повоевать и в ту сторону.
Я хз с чего как найти то что надо мне.
Вопрос такой. Есть такая игра path of exile, для нее есть сторонний софт который по нажатию клавиш получает данные о предмете из игры. И вот вопрос как он получает данные из игры ?
Вот пример такой программы. Она сильно сложная для меня. Хотелось бы сделать что то похожее но вот не могу понять как программа получает данные о предмете, на сайте игры ничего нет такова(
https://github.com/domialex/Sidekick
Скажите, насколько реально ньюфагу сейчас джуном на юнити вкатиться? Интересны разработки всякие под ВиаР.
Есть один паттерн для написания приложение на WPF под названием MVVM. Узнал об этом паттерне несколько лет назад, за это время успел выучить Python на нормальном уровне, но ебучий MVVM так и не освоил.
Я могу без проблем передать свойства объекта из View в Model, вернуть их, отобразить, с этой частью проблем нет.
Но ебучее нажатие на кнопку реализовать - это же тотальный пиздец. Какие-то нахуй ICommand айхуйкомманд, RelayCommand на несколько десятков строк, да это, ебись оно в рот, не стоит того ради выполнения пары строк кода для изменения интерфейса.
А когда начинается открытие дополнительных окон в приложение то всё нахуй, дальше пешком быстрее будет.
Есть какой-то нормальный аналог этому паттерну? Я с этим говном заебался возится. Костыль на костыле, блять, и никто этого не видит.
>успел выучить Python на нормальном уровне
>MVVM так и не освоил
Петухон можно выучить до "нормально уровня" за 15-20 минут? Ровно столько нужно, чтобы разобратся в таком элементарном паттерне
Может, я тупой? Объясни мне нормальный способ вызвать процедуру нажатия кнопки сквозь ViewModel.
Справедливости ради - сам-то паттерн понять не проблема.
Хуйня в том, что он не нужон и вообще больше проблем вызывает, особенно в контексте WPF. Ыыыы, как весело сидеть с профиллировщиком и искать где же ты от INotifyPropertyChanged забыл отписаться.
А вообще, большей справедливости ради - WPF - говно. Серьезно. Лучше чем формы не придумали еще. Вот это как раз охуенная штука была: пишется легко, работает быстро, куча вещей прямо из коробки, еще и не нужно эту залупу XML'нуй под названием ЗАМЛ использовать. Если бы я все еще писал под десктоп, тем более виндовый - то брал бы формы, охуенная штука была, однако.
> Есть какой-то нормальный аналог этому паттерну?
А, ну да. MVC - если ты так уж аналога хочешь. Удобно и просто.
>Просто так то из памяти я думаю запрещено в память игры внедрятся.
А как же тогда артманя работала?
>Но ебучее нажатие на кнопку реализовать - это же тотальный пиздец. Какие-то нахуй ICommand айхуйкомманд, RelayCommand на несколько десятков строк, да это, ебись оно в рот, не стоит того ради выполнения пары строк кода для изменения интерфейса.
Ну, раньше как было? Нажал на кнопку, сработало событие, которое вызвало нужный метод. А ща нажал на копку, сработало событие, которое вызвало команду, которая вызвала метод, который на нее подписан
Прошел 40 уровней джавы, начал переводить один исходничек на джаву, который был только на пайтоне, да так там всё охуенно, что я на 3 месяца в пайтон перекатился и прошел лэтпай. Но сейчас понимаю, что пора бы и честь знать, надо взрослый компилируемый язык учить. Свёлся к шарпам... но ссука открываю это после 3 месяцев питона и плакать хочется, как не хочется опять в эту джаву. Уговорите меня, пожалуйста, парни. Дайте леща, что бы я с питона слез. Как мне обмануть мой мозг? Чем питон хуже сишных? Ведь там, где я два дня матерился в джаве, в питоне я просто пару строк практически наугад написал и оно заработало.
Интересно. Я тут не местный. А адекваты в этом треде есть вообще?
Лучше в unreal+кресты+3дмакс/блендер/збраш посмотри.
Ну так шарп не джава, а язык в котором можно умереть от сахарного диабета. Думаю, код на нем лаконичнее чем на питоне.
> Ведь там, где я два дня матерился в джаве, в питоне я просто пару строк практически наугад написал и оно заработало.
Наведи пример задачи плез.
У меня ситуация обратная. Я блять искренне не понимаю людей добровольно идущих на питон после джавы/шарпа/плюсов(особенно после плюсов), это же конченная песочница в которой буквально все сделано за тебя и ты как макака импортишь модулей 20 и пишешь 3 строки кода. Да я js уважать стал, когда увидел что творится на питоне.
Я просто не понимаю вообще, как можно писать на игрушечной залупе, когда есть С++ или Шарпы (пишу и на том и на том).
Особенно динамически типизированной.
то есть ну вот оно же быстрей жабы? и не требует кучи говнообразных jre за собой тянуть.
Требует. Принцип работы у них одинаковый, разница только в разрабе и в том что под цлр не только на шарпе писать можно
>и ты как макака импортишь модулей 20 и пишешь 3 строки кода
То ли дело в шарпе, который в своем хваленом wpf графики из коробки рисовать не умеет
А почему формы умеют? Может WPF еще и в кнопки уметь не будет и надо свой контрол писать?
>А почему формы умеют
а кто сказал что такой подход правильный
>Может WPF еще и в кнопки уметь не будет и надо свой контрол писать?
Кнопки это базовый функционал и нужны каждому. Более того, они нужны как "кнопки разве что с разным внешним видом" в отличие от графиков, где каждому нужно свое
или вам так хочется велосипеды писать? Может тогда уже на ассемблере начнем писать? охуено же
я понимаю, что ты хочешь услышать слова поддержки
но твой вопрос звучит так
"я вот хочу заниматься футболом, у меня получился, если я буду упорно тренироваться каждый день?"
>на питон пиздите - охуенный язык
вот только подходит не везде. забавно смотреть на пляски с мультипроцессностью вместо того чтобы взять любой язык без GIL
ну вот ГИЛ да - полностью согласен
да нет, ты обосрался, достаточно NETStandard.Library 2 размром пару мегабайт, без установки говнообразных 300 метровых JRE
https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-desktop-5.0.2-windows-x86-installer
Среда выполнения .нет 5 весит 47 в сжатом состоянии. У жавы не знаю, можешь зайти и скачать самостоятельно.
У меня синдром дефицита внимания, мне сложно концентрироваться долго на определенных вещах, собственно я невнимательны и расссеяный но это касается только мелких вещей, забыл кому поставить, забыл букву написать, пропустил слово на диктанте и тп, но я слышал что в современных программах для писания кода все так умно что программа сама подсказивает тебе что писать, что забыл написать и где программист допустил.
Так какой шанс вкатиться в программирования?
стандартная поставка со всеми дистрибутивами винды, и как было сказано, один маленький файл netstandart.dll решает все проблемы, все таки dll это самостоятельная сущность, в отличие от class файлов.
Через синглфайл паблиш с триммингом он сожмёт дотнет до 10 мб и впердолит в экзешник, даже ставить ничего не надо. Это же не джавапараша, где открываешь jar-файлы рантаймом как в питоне pyc.
как человек с таким же расстройством могу сказать, что все ок
это как с нервным тиком - постарайся забыть, что он есть и перестань пропуск запятой сливать на диагноз
и все должно быть нормально
тут и не такие дауны работают
полагаю только впф
Возможно ли в .Net сделать структуру как для каждого скрипта на Питоне(пик), или для каждой программы надо делать новый проект(мейн один рабочий на проект)?
Я б с радостью, дружочек-пирожочек, но я до лета перекинулся на дроч егэ.
Нет, я не школьник, мне 30. Ага..
Взял 5 доп. предметов для сдачи на егэ. Хочется сдать хотя бы 2 + рус.мат. Я ебанутый немного,- жить не хочется ну, чуть больше чем обычно уже спустя неделю подготовки. Помогает, разве что, что мне кроме этого и работы ничего делать не нужно т.к друзей нет, растительности нет, населена фаготами.
Но будет интересно посмотреть чего ты достигнешь. Напишу через год, постараюсь не забыть.
Допустим, вот пример на пике это как раз та хуйня о которой я говорю.
Так вот, допустим мне хочется чтобы в наследниках я мог получить явный тип, а не интерфейc. При этом мне не нравится вот эта вот залупистика с дженериками.
Есть ли какой-то более изящный способ получить подобное поведение?
Может быть тут непонятно. Но вот реальный пример. У меня есть TCP-сервер на сокетах. На одном порту слушаются и обрабатываются одни сообщения, на другом - другие, на третьем третьи и т.д.. Я хочу иметь возможность получить явно тот тип сообщения и не париться с приведением типа. Потому я TCP серверу ебанул в параметрах женерика - тип сообщений, чтобы можно было прокинуть нужный парсер и обработчик. Но эти дженерики оч сильно раздувают код, оч тяжело читать, оч тяжело потом что-то изменять, мне хочется от них отказаться, а как - хз. Пока что я думаю о том, чтобы вообще просто уйти от наследования и просто сделать два несколько классов, которые просто повторяют частично логику друг друга, да будет копипаст, но будет и легче с этим вот работать, если что-то поменяется, я буду смогу меньше костылей использовать, потому что сейчас иногда выходят жуткие способы обойти наследование. Как второй вариант - я думаю о том, чтобы этот базовый класс уже превратить в сорт оф компонент и просто его передавать в конструкторе дочерним, а общение с ним на события повесить.
Что за говно написано? Пиши нормально блеать!
проперти -> private readonly field
По вопросу - не нравятся generic, не пиши.
По ООП:
RT rt = new AT();
Поля всегда берутся из rt, что имеется- определяет rt, а что исполняется AT.
Объясните, зачем в рамках метода там часто делается что-то типа
{
TypeName foo = m_bar;
foo.Buzz();
}
Почем просто это m_bar не использовать? И должен ли я делать так в своем коде?
Да. Кто пишет на шарпах, тот знает свой компилятор.
Специально написал для того поехавшего
>на вскидку
что бы отсечь
АРРРЯРЯ мне не даёт покоя эта хуйня, не игнорите мой тупой вопрос. Я чисто из-за моего бзика пока порядка не будет с структурой не могу начать.
Вот примерно про это я писал:
import pyodbc
driver = 'SQL Server'
server = 'xxx.xxx.xxx.xxx'
database = 'Peoples'
uid = 'Кулхацкер'
pwd = 'pwd'
cnxn = pyodbc.connect('DRIVER=' + driver + ';SERVER=' + server + ';DATABASE=' + database + ';UID=' + uid + ';PWD=' + pwd)
cursor = cnxn.cursor()
cursor.execute("UPDATE Freaks set Huy = 'Pizda' WHERE Gender = Transgender")
cnxn.commit()
На самом деле я по началу в питоне охуевал от отсутствия жесткой типизации. Просто голова кругом идет. Но потом привыкаешь. Наверное мозг разглаживается лол
>>1932026
Т.е. понимаешь, да?
На питоне я ничего даже не написал. Просто настройки и собственно SQL запрос. У меня первая мысль была - а что тут учить то надо, какие библы импортировать штоле?
А шарпы с джавой я сравниваю чисто по синтаксису. Ну одно и то же ведь. Только на джаве я бы для этого неебическую портянку писал и еще оно бы не работало с полоборота, ебался бы два дня.
мне нужно вывести таблицу в datagridview с определенным значением, но проблема в том , что если переменная в sql запросе написана на английском, то он ее находит и выводит без проблем , а если на русском, но он нихуя не выводит, кто знает как это пофиксить?
>>1931794
Можно всё сделать через операции: прокидывать в args[] Main название операции и главу, например, Chapter_1, Exercize_8 кидаешь, все упражнения у тебя наследуются от абстрактного BaseExercize, где у тебя есть абстрактный (или виртуальный, тут как хочешь) метод Process
Отбираешь нужный класс
var operation =
Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Name == args[1] && t.Namespace.Contains(args[0]) && !t.IsAbstract && t.IsSubclassOf(typeOf(BaseExercize))).Select(i => (BaseExercize)Activator.CreateInstance(i)).FirstOfDefault();
operation?.Process();
Всё это получается через рефлексию, хреново оптимизированно, но можно обойтись без кучи проектов
Ну и естественно аргументы - имя класса и неймспейс (или его часть)
Если у м_бар тип отличный от тайпнейм и базз виртуальный метод, то вызов без присваивания тайпнейм переменной будет отличаться
>сырой скл
>2к20
Ты сейчас серьезно? В шарпе конечно немножко больше надо ебаться - обьявить свои классы для модели, сделать свой контекст и указать какие в нем таблицы, но это же делается чисто для того, чтобы ты потом вместо
> UPDATE Freaks set Huy = 'Pizda' WHERE Gender = Transgender
Написал
>foreach (var freak in dbcontext.freaks.Where(t => gender == Transgender))
> freak.huy = "Pizda";
>database.SaveChanges()
И при этом шарп за тебя еще базу данных со всей моделлю, если ее нет, создаст. И при этом будет еще следить за изменением всех моделей, чтобы ты в одну консольную комманду мог синхронизировать бд модель с шарп моделью. И да, в 2к20 на шарпе даже скл можно не знать, ведь запросы пишутся на шарпе и юзают шарповые типы.
Но настройка это одноразовая, при создании проекта. В самом же коде тебе этот контекст даже создавать не нужно - просто передай его как аргумент в конструктор твоего класса-сервиса, и шарп сам создаст контекст.
А твой вариант подойдет разве что для одноразового скрипта к существующей базе данных. Но никак не к основному приложению, для которого создается бд.
Условно есть параметр "удача на побег", обозначен массивом int[] luck = { 0, 0, 0, 5, 6 };, который в процессе игры может меняться каким либо предметом, повышая параметр.
Сам он работает так - бросается игровая кость АКА рандомное число переменной dice от 1 до 6, если значение из массива равно значению на игральной кости, то игрок сбегает.
Проблема: не могу понять как сравнить значения в массиве со значением переменной.
Пробовал через for (int i = 0; i < length; i++); { if (dice == luck; ... }, но значение i всегда было равно 0.
Сейчас сделал через сравнение каждой отдельной переменной в массиве - if (dice == luck [0] || dice == luck [1] || ... || dice == luck[5]), но есть же по-любому способ компактнее это сделать
Please help.
Если ли какой нибудь способ описать группу элементов на xaml, а потом в том же ксамле вставлять что-то типа <myGroup></myGroup> несколько раз
>for (int i = 0; i < length; i++); { if (dice == luck; ... }
Точка с запятой не нужна, т.к. это означает, что ты закончил описание цикла. То есть следующий блок кода в { } расценивается как отдельный блок со своей зоной видимости и не более.
В твоём случаи, можно сделать либо так:
for (int i = 0; i <luck.length; i++){
if(luck == dice){
//побег
}
}
Либо можно воспользоваться этим https://docs.microsoft.com/ru-ru/dotnet/api/system.array.exists?view=net-5.0
Но первый это самый очевидный способ и он не содержит в себе никаких недостатков, помимо того, что занимает 5 строки кода, место 2 или 1
Это называется исполняемым файлом. В случаи C# это сборка, которая без .net не запустится. А .net нужен как раз потому, что там интерпретируемый код.
Шо?
Ну так тебе порт надо выбрать для сервера, на который будут стучаться клиенты. А сервер тебе подконтролен. Но очевидно не стоит выбирать порты, которые используют популярные приложения и системные (<1024).
О как.
Значит .net это, грубо, то же самое, что и джавовский jdk, а равно и сам собственно пайтон? Я сейчас в том смысле, что сначала на чужой комп надо поставить что то, что бы твоё творение там работало?
*jre
В коре можно компилировать в self-contained под конкретную платформу и тогда прога будет включать в себя и рантайм и сможет запускаться безо всего.
>А сервер тебе подконтролен
Но, на нем же дохуя всякого барахла еще крутится, мне у каждой проги гуглить, какой порт она юзает? А если я написал охуенное приложение, которое все покупают и используют? Тогда ведь их сервера мне не подконтрольны.
>на нем же дохуя всякого барахла еще крутится
Ну вбей в гугл 'check if port free %OS%' и проверь свободен прт или занят. Плюс можно на вики посмотреть
https://ru.wikipedia.org/wiki/Список_портов_TCP_и_UDP
>А если я написал охуенное приложение, которое все покупают и используют?
Подай заявку в IANA https://www.iana.org/form/ports-services, и другие смогут нагуглить что этот порт использует hellowrd Пупкина.
>Тогда ведь их сервера мне не подконтрольны.
Но тогда и айпи тебе не подконтрольны, а значит надо клиенту где-то указывать IP, тогда там можно и порт попросить указать.
>а значит надо клиенту где-то указывать IP, тогда там можно и порт попросить указать.
Да, и вот потом клиенты будут в тп обрывать телефоны, какой порт писать. Почему 555 не работает, ряяяя.
Вот в промышленности проще с этим. 502 - modbus tcp и все. Хоть и можно порт указывать в программах, но никто этого не делает, есть уже выделенный
>Да, и вот потом клиенты будут в тп обрывать телефоны, какой порт писать. Почему 555 не работает, ряяяя.
Так это проеб админа, если у него серв слушает 15000 порт, а клиентам сказал подключаться на 17000. Тут уж какой не выберешь порт можно поломать. А вдруг ты выберешь порт ххх, а он у кого-то фаерволом заблочен? В общем ты пытаешься решить проблему, которой нет.
Но тогда получается, что существует только один высокоуровневый православный язык - дважды крест
Поучу ка я пока алгоритмы с паттернами по будням. И какой-нибудь godot по выходным. Не буду привязываться к синтаксисам пока, авось, кто то и захватит мир окончательно и бесповоротно. Плюсы учить нунахуй
Если ты про компилируемые, то как минимум go и rust ещё
Кодить СУБД - это помимо шарпа нужно СУБД матчасть знать. Туда ты так легко не вкатишься. Это тебе не формошлёпство на ВПФ.
Так его же не на разработку аналоговнетной СУБД берут, а хранимки на 2.5 select писать
эта вакансия на производственном предприятии - на заводе)) ты думаешь, там будет овер ебейшая разработка блять?
>Тут есть версии же, с какой начать изучение?
Спроси у заводчан. Ты же, наверно, не единственный там программист (а если единственный - сочувствую). Какую версию дадут - такую и изучай. Если ты в свободном полете, то изучай сразу .NET 5.
На самом деле, с фреймворка на кор и обратно можно пересесть за неделю-две, они во многом похожи. А для дроча всяких циклов-ветвлений в процессе обучения разницы между ними вообще нет.
>И вообще, как язык сам по себе: трудный, лёгкий?
Примерно средний. Местами может быть не очень понятным (например, со ссылочностью типов), но когда начинаешь о языке иметь представление - он становится охуенно удобным и понятным.
Алсо, если нет опыта программирования - не рассчитывай, что даже через месяц интенсивной учебы сможешь писать хороший код. По-нормальному нужно уделять на учебу пару месяцев, и желательно еще ментора иметь хотя бы на работе, но я хз, как у тебя с этим дела обстоят.
> на заводе)) ты думаешь, там будет овер ебейшая разработка блять?
Ну сходи. Посмотрим как быстро скобачьки с твоей рожи слезут.
> с какой начать изучение?
С второй. Раз уж так о легаси волнуешься.
А вообще с любой на самом деле, разница там не так велика.
> А если будет легаси год, то придётся и старые версии знать?
Что это значит? Версии языка отличаются в основном тем что тут мы можем написать array[1..5] а там - не можем, тут у нас есть рекорды, а там - нету.
> Может кто пояснить за версии
https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-version-history
> И вообще, как язык сам по себе: трудный, лёгкий?
Если говорить о том, чтобы сесть и что-то работающее написать - легкий(я сравниваю с сишечкой и асмом, которые были в универе). Если начать копаться в кишочках, то любой язык - сложный.
Лол, ты серьезно думаешь, что на заводе, где ВЕДУЩИЙ ПРОГРАММИСТ, обычно получает что-то в районе 60к-80к - какой-то адовый отбор и дроч?
Я вот когда в вузе диплом писал, как раз проходил практику на заводе, так вот, за время практики на всего пришли 5 человек, 4 из которых впервые вообще ИДЕ видели и по образованию эт были прикладные математики, ну и хули, дали им книжку, интернет - за месяц изучите, через месяц мы вам придумаем какую-нибудь работу, справитесь - возьмем на постоянку. Никого, блядь, не отсеяли, даже тех кто не справился с элементарными задачками - послали в сисадмины, кек.
>Спроси у заводчан.
Я там ещё не работаю. Я пока планирую изучить C# потому что он там требуется, C/C++ как плюс, но не обязательно вообще. Просто знаю что там требуется такой чел, а в моей мухосрани людей, знающих, что такое C# максимально минимальное.
>>1933437
>Посмотрим как быстро скобачьки с твоей рожи слезут
А ты чего такой обиженный то? Опять дропнули на собеседовании из-за того, что ты не можешь жопку свою продать? Ну не расстраивайся, как через полгодика-год обучения шарпа, устроюсь на заводик, напишу тебе, будешь стажироваться у меня под столом.
Работал на крупном уральском медзаводике, чтобы твое резюме на разраба просто посмотрели нужно иметь профильную вышку и от двух лет опыта работы.
>через полгодика-год обучения шарпа, устроюсь на заводик, напишу тебе, будешь стажироваться у меня под столом
классные у тебя розовые очки
мимо чел
Это не у меня розовые очки. Это у тебя и таких, как ты - серые. Вы думаете, что надо хуеву гору времени потратить, чтобы найти нормальную работу.
На своём опыте убедился, что сами знания в программировании решают процентов на 25 при трудоустройстве. Остальное это наглость, уверенность, чувство юмора и умение найти и решить то, чего ты не знаешь и не понимаешь и самое главное понять, как это работает и запомнить. Всё.
>наглость, уверенность, чувство юмора
блин, такие каждый день приходят
а вот
>сами знания в программировании
не дождёшься
нахер не нужен чел, который "умеет найти"
есть задачи. и решать их надо вот сейчас.
>Вы думаете, что надо хуеву гору времени потратить, чтобы найти нормальную работу.
Для большинства людей так и есть. Каждый знает хотя бы одного человека, который с шутками-прибаутками, не зная совершенно нихуя, спокойно устраивается куда захочет. Проблема в том, что эта стратегия работает только у него, а всем остальным шутки на собесах ничего не дают. Там, где взяли одного шутника - завалили сотню не менее компетентных людей, которые не наглость и уверенность поможет, а только бог.
мимо
Есть ли декомпиляторы которые сразу могут накидать дизайнер формы или какие-то инструменты скрипты которые могут это пофиксить?
Молодец, первый этап с рекрутёршей пройдешь. Завалят на техсобесе и все по новой.
Кстати у нас например если кандидат дохрена либиться таких даже не рассматривают, улыбнуться им в ответ и скажут мол "мы перезвоним", у хорошо программиста всегда ощущается проффДрифт на характере, самые охуенные програмисты нихуя не ладят с людьми, черты программиста отражаются на харатере и это уж точно не "умение шуточки шутить и либиться на все зубы" хочешь шуточки свои ебаные шутить пиздюй в бугалтерию к тете Любе
Какой же ебанутый сатанист пидарас придумал ef дб контексты просто пиздец я ебал (ловлю дб лок при попытке создать контекст в контексте, как его обойти не ебу, т.к. у меня ебанутый код (но автор все равно гомосексуалист)).
Adonis-UI?
Покажи что ты и где пытаешься сделать. Нихуя непонятно.
Да и вообще, что в ЕФ-то может быть сложного? Прописал сеты, прописал как мапить. Все, пользуйся.
public MhiPerIncome()
{
Remainder = 0;
IncomeAmount = 0;
PartsOfMhiAmount = new List<IncomeModel>();
}
Почему последняя строка нормально работает в VS 2015, а в старых версиях выдается ошибку "PartsOfMhiAmount is read-only" ?
Я могу забайндить СелектедАйтем, потом найти его строку или колонку в дататейбле, а потом удалить их. Но это хуйня какая-то, совсем неэффективно, особенно если таблица большая. Если бы я мог сделать байндинг на номер колонки и строки например - все было бы намного проще, но я могу сделать бацндинг только на номер колонки - а на номер строки никак.
Ты тралишь? После таких как ты все говорят, что ЕФ тормозит
Так в конструкторе как раз вроде можно записывать значение в переменную для чтения
Он не занимает меньше места, более того, если ты не всегда используешь статичный класс, то сделав его не статичным ты сэкономишь оперативную память.
>почему не делать статиком все что можно?
А если тебе нужно n экземпляров каждый из которых будет хранить своё состояние?
>Он не занимает меньше места
Он занимает столько же но не повторяется в отличии от не статиков
>А если тебе нужно n экземпляров каждый из которых будет хранить своё состояние?
это случай когда можно не использовать статический класс, ко всех
>Он занимает столько же но не повторяется в отличии от не статиков
Ну вот я тебе и привел пример в котором твой статик будет занимать больше места. Допустим у тебя в программе есть условие и выполняется оно раз в сутки, после выполнения идёт вызов метода класса. Ты этот класс сделал статичным, т. е. он у тебя занимает n места на протяжении работы программы. Кто-то его сделал не статичным и он у него занимает n места только один раз за сутки.
Теперь представь, что таких классов нужно не 1, а несколько тысяч. Если сделать их всех статичными, то тебе может не хватить места для того чтобы программа работала, при этом во втором случае достаточно распределить ресурсы оптимальным образом для того чтобы всё работало. И если даже тебе хватит места для хранения тысячи статичных классов, то все у тебя будут спрашивать, почему твой вариант с статичными классами постоянно жрёт несколько гигов оперативной памяти, а другой вариант без статичных классов потребляет в разы меньше в любой промежуток времени.
Сап програмач. Только что не перезвонили после тестового. Сказали что по функционалу всё ОК, а арохитектура как у уебана.
Где можно щаблон проекта ASP,NET MVC Core красивый найти. Ну и что по архитектуре почитать?
По архитектуре любая книга Роберта Мартина. По шаблонам - гитхаб
Лучший способ попросить ьу них ознакомиться с исходным кодом, потому что все зависити от того как ПРОЕКТИРУЮТ они, у меня часто бывало что прихожу мне говорили архитектура говно, делаю как у нас, начала делать, прошло время, прихожу к другим, то же самое, архитектура говно делай как у нас, у всех свои мерки, свои конвенции, поэтому изучи их код и подстройся к их конвенциям
Даже если бы статик в твоей программе давал буст по памяти/времени (которого обычно в лучшем случае нет, в худшем - от статика идет убыток), то ты бы все равно его не использовал, потому что если это так - то у тебя требования к производительности настолько дикие и код настолько низкоуровневый, что ты должен не статики хуячить, а unmanaged код.
А плох статик потому, что он с солидом не совместим от слова "совсем" и поощряет написание адского быдлокода, который невозможно ни поддерживать, ни расширять. Используй правильные скоупы в IoC-контейнере и не выебывайся.
Два чаю. В каждой конторе считают свой подход к проектированию самым правильным, остальные пишут говнокод
Чистый код подойдет, есть еще принципы и паттерны гибкой разработки там примеры кода прям на шарпе.
А чем плох низкоуровневый код, ведь если обработать логику кеширования и удаление не нужных статиков тогда это будет буст производительности на пордяки по сравнению с солидным кодом
ебани private set и не еби мозг
>А чем плох низкоуровневый код
Ничем. Просто C# - язык высокоуровневый и применяется чаще всего именно для высокоуровневых задач. И если ты пишешь условное приложение для десктопа, оптимизируя каждый бит в памяти - ты хуйней занимаешься вместо разработки своего приложения. Реальность такова, что требуются фичи и багфиксы, а не оптимизация всего подряд.
Конечно, есть задачи, когда оптимизация кровь из носу как нужна, но даже там не пишут все через статики, ибо:
>удаление не нужных статиков
Ты как себе это представляешь? Статики по определению не могут наследовать IDisposable и потому статический инстанс не удаляется ни GC, ни руками. Про кеширование тоже непонятно - статик у тебя висит всю программу, от запуска до выхода. Че ты там кешировать собрался?
Короче, прочитай, что такое статики вообще, и вопросы отпадут. И бога ради, не превращай код в говнину лишними статиками. Если тебя волнуют вопросы оптимизации - всегда есть unmanaged код, который C# поддерживает.
>удаление не нужных статиков
просто удаляешь не нужные данные из класса и оставлфяешь статик пустым, все, он не занимает места, практически.
>требуются фичи и багфиксы
зачем фиксить если можно писать быстрый код без багов?
>не превращай код в говнину лишними статиками
какая разница что код не читабелен и выглядит как спагетии, главное что бы все работало быстро и что бы ты мог в этом ориентироваться, а если надо будет что-то дописивать, ну так пусть заплатят мне денешку а не будут искать какого-то говноджуна или прости господа индуса потмоу что они тупо не смогут понять что там написано
ересь, ты про rest api вообще слышал?
>просто удаляешь не нужные данные из класса и оставлфяешь статик пустым, все, он не занимает места, практически.
Ебнуться можно. Ты вообще представление о том, как в C# работает память, имеешь?
>зачем фиксить если можно писать быстрый код без багов?
Напиши 10к строк статиками, посмотрим, как мало у тебя будет багов.
>какая разница что код не читабелен и выглядит как спагетии
А такая, что если тебе понадобится кому-то код показать или посмотреть его самому спустя год - ты знатно охуеешь.
>главное что бы все работало быстро
Опять же, в лучше случае разницы с человеческим подходом не будет, в худшем (и самом распространенном) случае статики производительность отнимут.
>а не будут искать какого-то говноджуна или прости господа индуса
Ты случайно не помогал писать программу для голосования в Москве? А то звучишь как бюджетник с соответствующей квалификацией.
Заебал, короче. Если тебе реально интересно за производительность - читай Рихтера и MSDN, спойлер: статиков там нет. Если тебе хочется просто набыдлокодить максимально мерзкий код - вперед и с песней, сам же говна поешь за обе щеки из-за этого.
>Ебнуться можно. Ты вообще представление о том, как в C# работает память, имеешь?
ответь за вброс
все что ты написал не валидно и я уже на это отвечал
я мимокрок.
конечно можно обнулить поля в статик классе, только это будет уже говнокод.
даже в какой то книжке по чистому коду рекомендуется для задачи создать граф объектов и потом новый граф для нового случая, а старый позволить скушать GC, а не делать методы типа Init(newState) пытаясь сэкономить на "ну у нас же все уже есть, только немного подменить новыми данными".
Лично у меня такие статитки допустимы только в разном кешировании при кодогенерации, правда обнулять их нет смысла, ведь они кеш
а в чем выражается степень "говнокодства"? если это работает быстрее чем создание новых не статических екземпляров разве это можно считать говнокодом?
В возможном нарушении инвариантности класса, что нежелательное явление.
Конечно может работать без побочных эффектов - мы ведь знаем про "чего где когда вызываем обнуляем". Но и метод на 10к строк может работать идеаьно - однако это говнокод.
Код должен стараться быть стабильным по максимуму не заставляя тебя помнить про возможные побочки
Но десериализовать Newtonsoft Json не хочет по понятным причинам - у него нет сведений о том, куда запихивать элементы этой коллекции, а в абстрактный класс нельзя.
Есть два стула. 1) создать конвертер, который указывает каждому экземпляру его тип
2) использовать не List, a ArrayLIst.
Что выбрать?
что лучше, код который заставляет тебя писать документацию и описивать функционал но который работает быстрее и который требует от клиента что бы с ним работал только ты, или пикрил который работает медленно, который может написать даже дедушка с деменцией но зато все согласовано с современними подходами к программированию?
ну обычно если десериализатор видит IList<>, то он создаст List или что там у него задумано под этот случай
потому лучше конкретные типы в месте десериализации.
Вдруг сменишь жсон либу и будет ай
а конвертер для такого случая геморно писать
>но который работает быстрее
насколько быстрее? На 1% в лучшем случае? Насколько это оправдано?
Так что очевидно второе. Это и быстрее и в разы надежнее. И даже если вдруг нужно будет оптимизировать, то в 99.99999% случаев это будут не статики, которые не дадут ни капли в оптимизацию
для пользователя речь идет не о процентах, а о секундах, потому что там ответ на 1 процент быстрее, там один, там на процент быстрее, и в итоге это выливается в ответ конечному пользователю на милисекунды или даже для требовательных проектов и на секунды быстрее, про такие веди как тепловые и енергетические потери я вообще молчу, и это если предположить что реально на один процент, но в реальности будет от 0 до нескольких процентов быстрее, иногда и на порядок процетнов быстрее
Это тоже конечно очень важный фактор
ты же даже не знаешь как сборка мусора работает, как ты вообще можешь судить о производительности, шиз ебучий
обычно это выливается в конечному пользователю в "ваще не вижу разницы" (потому что статик vs не-статик никогда не было hotpath) и в колоссальную разницу в сопровождении проекта для любителя преждевременных оптимизаций и экономий на спичках.
Я не знаю какие нужно иметь кривые руки, чтобы перевод с инстансов на статики дал выигрыш в секунды. Тут 100% дело будет в другом, нежели в этом.
>пикрил
>браузер
Но ведь на твоём пикриле не браузер, а обычный говнокод который выводит в консоль текстовое представление страницы находящейся по адресу http://data.pr4e.org/page1.htm
Это хорошо отражает суть тех кто пишет на петухоне - они даже не понимают что конкретно делает их код.
пошли маняманевры
>"ваще не вижу разницы"
>какие нужно иметь кривые руки
> Тут 100% дело будет в другом, нежели в этом.
а
>колоссальную разницу в сопровождении проекта
ага, меньшие потери на харвере и большие зарплаты програмистам, вот жуть да?
Я это кинул именно как пример СОЛИД ПИТУХОВ, потому что этот код стандартам "высокоуровневых програмистов" верх совершенства, понаподключал библиотек, сделал инициализации, написал несколько рандомных кодов и бегут на борду мерятся у кого меньше строк получилось при это понятие не имея что там твориться внутри этих библиотек
я понимаю что такое солид, это солид питухи не понимают что такое солид, для них если "многа кода" ТО ЭТО СРАЗУ ГОВНОКОД
>пошли маняманевры
какие еще маняманевры
я задам прямой вопрос
ЗА СЧЕТ ЧЕГО БУДЕТ ВЫИГРЫШ В СТАТИКАХ?
GC можешь даже не упоминать - сразу разобью в хлам. Скорость поиска по таблице методов? - ну такое бывает с виртуальными с методами (небольшая разница).
Проблема поиска методов при дженериках (о которой знают вообще единицы) в данном случае одинакова для статиков и нет
так в чем выгода то? где ты секунду набираешь?
>меньшие потери на харвере
основную нагрузку делает выполняемый код, который что-то делает неоптимально (алгоритм не тот) или не очень эффективно (не продумали кеширование, оптимизацию выполнения и так далее)
и оптимизация пути выполнения дает много
но это не про статики
Ну так на твоём пике с браузером и есть говнокод. А солид как раз не обязательно приводит к уменьшению кода, а чаще наоборот, потому что его предназначение это облегчение поддержки, расширения и использования данного кода, а не сокращения количество написанных строк.
Тем что не надо каждый раз создавать новые екземпляры класса, ждать пока система зарезервирует место в памяти для них, ждать конструкторов и тп, ты заполняешь существуюзий и уже аллоцированый класс данними, и так же быстро их читаешь, разница конечно не секунда, но по ходу работы программы большой проект может обращаться к классам сотни и тысячи раз, и какждый раз будет ждать ответа пока не пойдет дальше, все эти потери будут сумироваться и в итоге выльются в ощутимие милисекунды,
>основную нагрузку делает выполняемый код, который что-то делает неоптимально
и что? нужно сделать алгоритм оптимальный и дальше заниматься архитектурними и системними оптимизациями, использовать низкоуровневый код где это возможно работать непосредственно с устройствами, а не использовать какие-либо универсальние библиотеки с кучей заплаток
>что не надо каждый раз создавать новые екземпляры класса
>ты заполняешь существуюзий и уже аллоцированый класс данними, и так же быстро их читаешь
Тут есть такая тонкость. Статические классы нельзя инстанцировать. Что ты будешь делать если тебе нужно будет 2 экземпляра твоего статического класса с разным внутренним содержимым?
А если у тебя статики только там где "гарантированно не нужно 2 инстанса" то чем такой статик отличается от такого же "создали 1 инстанс и юзаем получая все плюшки ООП и DI до кучи)????
Ну а так то - Если по какой то причине аллокация создает проблемы, то вводим кеширование ака "пул объектов". Но это уже оффтоп, потому что статик класс не может заменить то, где нужно 2+ инстансов единовременно.
>нужно сделать алгоритм оптимальный... где это возможно работать непосредственно с устройствами
так а статики тут причем вообще? Я вот активно использую Span, которые дают выигрыш, а вот статики нет - от них толку нет
>ты заполняешь существуюзий и уже аллоцированый класс данними
DI аллоцирует класс в начале программы и заполняет его данными по мере использования, если че. Прям как статики
мимо
Изначально я просто спросил почему народ не использует статики там где можно, и не пойми меня не правильно я не считаю статик что это решение всех проблем,я просто пишу что по возможности код должен работать быстро настолько это возможно а не быть читабельным настолько что бы тебя мог заменить школьник который учил программирование на ютубчике, из за как мне кажется не верного подхода к программированию производительность кода постоянно уменьшается, и в сраном 2021 году на 16 ядерном проце жду 5-10 секунд пока откроектся ебучая фотография на этой ебучей десятке, я понимаю что расширения фотографий уже не то что было 10 лет назад, и все дела, но бля
Не бомби чел, сначала Гейтс должен проверить нет ли часом на пикче цп, а потом только тебе позволят самому посмотреть
>спросил почему народ не использует статики там где можно,
очевидно потому что статики ограничивают свободу. их нельзя создать 2 экземпляра, нельзя интерфейсы, нельзя нормально очистить просто забыв о них, нельзя замокать в тестах, нельзя заменить на другую реализацию
по факту "все статики" это процедурный подход в противовес которому и был рожден ООП со всеми его плюшками.
> и в сраном 2021 году на 16 ядерном проце жду
не буду спорить. сам в шоке от этого. потому что пишут "(матерится ж низзя) и в продакшен" для простых решений берут мегалибы. Только дело не в статиках же, а в засилье говнокодеров которым важно быстро написать и продать, и "пусть пользователь покупает новый девайс".
>очевидно потому что статики ограничивают свободу
Ответ который я ждал
>потому что пишут "(матерится ж низзя) и в продакшен
сейм
1) Есть один проект который работает на локальной базе .db sqlite+ef. Могу ли я как-то на линуксе захостить саму базу, подключить к ней "клиент" и не ловить при этом database locked?
2) Какой сейчас на торрентах лучший обфускатор?
Троллишь?
Во-первых. Нахуя тебе вложенные классы?
Во-вторых. Че ты там за хуйню наделал, что коструктор может вернуть null, Ты ебанутый?
В-третьих. Нахуя тебе массив как свойство? Вот серьезно.
В-четертых. За строку длиннее 100-120 символов - пиздят.
> почему не делать статиком все что можно?
Потому что такой код трудно расширять и поддерживать. При этом ты не можешь нормально его тестировать. Все вот так вот просто.
Вот давай представим. Тебе нужно сделать туду лист. Тебе изначально так задачу и поставили. Ты, допустим, таки сделал его для консоли. Тебе говорят - ты че, ебанутый, нужно ГУЙ. Ты делаешь гуй. Уже будут проблема со статикой, ну, допустим ты таки уже тут не понял, что затея провальна. Все всем нравится. Но пользователь А - хочет использовать SQLite, пользователь B - хочет чтобы оповещения были на почту, пользователь C - чтобы это все работало в браузере, а D - робко просит добавить возможность кастомизации гуя через CSS. Вот как думаешь, справишься с этими требованиями, если хучил статикой?
Я сам - пользую статику внутри библиотек, типа мне вот все еще кажется, что запилить свой ThrowIfNull - лучше, чем эти ?? ебашить везде. Ну и экстеншин методы без статики не сделаешь, а не всегда есть доступ к исходникам или не хочется делать обертку, ибо многословно выходит. Но все равно, зачастую статика влечет за собой код, который оч сложно поддерживать, он похож на спагетти, когда ты из рандомных мест дергаешь рандомные функции, когда ты не можешь нормально чет поменять, в одном месте не трогая в другом. Короче, статика, не для ютилити(и то в рамках библиотеки), констант и экстеншинов - такое себе.
Ну и самое главное. Нужно понимать, что программисту платят не из-за того что он может решить задачу здесь и сейчас, а за то что он может решить задачу так, чтобы в будующем другие программисты могли это дело расширять, дополнять функционал и поддерживать. Просто нахуячить решение и домохозяйка в состоянии, а сделать код пригодным к переиспользованию, расширению и модификации - уже нужно чуть больше чем освоить базовый синтаксис и быть способным в простейшую логику.
Потому что автосвойства появились позже, а старые версии не поддерживают последние версии шарпов. В 15, как я понимаю, ты уже не сможешь рекорда делать и просие штуки последних версий шарпов.
Зачем тебе джс?
>Нахуя тебе вложенные классы?
А что нельзя?
>Че ты там за хуйню наделал, что коструктор может вернуть null, Ты ебанутый?
Так если нет в базе запрашиваемых данных что мне делать? не возвращать же пустой лист
>Нахуя тебе массив как свойство? Вот серьезно.
Ну а как мне массив биндить?
>За строку длиннее 100-120 символов - пиздят.
У нас так принято писать запросы в базу, нахрена разворачивать одну строчку на овер 100500 строчек если и так понятно что она делает и зачем нужна
я другой анон
1 вложенные классы можно, но какова причина делать их вложенными...сразу и не видать
2 нигде и никогда доселе не видел чтобы кому то в голову пришла идея вернуть null из конструктора.
3 кидать NRE на null - ну да, пусть потом народ гадает че за NRE. и зачем тогда вообще нужна проверка на null
4 у ВАС так принято? ясно. И похер на рекомендации о чистоте кода. Ясно. И похер что читабельность адски страдает - ведь главное что ВАМ удобно
ясно
>Так если нет в базе запрашиваемых данных что мне делать? не возвращать же пустой лист
Это от конвенции зависит. Я предпочитаю возвращать пустой лист, потому что тогда пользователю класса не понадобится делать null-check, и код типа такого будет работать:
foreach (var thing in list) thing?.DoSomething();
И такую хуйню чаще всего и пишут, не проверяя, является ли list - null. В новых версиях Шарпа можно и обозначить эксплицитно, что у тебя метод может возвращать null, что более-менее пофиксит главную проблему с возвращением null, но придется очень много всего переписывать.
мимо
> у ВАС так принято? ясно. И похер на рекомендации о чистоте кода. Ясно. И похер что читабельность адски страдает - ведь главное что ВАМ удобно
Это по твоему нормально когда одна строка, функции и работа которой очевидны, занимает пол экрана скрывая при этом реально НУЖНЫЕ вещи от глаз. Не приятнее ли видеть все что нужно сразу, а не насиловать колесо мышь как не нормальный что бы посмотреть, а что же там внизу после этой очевидной строки происходит
>>1937431
>нигде и никогда доселе не видел чтобы кому то в голову пришла идея вернуть null из конструктора.
>>1937438
>Я предпочитаю возвращать пустой лист, потому что тогда пользователю класса не понадобится делать null-check, и код типа такого будет работать:
проверка на нулл происходит быстрее чем создание нового пустого листа который нужен просто что бы избежать исключения, если есть исключение об этом надо дать знать что бы была возможность его обработать а не создавать заплатки что бы скрыть его от глаз
>вложенные классы можно, но какова причина делать их вложенными...сразу и не видать
Что бы скрыть его от глаз? Этот клас является частью другого класса, не лучше его поместить внутрь что бы соблюдалась иерархия, а не создавать кашу из всех классов?
>функции и работа которой очевидны
очевидны кому? писателю? это значит write-only код?
потому что любой читатель этого кода, который его не писал будет вынужден
а) прокрутить горизонтально
б) запомнить "чо тут нагородили" и держать это в памяти, чтобы не делать потом лишний раз пункт "а"
не говоря уже о том, что короткие строки читаются на порядок быстрее чем длинные.
>если есть исключение об этом надо дать знать что бы была возможность его обработать
ты говоришь с 2мя анонами, поэтому отвечу на свою часть
у тебя там 2 проблемы
1 проверка на нулл и сразу же NRE. зачем вообще проверять на нулл. Среда с радостью выкинет тебе тот же NRE без проверок
2 проверка на нулл + эксепшен нужна людям, чтобы заменить невразумительный NRE на что то более контекстное, которое явно поясняет че где когда - как минимум вменяемое сообщение в исключении, а то и свой тип исключения.
>Что бы скрыть его от глаз?
>не лучше его поместить внутрь что бы соблюдалась иерархия, а не создавать кашу из всех классов?
ну про "скрыть" мимо - они у тебя публичные, а про иерархию....ну тут спорить бесполезно. тут фломастеры, ведь у каждого свой взгляд на "нужно ли обязательно подчеркнуть что вот этот класс находится внутри другого и какой в этом смысл"
>а то и свой тип исключения.
Собственно этот NRE я просто нахардкодил временно, потом я подключу нашу внутреннюю библиотеку исключений и пройдусь поиском везде, где встречается эти и другие типы исключений и заменю на те что в библиотеке
>ну про "скрыть" мимо - они у тебя публичные
Скрыть из списка, у меня конечно же будет доступ к этом классу, он должен быть, но что бы он не мельтешил в списке классов я поместил его туда, а что бы обратиться к нему надо обратиться к составному и потом к нему, так гораздо удобнее
>очевидны кому? писателю?
Это же гребаный линк, очевидно что он просто возвращает параметризованные данные из базы, он в принципе не может делать ничего другого, он не может вдруг сложить числа или вызвать другую функцию, он просто возвращает данные из базы, на всякий случай параметры в нем такие же как в методе, если у тебя метод называется GetAllItemsByCategoryId для тебя уже должно быть очевидно что линк будет возвращать все данные, где сюрприз categoryId == ParamCategoryId
> если у тебя метод называется GetAllItemsByCategoryId
ты щас вообще о чем
посмотри на свой же скрин
Я условно сказал, суть что работа строки с линком очевидна, в методе проверяется состояние колоны в таблице из дб, очевидно что линк подтянет строку с этой колонной из бд что бы прочитать состояние, не будет же он скажем удалять строку из дб в методе где он должен прочитать состояние, для этого будет вызван другой соответствующий метод по типу "RemoveItemByItemId(int itemId)" понимаешь? читать стоку линк это просто не нужно ее работа должна быть очевидной по методу, а если она не очевидна или делает что-то не очевидное то значит метод у тебя говно
>Я условно сказал, суть что работа строки с линком очевидна
долой условности. смотри на реальность - на твой же скрин.
плевать линк там у тебя или что другое
никаких "очевидно" быть не должно.
Код должен быть ясным для чтения, а не "ну наверное там вот так, значит скролить не нужно"
>а если она не очевидна или делает что-то не очевидное то значит метод у тебя говно
ну значит ты в курсе что не так с кодом на твоем же скрине
Если я вижу строчку читая которую вижу там GetAllItemsByCategoryId, я могу допустить что я знаю что она делает. НО Я НЕ ЗНАЮ ЧТО ТАМ ДЕЛАЕТСЯ ДОПОЛНИТЕЛЬНО (и не знаю делается ли вообще) - и буду вынужден прочитать всю строку прокручивая ее горизонтально чтобы увидеть что там не навешано дополнительных условий.
ну и вообще говорить про GetAllItemsByCategoryId и при этом where(d=>d.ID==...&&d.USRID==) ну это как то. Диссонанса не возникает?
>ну и вообще говорить про GetAllItemsByCategoryId и при этом where(d=>d.ID==...&&d.USRID==)
Так там и не GetAllItemsByCategoryId вот было бы ByCategoryId тогда линк был бы с where(d=>d.ID== catiId)
>НО Я НЕ ЗНАЮ ЧТО ТАМ ДЕЛАЕТСЯ ДОПОЛНИТЕЛЬНО
Ты не знаешь что дополнительно может линк сделать? Ну да действительно, а то вдруг он там в конце строки новый поток создает, самому не смешно?
>Ты не знаешь что дополнительно может линк сделать?
нет не знаю. Линк всего лишь декларативное выражение кода, а не "знание вселенной". И чтобы понять, что именно делает линк -нужно его весь прочитать.
После твоего where(d=>d.ID== catiId) может быть (даже несколько) OrderBy и тому подобное, которое в экран не влазит, а люди телепатией не владеют чтобы догадаться об этом.
не говоря уже о том, что на экране читающего даже твой where(d=>d.ID== catiId) может не быть на экране
>Так там и не GetAllItemsByCategoryId вот было бы ByCategoryId тогда линк был бы с where(d=>d.ID== catiId)
именно )))))). еще пояснять что не так, или уже догадался?
Вот так по твоему заебись да? офигенная читаемость, была нормальный код где строка с линком сразу бросалась в глаза и которую можно было игнорировать а теперь вот этот мусор мешается перед глазами, приходиться всматриваться понимать что к чему а потом такой, ааа, так это же просто строка линка, нахера я это читал
ах да, я же не знал, вдруг там toList() по типу объекта который возвращается это не очевидно да?
де
Ну объясни, если ты о том что метод должен был называться :
TryCheckIfDashboardHasSettingsByDashboardId&UserId() то сразу мимо
зачем бросаться в крайность
КТО заставляет переносить КАЖДУЮ строчку на новую?
> вдруг там toList()
то есть ты не читал то что я написал. ясно
>если ты о том что метод должен был называться
А метод где? Где метод то?
ты разглагольствуешь про говорящие названия методов (что конечно правильно), но при этом на скрине у тебя совершенно иной случай. Там нет никакого вызова какого либо репозитория с методом, а прямой запрос в базу (что конечно та еще гадость, но оффтоп в теме про длинные строки)
То есть рассуждения "а если бы у бабушки были яйца"
>TryCheckIfDashboardHasSettingsByDashboardId&UserId()
вот когда будет в коде вызов такого метода и "а как тут быть", то это будет уже другой разговор об именованиях, спецификациях, "репозиторий vs queryobject vs прямойвызов vs ..."
А так ты рассуждаешь о высоких материях, а сам же в коде их не используешь
>А метод где? Где метод то?
Вики : Метод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту.
>прямой запрос в базу (что конечно та еще гадость
А должен быть какой? Опосредованный, о чем ты говоришь вообще?
>КТО заставляет переносить КАЖДУЮ строчку на новую?
так ТЫ же сам говорил что читать вертикально легче чем горизонтально, тогда почему по твоей логике весь код не делать в стиле асемблера?
>А должен быть какой? Опосредованный, о чем ты говоришь вообще?
С говорящим именем. Ты же говоришь, что я по имени метода должен понять, чо он делает даже можно не читать аргументы и дальше вообще читать не нужно. Где они?
Зачем вообще рассуждать про именования методов запроса к бд, если у тебя используются Query и Where?
Возможно ты думаешь про другой участок кода. Уточняю - вот я читател читаю твой метод TryCheckIfDashboardHasSettings
внутри него запрос в виде длинной строки.
Мне приходится скроллить чтобы прочитать его
Ты мне говоришь что "зачем скроллить и так все понятно"
на что я тебе аргументирую, что понятно только писателю ну и телепатам
>так ТЫ же сам говорил что читать вертикально легче чем горизонтально
правильно. даже этот ад что ты сделал читается легче чем горизонтальный его вариант который нужно скроллить (хотя бы только потому, что его не нужно скроллить горизонтально, что пипец как неудобно)
но если не только перенести на новую строку, а и отформатировать с учетом контекста - то читать станет еще легче
например
Data......DataLayer
.Query
.Where
.FirstOrDefault
Если что, у меня широкоформатный монитор, на дефолтном масштабе у меня эта строка влезает полностью и скролить ничего не надо, я просто скрин сделал неаккуратно,
по поводу этого :
>С говорящим именем. Ты же говоришь, что я по имени метода должен понять
Не понял, ты имеешь в виду что бы я в названии метода еще уточнял что в нем идет обращение в базу? А что так кто-то делает? зачем это вообще нужно?
>Если что, у меня широкоформатный монитор
рад за тебя.
так и скажи что код только ты читать будешь, а если кто другой, то ему будет выдан широкоформатный монитор.
у меня счетчик сарказма уже зашкаливает с тобой )
приходится разбивать пост ибо тупорылый фильтр двача доколебался до хз какого слова
>в виду что бы я в названии метода еще уточнял что в нем идет обращение в базу?
нет. строка 33 должна не быть такой длинной и должна быть переформатирована для читабельности. (по скрину конечно не видно ее размер, а считать неохота).
понятно что 80 символов это мало, но лучше не более 100-110-120 символов (где каждое число это рекомендуемая граница, переходить через которую нужно только если надо).
да и даже если влазит в границы, то сделать пару переносов все равно сильно повысит читабельность.
"Арабская вязь" читается сложнее, чем структурированный текст
120 это пипец мало, даже где я выделил на первом пикриле уже 90 а там всего ничего написано, строка линка 220 и вообще если я приму такую конвенцию весь мой код превратиться в некрасивую тяжело Асемблеро-Подобнуючитаемую кашу
ну если для тебя второй пик это читабельно, то продолжать спор нет смысла.
для тебя норм, а мне такое не читать.
Теперь я знаю кто эти странные люди, которые для программирования поворачивают мониторы на 90 градусов
кто? я таких не знаю.
зато я теперь знаю кто странные люди что "раз широкий монитор, то давай использовать всю ширину и плевать на здравый смысл"
Я даже тебе скажу вот что, У меня НЕСКОЛЬКО МОНИТОРОВ! Представляешь? И я держу РАЗНЫЕ файлы на РАЗНЫХ мониторах, вот так да правда? да, я тот еще извращенец, пытаюсь по максимуму использовать полезное пространство, это же совершенно не подвластно Здравому смыслу правда?
причем тут твое рабочее пространство до читабельности кода.
используй по максимуму как хочешь, а обычному человеку тяжело читать тот кошмар со второго пика даже если оно влазит.
А про то что люди используют еще ноутбуки и планшеты в своей работе я промолчу )
и да. кроме длинных строк любишь ты магию
вот что это за заклинание лол
Data.DataLayer.Singleton.GetInstance().DataLayer.
>используй по максимуму как хочешь, а обычному человеку тяжело читать тот кошмар со второго пика даже если оно влазит.
Как я уже говорил, оно делает ровно то что написано в названии метода, ничего больше, там сразу после открытия тела метода идет ретурн, даже при всем желании невозможно не понять что делает эта строка, да и не нужно ее читать, тебе нужно прочитать несколько первых символов хоть на широкоформате хоть на планшете прости господи, и для тебя сразу все становиться понятным
>и да. кроме длинных строк любишь ты магию
вот что это за заклинание лол
Да камон, слишком толсто, ты никогда сингтона не видел?
>оно делает ровно то что написано в названии метода, ничего больше
у тебя каша в голове.
тот, кому нужно только название метода, использует эти методы снаружи - ему вообще не интересно содержимое.
"Благодарным" тебе будет тот, кто будет читать сам код метода. И вот ему плевать на название, он пришел код читать.
скажи ревьюеру что "не нужно читать тело метода, читай только название и принимай как данность что я пишу код без ошибок всегда" и узнаешь о себе много интересного
Но так как у тебя читаешь только ты, то и проблемы нет. Тебе норм )
>ты никогда сингтона не видел?
такого нет конечно.
вот что типа такого я бы еще ожидал
Data.DataLayer.GetInstance()
что было бы более чем достаточно
Так если ты захочешь получить свой кастомный DataLayer, нужно разделять где синглтон, где конструктор а где вообще какой-то кастомный, пример даже в моем пике, там на том втором пике, (где читать тяжело) уже используется inMemodyDAL и я хз какой еще дл захочет другой программист, использовать или создать, не важно, нужно оставить ему возможность юзать любой из вариантов максимально дружелюбно
ну а по поводу того что ошибок не делается, ну желается конечно, но не в ретурне же, протестировал все, написал комментарии, скрыл и забыл вообще
>нужно разделять где синглтон, где конструктор
конструкторы в сигнлтонах приватные. в этом и смысл сигнлтона.
Насчет синглтонов вообще - как я уже писал ранее в споре про inMemodyDAL, лучше переделать на нормальное DI
и вообще
Data.DataLayer.Singleton.GetInstance().DataLayer.
смахивает что есть класс Singleton ака сервислокатор, а этот DataLayer уже не статический, что ура ура. но все же это очень пахнущий код
переформатируй свой мозг на DI и жить станет легче
Если ты о том моем посте где я спрашивал как не делать 100 методов под каждый класс, то я переделал, там используются классы с обджектом, об этом не беспокойся и если это ты тот анон, который советовал не юзать статики и вместо этого заюзать дженерик тогда спасибо, так реально удобнее, хотя наверняка медленнее, я еще буду этот тестить под нагрузкой, посмотрю стоит ли кобыла ставки
> Вот так по твоему заебись да?
Да. Потому что сразу все видно.
Плюс, линку позволяет делать вещи как на прикриплейд и я хочу видеть такую вот хуйню.
Походу абуботы и сюда добрались - посты накручивают.
Следущим скрином он включит отображение скрытых символов и вы тута 100 постов будете сраться "табы против пробелов".
Или перданет, что ЕФ медленный скрины можно уже существующие использовать
Или ебанет скрин, с хардкорной рефлексией и будет дальше рассказывать, что статик классы и выбрасывание нуллреференса это префоманс который мы заслужили
Тралебот, скажи плиз, сколько тебе лет и стаж работы?
>я еще буду этот тестить под нагрузкой, посмотрю стоит ли кобыла ставки
Опа.
Сейчас он принесет скрин, где на дебаге через ДейтТаймы будут миллисекунды считаться, на фоне открыт майнер и посыл: "я потерял в перфомансе, статики - рулят"
Нагрузка - это раз с холодного старта с консоли дернуть.
Стаж у меня нормальный, не переживай, а вот на шарпе я действительно не долго, и я честно сказать хуею от тех "порядков" которые у тут заведены, ладно со студентами все понятно. Они учатся и им нужно понять хотя бы как ооп работает, какие есть архитектуры, паттерны и тп, но использовать все на кучу и подключать овер 1000 библиотек в проекте не думая о том нужно ли это вообще и только принесет вред, зачем? Зачем вы вообще программируете тогда? Что бы было? Или все таки что бы это работало и работало быстро?
Насколько вообще сложно вкатиться в разработку VR/AR через C# (Unity уже изучаю)? И на что конкретно нужно делать упор в изучении здесь?
Собираюсь через год-полтора начать искать места, откуда не гонят ссаными тряпками новичков без опыта. Может, бесплатный оперсорс-проект и т.д. Но на основе чего вообще составлять дорожную карту обучения шарпу? К примеру, за два месяца нужна сделать такой вот простенький пет-проект, через полгода - другой проект. На что делать особый упор в изучении, если интересует не весь бесконечный интерпрайз, а исключительно AR/VR?
Конечно, можете постебаться - но дайте мудрых советов, аноны.
Юнити Слишком медленный для вр, для вр очень важна производительность и время ответа, для пользователя это критично, любая задержка глюк баг и погружение исчезает, а пользователя начинает тошнить, поэтому тут лучше самописный движок а не юнити, да и с# в принципе производительностью не отличается
"Binding" нельзя задать в свойстве "AddPreviewMouseWheelHandler" типа "EventTrigger". "Binding" можно задать только в параметре DependencyProperty объекта DependencyObject.
При этом никак не подсвечивает строчку с ошибкой, но я думаю, что это здесь:
<i:Interaction.Triggers>
<i:EventTrigger Mouse.PreviewMouseWheel="{Binding line_MouseWheel,Mode=OneWay}">
</i:EventTrigger>
</i:Interaction.Triggers>
Нет
Да всё уже, сделал через code-behind. Блядский mvvm, в рот ебал говно хипстерское.
Посоветуйте кстати хорошие книжки по mvvm + wpf
> Как сделать, что бы телеграм бот работал без запущенной отдельно своей программы?
Никак. Ты хоть сам понимаешь всю глупость вопроса? Как он у тебя работать будет, если не запущен, блять? Максимум его можно перенести на удаленный сервер, но на сервере его тоже придётся запускать, представь себе.
Прошу прощения, неправильно поставил вопрос
Арендуешь сервер, можно у амазона воспользоваться акцией вида "бесплатно первый год". Там будет установлен какой-нибудь линукс дистрибутив, например Убунта. Подключаешься к серверу через ssh, при помощи команд копируешь на него своего бота, который предварительно скомпилировал для соответствующей ОС, запускаешь его на сервере. Всё.
Пожалуйста, обращайся если будут еще вопросы.
Хочу сделать подобие транзисторной логики.
Есть t1.C, ссылку на значение которого должна брать t2.A
Как передавать ссылки на переменные между объектами класса, чтобы не приходилось каждый раз апдейтить изменения, получая значения напрямую?
Если у тебя в классе ссылочные типы - просто присваивай t1.C t2.A, все будет работать. Иначе используй свойства с ref.
Пытаюсь парсить гугл, нужно взять ссылки со страницы.
anglesharp
xpath //div[@class='g']/div/div/a/@href
Вроде же должно спарсить то что в href а мне парсит не то. Наверняка я не так запрос составил. Но что не так то? Стаковеерфлоу сказал что все правильно написал хуй знает я корочи.
Пример того что парсится в пике.
И тестер показывает что все заебись, а этот ебучий англшарп не парсит сука
Тогда можешь идти в си
1. Стоит ли задрачиваться с вещами типа алгоритмов и структур данных? В 1С с я подобным вообще никогда не заморачивался, как и с матаном в общем. В типичной работе шарписта оно важно?
2. Хочу в качестве пет-проджекта написать приложуху для автоматизации склада, ну такую небольшую ерп, заодно походу учить язык, платформу, формочки там, возможно какие-то веб-сервисы подключать буду. Норм идея, не?
>я могу юзать структуры с тем же функционалом
Не можешь. Читай отличия классов от структур.
>не объявлять конструкторы
Как DI реализовать будешь?
Ну как, в шарпе структура это тот же класс, только со специфическим поведением. И, как-бы различие, в основном - семантическое(классы должны в себе состояние иметь и инкапсулировать сложную логику, структуры - какие-то данные, являющиеся значением). Как и с теми же рекордами сейчас. При желании - поведение структуры ничем не будет отличаться от поведения класса.
> Как DI реализовать будешь?
ДиАй бывает разных типов, в том числе и через свойства/поля. Да, не так удобно, да не лучший стиль, но ты именно про DI сказал.
Ну xpath мне показался проще.
>В типичной работе шарписта оно важно?
А ты хочешь игры делать, сайты или десктоп?
Если игры - учи
Десктоп - подучи
Сайты - не учи
Вот смотрите. Было у меня приложение, что должно было быть микросервисом, авторизация и аутентификация должна была производиться отдельным сервисом. Но вот порешали люди из продажников, что дюже заебатый сервис выходит и пусть он будет еще и отдельным приложением, но чтобы при этом мог быть составной частью более комплексного решения.
Так вот, как реализовать-то авторизацию-аутентификацию для моего теперь отдельного приложения, чтобы при этом не потерялась возможность этой самой авторизацией-аутентификации, будучи включенным в состав програмного комплекса? Просто ведь поменяется база данных, добавится сущность юзера. Раньше-то как было: была табличка юзера, но никакой логики авторизации-аутентификации не было, просто при добавлении нового в сервисе за это отвечающем, я получал сообщение, добавлял его к себе. заводил в зависимости от этого привелегии и потом можно было пользоваться. Теперь же нужно добавить будет логины, роли это вот все. Не хочется просто разделять на две ветки приложение, одно как самостоятельное, другое как микросервис.
У тебя структура каждый раз будет копироваться в стэк, при этом в случае класса копируется только ссылка. Если у тебя поля структуры занимают больше чем 32/64 бит (в зависимости от разрядности ОС), то выгоднее и быстрее копировать ссылку, чем каждый раз копировать все поля.
>А ты хочешь игры делать, сайты или десктоп?
Хочу делать всякие декстопный софт для бизнеса, те же ЕРП по сути.
> У тебя структура каждый раз будет копироваться в стэк, при этом в случае класса копируется только ссылка
С хуя ли?
Да банально. Что если у тебя стуруктура размером в здоровая? Допустим ты по классике запилил структуру для описания своего файла, ну вот такой ты бака, че поделать, и при создании оч большого файла - размер структуры - пара гигов. По твоему она на стек ляжет? Да даже если без эзотерики, давай просто подумаем, где лежит структура, которая является полем класса.
Ну и банально, тебе только религия может запретить передавать стуруктуры в методы по ссылке.
Вся суть в семантике. Структура задумана семантически, как некое значение, по идее все его состояние - не должно изменяться. С этим и связано дефолтное поведение структуры.
>С хуя ли?
Так структуры хранятся.
struct x {
int y = 10;
int z = 20;
}
var x = new x();
В плане памяти это тоже самое, что написать
var y = 10;
var z = 20;
В случае с классом это будет одна ссылка.
Еще одна ограниченность структур - невозможность хранить ссылки на экземпляры этой же структуры. Т. е. ты не сможешь реализовать бинарное дерево используя структуры.
Её можно запускать через программу написанную на шарпе, передавая нужные аргументы.
Читай документацию и запускай через Process.Start
Вот ты охуеешь, когда почитаешь исходники .net. Но не суть.
А суть вот в чем. Ты говоришь что нельзя - тебе показывают что можно. Ты начинаешь доебывать что unsafe. Будто, блядь unsfe это что-то пиздец какой хак, нахуй. Я же не что-то, типа __refvalue использовал, а обычный, мать его в сраку, unsafe, которого в любом проекте полно, когда дело доходит до оптимизации или работы с какими-нибудь сишными либами. Может быть ты бы и до ref доебался, если бы я показал что можно не копировать значение, передавая в функцию структуру?
В конечном счете. Структура отличается от класса, в основном, семантически. Как и рекорд. Ты так же можешь изменить значение рекорда, если так уже чешется и ничего тебе не будет, шарп не вылезет из компьютера и не отпиздит тебя за это, просто ты ломаешь семантику, заложенную создателями языка, не более.
Ты из безопасного C# сделал небезопасный С++ (даже по синтаксису это чистый С++) и пытаешься говорить, что это нормально и вроде как все разработчики так делают.
>Структура отличается от класса, в основном, семантически
Хорошо, пребывай в своём манямирке, я останусь на стороне здравомыслящих и реальности.
Смотри майкрософтовский идентити сервер и почитай об oAuth.
Ну или азуровский АД. Звучит как изобретение велосипедов кста.
У меня пик2
Скачай тему другую.
//Публичное событие типа PropertyChangedEventHandler( что за тип и что он делает хуй знает)
public event PropertyChangedEventHandler PropertyChanged;
//Защищённый виртуальный метод который ничего не возвращает, принимает строку, может быть вызван без входных данные тогда строка будет нулл.
protected virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
{
// Тут хуй знает магия какаета
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
//Защищённый виртуальный метод использующий обобщённый тип, принимает первым параметрам принимает ссылку на обьект Т(может быть любым типом хоть стрингой хоть хуй знает чем) и вторым значение тоже обобщённое, далее магия, но как мне кажется третий параметр стринга если ее не передать будет по дефолту нулл
protected virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
{
//сравниваем, если первый параметр и второй равны например 2 стринги "str" Equals ск5ажет что строки равны и вернет тру иф сработает и из метода вернет фолс, если же обьекты не равны то первому параметру присвоит второй параметр, а так как первый параметр принимался по ссылки он сменит значения не только в этом методе но и в других частях кода. Далее мы вызываем(?) событие с параметром PropertyName, и опять магия, что если он нулл? Нахуй его вызывать? И возвращаем тру.
if (Equals(field, value)) return false;
field = value;
OnPropertyChanged(PropertyName);
return true;
}
Вот вроде по отдельности понятно а все сразу нихуя не понятно. И события вроде понятно, а вроде не понятны, и дженерики вроде понятны но пугают как только вижу Т, но еще месяц назад при виде <T> начиналась истерика нахой, чо за Т? Нахуй Т? Почему не Ш? Или Ы? Сейчас вроде полегче
В настройках студии можно сделать
Значит чучуть подучи математику чтобы не быть совсем окатышем
У тебя есть ивентхендлер PropertyChanged. Из названия должно быть очевидно, че это за хендлер, но если интересно - почитай MSDN. Если ты вообще смысл ивентхендлеров понимаешь - то этого достаточно.
Далее, у тебя есть обертка над PropertyChanged, называется OnPropertyChanged. Имеет опциональный параметр. PropertyChanged? - это то же самое, что if (PropertyChanged != null). По итогу - если у тебя PropertyChanged не null, то метод триггерит PropertyChanged (за это отвечает Invoke - про него тоже почитай).
Далее у тебя есть метод Set<T>, который ты понял правильно. Но в строке OnPropertyChanged(PropertyName) у тебя уже подразумевается null-check и события, и аргумента (это все сделано в методе OnPropertyChanged). Сам метод вызывается потому, что, по идее, у тебя метод Set<T> меняет Property, поэтому ты хочешь поднять ивент PropertyChanged.
Короче говоря:
1. Ты вызываешь метод Set<T>, который меняет значение свойства ref T field. Так как он меняет значение свойства - он должен поднять PropertyChanged, что он делает через обертку OnPropertyChanged.
2. Обертка OnPropertyChanged проверяет всю хуйню, чтобы ты не поднял пустой ивент или не закинул тупые аргументы (в данном случае аргументы принимаются любые). Если все норм и ты не пытаешься сделать хуйню - OnPropertyChanged триггерит PropertyChanged.
3. Триггерится PropertyChanged и вызывает привязанные к себе методы. Ну или не триггерится, если привязанных к себе методов нет.
4. ???
5. ПРОФИТ!
Ну вроде понятно.
Вот у меня так в MainWindow.xaml строка
Text="{Binding Title,UpdateSourceTrigger=PropertyChanged}"
я так понимаю значение Техт элемента ТекстБокс привязанно к полю Title
а вот UpdateSourceTrigger=PropertyChanged это ? ОбновитьИсточникТригера PropertyChanged но это же просто событие без ничего. На сколько я понял событию нужно просвоить метот без метода там просто null
public event PropertyChangedEventHandler PropertyChanged;
Что бы событие сработало его же нужно вызвать? Как тогда оно меняем мне тайтл когда я пишу что то в текст бокс? И Как оно может менять если код отработал и ждет действий? А действий нихуя нет то. Или при каждом вводе символа вызывается UpdateSourceTrigger=PropertyChanged, но тогда что дальше говорю же нет кода нихуя.
10 строк кода а происходит магия.
Я, если честно, с WPF не работал. Как подсказывает опыт, интуиция и гугл - суть этой хуйни в том, что:
1. Ты вызываешь ивент PropertyChanged через обертку OnPropertyChanged в методах, где твой проперти действительно меняется.
2. У тебя в XAML UpdateSourceTrigger забинжен на этот ивент, что с помощью скрытой от пользователя черной магии фреймворка по сути означает, что у тебя при вызове ивента поднимается какой-то фреймворковый метод.
3. Этот метод выполняет еще больше черной магии, что выливается в то, что твой Title меняется на новое значение в проперти, которое подняло ивент PropertyChanged.
Короче говоря - когда у тебя Set<T> возвращает true, то Title присваивается новое значение field. Только делается это с помощью черной магии и окольных путей ради архитектурных профитов и облегчения использования (но не обязательно понимания) фреймворка.
Если я в чем-то неправ - ты сам поймешь, ну или аноны исправят.
Вообще, если у тебя есть книга или плейлист, по которому ты учишься - я советую не пытаться разобраться в кишках этой черной магии сразу, а сперва просто попривыкнуть к тому, как фреймворк используется и как он реализует разные фичи. Если начинать сразу с деталей имплементации, а не с функции, которую она выполняет, то можно изрядно так охуеть и надолго зависнуть в изучении фреймворка.
да нет никакой магии
Класс, реализующий INPC при изменении значения свойств (или когда хочет уведомить про изменения, которые обновились) должен вызывать событие PropertyChanged с именем(ами) свойств, которые нужно бы перечитать.
UpdateSourceTrigger=PropertyChanged просто определяет когда именно производить обновление контрола, чтобы на каждый символ его не дергать.
Угу, статья на википедии.
Суть, ты все эти алгоритмы и структуры на практике узнаешь, если будешь кодить достаточно и решать проблемы в которых они нужны. Если ты не работаешь - иди на кодфорс/кодворс/литкод и решай задачки там.
А вообще, все эти алгоритмы не то чтобы прям какой-то реальный плюс или как-то в реальной работе тебе помогут, а оптимальные в плане скорости решения не всегда нужны.
Да нет там магии. Суть всего этого дела на прикриплейде. Только вместо вывода в консоль - привязываем к какому-то элементу вьюшки и при изменении - перерисовываем.
Можешь к CookieAuthenticationOptions.Events подвязаться (https://stackoverflow.com/questions/53085591/refresh-identity-authentification-cookie-to-avoid-logout) или даже ClaimsTransformer заюзать. Оба метода сработают, хз, может есть и более каноничный какой.
Кста каждый раз лезть в базу - хуита.
Для собесов достаточно связный список, бинарное дерово, бинарный поиск и быструю сортировку.
Вкатился в айти 2 года назад. Всё это время работал в одной компании, писал бэкенд на шарпе под фреймворк Террасофт, там же немного фронта на JS, MSSQL. Сейчас подаключился во внутренний проект компании на Java, но этот проект по своей сути - тонкий, упрощённый клиент с небольшим количеством бека (не на гибернейте). Не думаю, что это даст мне много опыта.
Из того, что нравилось больше всего в работе: работал с реализацией бизнес-логики в рамках бизнес-процессов.
Писал пет-проекты на .Net framework, Unity3d, сейчас изучаю .Net Core.
Вопрос вот в чём: как лучше всего развиваться? Не уверен, что мне нужно второе высшее образование по информатике - я слышал много негатива об отечественном айти-образовании.
Я сам преподавал по своей первой специальности и понимаю, что высшее образование - это неповоротливая, бюрократизированная система, которая может дать тонну бесполезной информации в довесок к небольшому количеству полезной. Но вдруг, чем чёрт не шутит, я захочу в АИ?
Писать пет-проекты, доводить их до ума? Участвовать в опен-сорсных проектах? Короче, как прокачаться?
>связный список
Хуита медленная, кроме как вставки в середину.
>бинарное дерово
Какая-то хуита для поиска, в чистом виде нахуй не нужна.
>быструю сортировку
пузырек + linq OrderBy
Я прошел?
Мне перезванивали. Другое дело что через полгода, когда, блядь, я уже другое место нашел. Пиздец вот с таких вот горит. Они серьезно думают, что безработный хуй будет их звонка полгода ждать?
Глупенький, это только ты так думаешь что найти работника так просто, вот эйчары и звонят всем чей телефон есть.
Так если им я подхожу - хули полгода было ждать? Выглядело будто: чет ты хуй. Ой. смотрите, он почти полгода у других проработал и его не гонят, наверное не хуй, давайте его к нам позовем. При этом те же условия предлагают, как и на текущем месет. Вот и нахуя мне-то менять в таком случае работу было? Короче, шляпа какая-то.
В общем, разбил это дело на 3 куска: Собственно сама задача, презентер - то что должна получать вьюшка и вьюшка.
Так вот. Что меня смущает: 1. То что приходится добавить статичный объект для лока, без него курсор при изменении одновременно статуса нескольких задач - скачет. Мне это не нравится. 2. То что когда последняя задача завершается - курсор остается там где была эта задача, я понимаю, что я бы мог вручную его переставлять на какую-то дефолтную позицию, но это как-то странно.
В общем, в какую сущность лучше всего вынести работу с этим вот курсором и как избавиться от лока? Ну, допустим от лока я избавлюсь тем, что буду эти обновления кидать в очердь, там "Рисователь" будет ждать пока в очереди что-то появится и рисовать. Так от лока мы избавились. А где правильно было бы в таком случае хранить положение курсора? Или может быть как-то иначе это все нужно делать? Поясните короче.
Ну и нахуй ты так шуткуешь? У меня БЕСПОКОЙСТВО теперь
>.Net Core
Зис, копай туда, подучи ASP, EF, умей писать сложные запросы.
>JS
Скрипт это хорошо. FullStack сейчас очень много зарабатывают. Подучи еще какой-нить хайповый js фреймворк.
>Не уверен, что мне нужно второе высшее образование по информатике
И не надо, формальная корка закрывает 99% всех проблем.
>Писать пет-проекты, доводить их до ума? Участвовать в опен-сорсных проектах?
DO IT. Делай что больше нравится.
>>1939525
Привет братишка. 4 года был 1с разрабом
1) Да, и ты описал лишь 5% того говна что надо знать. И это важно.
>с матаном в общем
Базовые вещи конечно надо, что-то на уровне 11классника. Например, могут попросить посчитать ресурснозатратность какого-нибудь алгоритма.
2) Такие проекты лучше презентовать как FullStack, т.е в связке с JS
>формочки там
винформы не учи, вообще, это тупик.
Как перекат из 1с могу предложить следующее. Начни учить ASP core, создай простенький Web-сервис, а 1с используй как фронт. Побольше используй ООП. Переучись на сырые sql запросы это будет твоим преимуществом.
Я только синтаксис C# учить начал. Если всё так как пишет Троелсен (.NET Framework и у .NET Core одна основа), то не лучше ли пока не запариваться над этим? Классы и методы в библиотеке почти одни и те же?
Да я так предложил ведь сам посуди, ти только начала учить, а уже какие-то расхождения появились, синтаксис то один будет конечно это верно, но сам подумай, раз синтаксис один тогда какая разнице фреймворк или коре? Почему тогда сразу на коре не работать раз все такое одинаковое?
Ну да, в том, что ты написал есть смысл
Кор тоже легаси, уже .net 5 вышел
>учить сразу кор
На мне так ночальник эксперимент ставил. Поддерживаем легаси, я и еще двое подпивасов на .net framework, четвертый вообще на делфи
Подходит и говорит, вот тебе задача хуйня срок три дня - и попробуй на .net core написать, нам модернизироваться надо
net core, net framework, net core, EF3, EF5, EF6, ASPnet, ASPnet core, mvc хуиси отсоси.
Я по началу думал ну ясно понятно хули разные версии. И думал мол выходит новая версия и все на ней всё делают, но хуй там плавал. И вот вопрос почему? Обратная совместимость же есть, а изменения не такие уж прям пиздецки большие что бы команда не смогла изучить все нововведения.
И вот меня очень радует то что сейчас есть net5 и вся остальная залупа прекращает поддерживаться.
> Мне как вкатывальщиу пиздецки как сложно во всей этой хуйне разобраться.
А вкатывальщику и не нужно. Тебе нужно язык освоить и на любой из залуп что-то сложнее ту-ду листа сделать, и понять базовые принципы построения архитектуры.
В реальной разработке не будет такого: Ой, новая технология, мы на нее сразу перешли; ой мы не будем это делать потому что нет спецов что знают хорошо фреймворк. Я вот, блядь, сярпоняша, когда пришел на дужна: да-а-а-а, смотри, у нас есть на джаве хреновина, вон багтреккер - пофиксь баги, разраб ее уволился, а мы сярпобояре сейчас заняты в другом проекте. Блядь, джава, сука. И пофиксил и ничего. А потом мне сказали: ну, вот ты пофиксил, молодец, теперь еще и знаешь как оно работает - перепиши на шарпах. И, сука, переписал, за неделю, 40к строк кода, и ничего. А потом мне говорят: чет ты какой-то слишком толковый, будешь мидлом считаться, зп поднимаем, и давай-ка ты на плюсах покодишь, а то чел что на плюсах кодит и так 4 проекта ведет одновременно, слишком сложно ему. И писал на плюсах. Благо сейчас таки более-менее проекты на шарпах только. Суть. Нужно понимание и умение разобраться с тем с чем ты не работал. Эт ты думаешь, что: "Ты ж программист" это мем такой, который только бабки всерьез используют, на деле про "Ты ж программист" тебе на работе будут толкать даже чаще, а крайним всегда будешь ты: ты не догадался, что вот тут, даже если не по проптоколу - нужно не кидать ошибку, а просто игнорировать, а вот там - таки кидать; ты не догадался, что пользователь - дегенерат, что не читает мануал; в ТЗ было требование такой нагрузки, в проде она в 100 раз больше оказалась и у тебя обработка запроса стала дольше 1 секунды - ты виноват и рукожоп, блядь, а не маркетологи, которые рассчитали хуево, не техдир, который исходя из ТЗ решил что не нужно усложнять систему, не тестировщики, которые не стали проводить нагрузочного тестирования нормально, нет - ты виноват в этом, что своим программистким чутьем не понял что так и будет - а потом - пиздуй чинить. Вот потому - не конкретные технологии важны, а база, умение думать наперед и закладывать даже в консольной утилитке по переводу температуры из цельсия в кельвины - возможность превратить ее в систему распознавания лиц, ибо придут, блядь, скажут - как охуенно оно в кельвины переводит-то, давай, чутка допилим...
> Мне как вкатывальщиу пиздецки как сложно во всей этой хуйне разобраться.
А вкатывальщику и не нужно. Тебе нужно язык освоить и на любой из залуп что-то сложнее ту-ду листа сделать, и понять базовые принципы построения архитектуры.
В реальной разработке не будет такого: Ой, новая технология, мы на нее сразу перешли; ой мы не будем это делать потому что нет спецов что знают хорошо фреймворк. Я вот, блядь, сярпоняша, когда пришел на дужна: да-а-а-а, смотри, у нас есть на джаве хреновина, вон багтреккер - пофиксь баги, разраб ее уволился, а мы сярпобояре сейчас заняты в другом проекте. Блядь, джава, сука. И пофиксил и ничего. А потом мне сказали: ну, вот ты пофиксил, молодец, теперь еще и знаешь как оно работает - перепиши на шарпах. И, сука, переписал, за неделю, 40к строк кода, и ничего. А потом мне говорят: чет ты какой-то слишком толковый, будешь мидлом считаться, зп поднимаем, и давай-ка ты на плюсах покодишь, а то чел что на плюсах кодит и так 4 проекта ведет одновременно, слишком сложно ему. И писал на плюсах. Благо сейчас таки более-менее проекты на шарпах только. Суть. Нужно понимание и умение разобраться с тем с чем ты не работал. Эт ты думаешь, что: "Ты ж программист" это мем такой, который только бабки всерьез используют, на деле про "Ты ж программист" тебе на работе будут толкать даже чаще, а крайним всегда будешь ты: ты не догадался, что вот тут, даже если не по проптоколу - нужно не кидать ошибку, а просто игнорировать, а вот там - таки кидать; ты не догадался, что пользователь - дегенерат, что не читает мануал; в ТЗ было требование такой нагрузки, в проде она в 100 раз больше оказалась и у тебя обработка запроса стала дольше 1 секунды - ты виноват и рукожоп, блядь, а не маркетологи, которые рассчитали хуево, не техдир, который исходя из ТЗ решил что не нужно усложнять систему, не тестировщики, которые не стали проводить нагрузочного тестирования нормально, нет - ты виноват в этом, что своим программистким чутьем не понял что так и будет - а потом - пиздуй чинить. Вот потому - не конкретные технологии важны, а база, умение думать наперед и закладывать даже в консольной утилитке по переводу температуры из цельсия в кельвины - возможность превратить ее в систему распознавания лиц, ибо придут, блядь, скажут - как охуенно оно в кельвины переводит-то, давай, чутка допилим...
>Тебе нужно язык освоить и на любой из залуп что-то сложнее ту-ду листа сделать, и понять базовые принципы построения архитектуры.
В этом то и проблема, я не могу нормально изучать одну тему. Синтаксис вроде уже изучил нормально. Перед сном читаю рандомные статьи на метаните и уже не возникает проблем что бы что то забыл или не понимал. А вот что то сделать не могу. Начинал асп нет еще учить, как то сложно пиздецки, сделал перерыв и сейчас впф изучаю, тож не очень то и легко.
Идеи есть а вот знаний для реализации пока нет(
1) Есть одно шифрование. Как мне лучше всего хранить в приложении (exe) стрингу private key/secret и прочее? Обфускаторы сейчас умеют ее в жопу прятать чтобы ее нельзя было получить или это чисто технически невозможно? WPF если что.
2) Есть ли на wpf либа чтобы было увеличение image'a при наведении мыши, как на всяких интернет магазинах когда есть товар и при наведении на его изображение возле курсора есть такой квадратик с увеличенной зоной изображения.
Спасибо.
Напиши что-то в консольке со всякими паттернами и новыми фичами языка. Потом наверни entity framework и linq, заодно вникни в Expression. Добавь ASP.NET (MVC, если ангуляров не знаешь, WebAPI - если знаешь) и ты молодец.
А ты точно программист?
Напиши сервис сбора статистики с ТГ каналов.
Я хотел что то подобное сделать но чет я пока даже хз с чего начать.Вернее начать я знаю с чего но знаний не хватает пока
Суть приложухи.
НетКоре 3.1 ор нет 5
Приложение использует TDLib.
Вписываем канал но который подписываем наше приложение, приложение начинает следить за постами которые будут появляться, старые опустим. Появляется пост, его заносим в БД и ставим на проверку. Например проверять каждый час в течении недели и записывать данные, количество просмотров, или изменение текста поста.
Периодичность проверок и время проверок можно настроить.
Давай только сразу гитхаб выкладывай, я буду смотреть че как делать.
>Напиши сервис сбора статистики с ТГ каналов
Скучная хуйня, где всей сложности это в апи телеги разобраться.
ну тогда иди нахуй сам думаю креативный ты наш.
На заводике в моей мухосрани открыта вакансия постоянно - Разработчик (MS SQL, C#).
Платят от 60к точно. Для меня это сногсшибательно, т.к. в дс ездить 2 часа и я не планирую тратить столько времени и сил, поэтому решил работать тут.
Так вот, сколько по времени надо будет +- изучить .net/c# и бд для того, чтобы вкатиться на заводик. Заводик хороший, много знакомых там работает.
Пикрил - требования для работника.
Самому мне 24.5 года, знаю базу всех языков (ооп когда-то что-то крутил на плюсах и джаве, но сейчас не помню от слова совсем, паттерны только в теории читал, считай не знаю). Хорошо знаю вёрстку и sql на 3/10.
Я сам по себе не тупой, поэтому проблем с освоением не будет.
Нужно мнение ваше, сколько времени займёт изучение того, что требуется на пикриле? (кроме плюсов)
Месяца 3-4
Bouncy castle
Судя по моему заводу - берут туды всех, даже знания не нужны. Другое дело, что на заводе на самом деле нет нормального разграничения: бек, фронт, блядь, язык.
Скажут - придется тебе ангулар за неделю осваивать, потом - сишечку чтобы драйвера писать, ведь тот кто писал драйвера - ушел в запой; потом скажут: короче, мы слышали что докер это крута, давайте докер в наш унитаз умный впихнем, охуенно же и ты будешь форкать докер и пытаться засунуть его в унитаз.
Линк сложно учить, если ты нуб и только вкатываешься. Линк хорош, когда ты 10 лет кодил ХП в СУБД.
Посоветуйте какую-нибудь простую, но нетривиальную задачу прям вот полному ньюфагу, чтоб нескучно заниматься было. Ну и не тупо по урокам повторять, а самому что-то реализовывать.
Ну и заодно, такой вопрос, комфортно ли кодить на шарпе в линуксе? Пока сижу на дриснятке, но поставил из любопытства Мяту второй системой, и прям радует. Дрисня заебала, постоянно тарахтит жёстким диском.
1. Если ты только вкатываешься в кодинг, то тебе надо научиться выполнять самые простые задачки, что-то такое точно есть в твоих видосиках и книгах.
2. Шарп это в первую очередь кодинг под венду, так что сам подумай.
Зайди на codewars, я там задачки решаю, но если ты совсем ньюфаг, то лучше месяц подучи, а потом уже задачи решай. Сам месяц назад начал изучение C# по видеоурокам SimpleCode на ютубе, мужик внятно все объясняет и видео уроки короткие (10-20 минут), что радует.
Чтоб нескучно было поставь Унити и делай Игорей
Да, его и смотрю. Понятно объясняет.
Последую твоему совету.
>>1944630
Видел, что можно на лине им пользоваться. Значит, возможность есть. Логично же. Вопрос, комфортно ли.
Ну или посоветуй, в чем кодить на Линуксе и под Линукс. Чтоб и востребованное было, и ньюфага не пугало.
>>1944659
Вот-вот. Пока все нравится, интересно. Когда-то давно щупал Basic в технаре, писал скрипты для модов на Моррошинд, а в целом опыта в программировании нет совсем. Но чёт на 36-м году жизни захотелось чего-то нового. Может и серьёзно вкатиться. Не резать же памятники до конца своих дней.
>Не резать же памятники до конца своих дней.
Айти может заебать точно так же. Говорю как человек пару лет как вкатившийся. Такое же говно, как и везде, ну платят хорошо, да.
Шо там учить-то? Линку - декларативный же. Тебе и нужно-то только понимают, что значит каждое из слов, представлять как делается флюент интерфейс, ну и знать про лямбды и что в функцию можно передать в качестве аргумента в другую функцию.
Да блин, попробуй сам написать во флюент-стиле класс для фильтрации чего-нибудь без линку и iqueryable. Если не знаешь как - посмотри как делаются всякие спецификации, которые можно друг с другом объединять.
Дабл, ты дело говоришь.
Но я не о том немного. Резать памятники охуенно, и меня не заебало. Но это очень пыльная и вредная работа. Их приходится носить, а они тяжёлые, а спина не вечная. Так что просто готовлю задел на будущее.
Могу, конечно, перекатиться на написание портретов на том же граните.
А с другой стороны, новые навыки - новые нейронные связи. В любом случае хорошо.
>>1944676
Джаву можно тоже потыкать, да. Попробую.
Но уже начал шарп учить, всё нравится.
Ладно, буду пробовать, хули мозги ебать.
>сам написать во флюент-стиле класс для фильтрации чего-нибудь без линку и iqueryable. Если не знаешь как - посмотри как делаются всякие спецификации, которые можно друг с другом объединять.
Через екстеншены?
Нахуя вообще субд знать для линкью? Линкью это просто функции над коллекциями, и субд это только одна из немногих вещей, для котоорых можно юзать linq.
Если ты не дебил или хоть немного знаешь фп, то с линкью не должно быть никаких проблем.
Все фреймворки и всё такое установлено
хочет чтобы ты не использовал в design-time конструкторы с параметрами. и если уж используешь, то не создавай инстансы
У меня в той же самой 19 студии тот же самый проект запускается и прекрасно работает, а такая хуйня на другом компе происходит
Мне не до конца понятно, как именно у тебя хранятся данные. Если я правильно понял твою реализацию, то да, простейшим вариантом будет считать из файла, десериализовать, удалить лишнее, сериализовать и перезаписать файл. У тебя наверняка методы чтения и записи уже реализованы. Если тебя производительность беспокоит (а она не очень будет на больших файлах) - используй базу данных.
Поле-коллекция,или поле- класс, реализующий интерфейс коллекции? Фактически там одно и то же. Но все таки как правильно?
А почему у тебя все public ?
Правильнее будет сделать публичное свойство для получения экземпляра Worker { get; }, а внутри сделать приватную реализацию как удобнее Dictionary<int,Worker> например или лист или кастомное че
Если надо всю коллекцию получить, метод Workers[] GetAllWorkers()
Так ты избавляешь от проблем, если вдруг нужно будет поменять тип коллекции, а массив поддерживается по умолчанию.
Эксель это суперхуевый формат для таких задач, почитай уже про xml или json.
При запуске приложения у тебя с файла считывается инфа и запихивается в массив. Далее ты удаляешь нужный элемент массива, или другие действия. И потом записываешь обратно в файл. Насколько я помню, есть метод, который перезаписывает файл, т.е. чистит файл и записывает туда новые данные. И про этот метод было сказано в модуле, слушай внимательнее.
Мимо такой же вкатыш по спизженным курсам скиллбокса
У меня вопрос! Смотрел в инете, но решения не все понравились.
Задача - получить доступ к некоторым элементам формы номер один из формы номер два.
Нашёл в инете интересное предложение создать список форм в отдельном классе, создал, изменить видимость или работоспособность не проблема, всё прекрасно. Но вот управлять элементами не получается. Я попробовал поменять параметр modifer с private на public, но видимость не поменялась.
Как обращаюсь к одной из форм - SomeList[0], где ноль это номер формы, ну а далее через точку.
Чего хотел бы - чтобы в этом списке появился нужный мне элемент, дабы его свойства поменять.
Ну или как правильно подобное делать.
нипонел. Ну юзай ICollection тогда
Какого хуя, они что такие разные блять? Почему нельзя просто сделать метод, мол, date.ToJson() и обратно, что за хуйню я вижу на стак оверфлов с их ебанутыми парсерами по типу пикрилов,
ЛЮДИ КАКАЯ НАХУЙ КОЛОНИЗАЦИЯ МАРСА, у вас блядском фронте и беке одной страницы несовместимые форматы дат, ЛЮДИ ВЫ ОБОСРАЛИСЬ! ПРОСНИТЕСЬ! ебать и они еще с тупых пиндосов ржут из-за их имперской системы мер не замечая при этом все вы живете в полном говне хаотических стандартов. Я все сказал! Бесите! Кцс тьфу!
марсоход не видит разницу между не-десятичной системой мер и просто разным форматированием одного значения?
небось у тебя 21-00 и 9 после полудня разное время
О, дебич проснулся который не знает что в джс дата начинается с 1970 и измеряется в милисекундах а в с# дата начинается с нулевого года и изменяется в тиках, с пробуждением гений ты мамин
> джс дата начинается с 1970
да хоть от большого взрыва
чем 19 февраля ( то есть сегодня) в жс отличается от 19 февраля в шарпе? указывают на разный день?
В том что ты не можешь сделать простой serialize из одной даты в другую гений потому что одна жата это милисекунды а другая тики, в жс в принципе нет такой херни как тики что бы можно было нормально преобразовать и приходиться извращаться как дебичи с пикрилов выше вместо нормального квантовго преобразования как у жидомасонов
причем тут миллисекунды? причем тут тики? что ты несешь?
ты жалуешься на разный формат даты
для таких как ты придумали ISO 8601 как стандарт
или согласшение unix time (timestamp) от 1970 года
используй один формат на обоих сторонах и проблем не будет.
у тебя на пике 1 вообще хуета какая то
парсишь строку вида Date(числа)
ты бы еще вместо такого формата лучше бы фото солнечных часов сериализовал и на шарпе распонавал через нейросети
сам себе находишь проблем на ровном месте пока люди на марс летят
Ты имеешь виду просто форматировать строку в подходящий для исо формат? Как здесь? и скормить дату как стринг в виде "yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz" а потом в таком же формате прочитать типу date("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
данные это одно, а их форматированный вывод это другое
данные всегда везде одинаковы, а формат зависит от региональных настроек
Если дата ходит между сервером и клиентом, то она обязана быть стандартизированным значением.
Это вообще универсальный совет - храни дату в стандартизированном виде (и желательно UTC), а форматируй уже при выводе пользователю.
тогда избежишь проблем парсинга - стандарт ведь.
конечно жс херово работает с датами из коробки. просто люто херово. Но даже там есть тонна либ, которые делают работу вменяемой
> получить доступ к некоторым элементам формы
> Ну или как правильно подобное делать.
Через биндинги)))))))))))))))))))))))))))))))))))))))).
как можно называть классным язык где IList не наследует IReadOnlyList
Вот же я тупой, стоило сходить в туалет, и понял как это сделать.
Учебных проектов из трех книг по шарпу хватит для переката в Европу?
Нет я не ебанулся, просто времени на пет-проджекты не было, а так 4 года в продакте
Котанчики помогите ЛАМЕРУ
Короче есть прошивка на плеер, она типа дохуя меняет звук - а каким образом мне решительно непонятно - автор таюшничает, не палит контору, а хочется понимать механику работы и че там изменяется
http://file.sampo.ru/r2rwkj/
Тут 3 DLL файла по 100 кб в каждом из архивов, 1 стоковый другой от его прошивки - скажите че там ваще внутри происходит плез
С поддержкой проядка действий и операций помимо сложить-вычесть-умножить-разделить - вполне. Эт как-бы как минимум нужно знать терорию автоматов, уметь простенькие стейтмашины делать и пользоваться структурами данных типа стека. Меня вот на джуна взяли просто за то что я знал что делает out, лол.
320x240, 0:43
Подробней:
Есть класс Person, есть класс Worker. Класс Worker наследуется от Person. В классе Person есть virtual метод, который я перезаписываю внутри Worker. При приведении экземпляра класса Worker к типу класса Person, метод остается измененным. Есть решение?
Я даже не могу представить ситуацию, когда это нужно. Но если так уж хочешь - рефлексией дергай метод родительского класса.
Да, вместо virtual / override используй модификатор new для метода в классе Worker.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords
есть cs-файл. И есть lf в EOL. Есть github. И есть загрузка файла в репо, через веб-интерфейс. Есть git. И есть git clone repoURL. Есть папка, и какого-то хуя CRLF в EOL. FUUUUUUUUUUUUUUUUUUU!
Напишите кто-нить в поддержку github'а, пускай добавят EOL в blame, при просмотре файлов.
он и будет работать. при выполнении то проблем с инстанцированем вьюмоделей нет
и может быть нормально за счет ранее собранного
сделай clean solution и все будет как и на другом компе
>>1948093
Это ахуенная штука, я смотрел обзор. Сразу после разорПейдж буду его изучать.
ЖС рудимент веб 1.0 он должен умереть как умерла асикью, майл агент и жабер.
На уровне макаки - 5 недель.
На уровне, чтобы уже завтра не было стыдно, какую хуйню ты написал - 5 лет.
> Нашёл в инете интересное предложение создать список форм в отдельном классе, создал
Как стартует твоё приложение?
Откуда оно начинается вообще?
Что происходит, когда ты запускаешь my_huita.exe ?
Мой ответ:
> у меня есть класс со статик-методом Main() который автоматически вызывается при запуске приложения. В этом методе инициализируется графический фреймворк, создаётся графическая форма и выводится на экран, после чего создаётся бесконечный цикл, именуемый главным циклом, в течение которого выведенное окно висит на экране и принимает сигналы и обрабатывает коллбэки.
Мой следующий вопрос: Когда ты запустил приложение и создал форму, куда делась переменная, которой был присвоен инстанс окна, которое ты создал?
Вот когда ты ответишь на этот вопрос, ты автоматически поймёшь, как создать и хранить несколько окон и управлять ими, включая докинг, скрытие, сортировка и т.п.
я поймал себя на мысли, что мне здорово работу облегчит если запилю программу, которая будет тягать данные с удаленного сервера через апи, у них только через ssl+oauth, а я в душе не ебу как там с этими интернетами работать надо.
я бы и нормального прогера нанял, но прибыль с приблуды его зп не окупит
Че там читать? У http есть несколько типов запросов - get-post-put-delete и т.д. в соответствии со спецификацией - одни могут тело содержать, другие нет. Сервер должен уметь их обрабатывать. Собственно, все что знать нужно. Нажми f12 и во вкладке network посмотришь как эти запросы сами выглядят.
а как это же самое через SSL и OAuth провернуть?
Данные нихрена не одни, я уже писал что данные измеряются в разных величинах, а еще например в джс месяц начинается с нуля, а в с# с единицы ну это так, один из примеров ебанутость джса, из-за этого все парсеры такие ебанутые с додаиванием и отниманием чисел, а то что ты написал тоже хуйня, потому что если траблы с часовыми поясами в с# utc now и now не равны, а в джс равны, ты понимаешь насколько это большая проблема? и вообще вся эта херня с "ну просто передать дату стрингом" какой же это убогий костыль в стиле ебучих джейесов где
if( "1 + 1"){console.log(2);}
Почему? Зачем?
>Мне вот кажется, что это бессмысленное усложнение, лишние абстракции и вообще не так уж удобно.
Охуел? А за что ты деньги будешь получать? 2 строчки напишешь и всё? А ну-ка создавай ещё один проект, там создавай сущности, дто для них, дто для дто, дто для дтодто, потом отдельно сущности валидаторов, валидаторы для валидаторов, ещё привяжи как минимум 10 библиотек из нугета, отдельно классы для каждого пука и всю эту ебанину покрыть юнит-тестами. Зачем? А чтоб ты заебался!
Сходи на стажировку, посмотри что там да как, может тебе понравится и останешься там. Ну а не понравится - уйдёшь оттуда.
Чем меньше размерностей массива, тем меньше проверок выхода за его границы. В идеале для оптимизации надо использовать unsafe указатель.
причем тут работа жс с датой
жс конечно ебанутый, но ты смешиваешь "работу с датой" и "передачу даты между языками", чтобы метка времени что послал жс и была распарсена шарпом(и наоборот)
указывала на один момент времени
Если использовать стандарты типа ISO 8601 (date.ToString("o");),
то "22 февраля 21года с таким то временем и часовым поясом" распарится в жс именно в 22 февраля (и похер как считаются месяцы)
Далее работай с датой как хочешь, а потом преобразуй в ISO чтобы шарп правильно понял отметку времени.
Стандарты для этого и придуманы
точно так же можно работать и с миллисекундами, но там лучше использовать соглашение приводить время к UTC
а что если у меня нет возможности парсить так как просит джс, что если у меня например выполняется sql процедура на странице? и такой хуйни как toString("0') в sql тупо нет, и вообще это же значит что мне КАЖДЫЙ РАЗ надо будет парсить с текущей культуры в ISO 8601 потом в ту что хавает шарп и наоборот, господи какое же это убожество, ненавижу блять джс
Лично по моему опыту так делается потому, что в фреймворке оч много есть штук для обычных массивов, а вот для двумерных, трехмерных - нихуя нет. Ты не сможешь пользоваться линку, не будет удобного способа скопировать и вообще. Короче, фреймворк во многих местах заточен под работу с одномерными массивами, банальный линку ты не сможешь применить нормально.
А насчет проверок выхода за границы. Там зачастую тебе это оптимизирует компилятор. Ну и вообще, такой уровень оптимизации начинается когда уже совсем уперлись в перформанс, в 99% случаев в шарпе у тебя скорость работы будет больше страдать из-за того что ты вводом-выводом занимаешься.
чего чего у тебя нет?
у тебя жс прямо с базой sql работает что ли?
тогда причем тут шарп
А если же жс общается с приложение на шарпе, то значит шарп у тебя есть.
Впрочем опять же если тебе шарп только мешает ибо ты "хочу чтобы вот тот формат даты что я в жс использую вот я так в базе данных храню", так это у тебя еще одна проблема.
и ISO 8601 парсить особо не нужно. биндинг того же асп.нет коре его сам сбиндит
>Ты не сможешь пользоваться линку,
ну народ пытается исправить этот недочет как может
https://github.com/evilguest/linq2d
Ты что не слышал про выполняемые процедуры на клиентской стороне?
ах эти asp контролы
я промотал все это сразу до выхода асп.нет коре, где всего этого нет
И вообще считаю, что эти контролы больше палки в колеса ставят
Про запросы SQL в виде кода вообще брррррр гадость.
так что это у тебя конкретно в асп старом проблема, что вот у тебя контрол и такая жопа с датами, а не в общем проблема жс и шарпа в непонимании друг друга
Статистика серверного языка сайтов ни как ни коррелируется с вакансиями
Первый пик то хуета, вот этот правильный.
>так что это у тебя конкретно в асп старом проблема
Клиентский контрол который использует жс что бы прочитать дату с сервера, но джс обосрался
> а не в общем проблема жс и шарпа в непонимании друг друга
>НЕ ПРОБЛЕМА В ЖС ПОТОМУ ЧТО Я ТАК СКОЗОЛ
как же ты маняврируешь,
и что плохого в тому что бы сразу обращаться в базу вместо этих ваших менеджеров хуенеджеров, виртуальных классов посредников\прокладок и тп? ты в курсе насколько такой подход более производительный? даже учитывая что старый асп в целом медленее но такой подход все равно на порядок быстрее и менее трудозатратный
и кстати не работает твой сраный ИСО, ОН ТОЖЕ ОБОСРАЛСЯ
>и кстати не работает твой сраный ИСО, ОН ТОЖЕ ОБОСРАЛСЯ
я выплыл на лодке в поле. гребу гребу, нихрена не гребет. херня эти ваши лодки )))
>контрол который использует жс
>но джс обосрался
никаких проблем между послать дату шарпа и получить ее на жс не наблюдаю.
наблюдаю проблему с конкретной реализацией некоего контрола.
я с ним не работал и не писал его. Но я сильно подозреваю, что он не накладывает никаких требований на "что храним в базе данных" и как результат получаем хрень.
А в базе не нужно хранить абы что, а нужно хранить метку времени в UTC (можно и timestamp) либо ISO
И конечно же контрол этот момент не учитывает, ведь его задача делать запросы в базу и выводить и такой момент с разным форматом или упущен (как оно обычно бывает) или же где то это учтено (мож конвертеры какие), но про них не знаешь.
>и что плохого в тому что бы сразу обращаться в базу
Ответ на этот вопрос понимаешь, когда нужно изменить название поля или структуру данных и начинаешь ползать по всему проекту, по которому все эти запросы размазаны
>ты в курсе насколько такой подход более производительный?
да ни насколько. единственная радость - удобство создания контролов, где не пилишь сам хтмл + жс, а типа контрол.
Ты вообще понимаешь что за чушь ты пишешь? Никаких требований на "что храним в базе данных", я же самого начала написал что у меня подгорает из-за того что я должен париться из за таких мелочей как "что храним в базе данных" В КАКАОМ БЛЯТЬ ВИДЕ ХРАНИТЬ ДАТУ В БАЗЕ, а какого хрена вообще? ты понимаешь что я не должен хранить в базе ДАТУ ЕБУЧИМ СТРИНГОМ, дата это лонг, это последовательность битов, это такой же универсальный тип данных как инт или в стринг, а ты мне говоришь, ну храни дату в стринге и парси ее для жса, в чем проблема, что за чушь вообще? почему сраный джс мне указывает как я должен хранить дату, ОН ДОЛЖЕН ЖРАТЬ ЧТО ДАЮТ, будь я китайцем или я араб и пишу вязью, время у меня будет точно такое же, а дс уже должен взять эти биты и красиво нарисовать из них иероглифы китайцу и арабскую вьязь арабу А ОН ЭТОГО СУКА НЕ ХОЧЕТ ДЕЛАТЬ
Ответ на этот вопрос понимаешь, когда нужно изменить название поля или структуру данных и начинаешь ползать по всему проекту, по которому все эти запросы размазаны
ctrl + shift + f
не благодари
>я же самого начала написал что у меня подгорает из-за того что я должен париться из за таких мелочей
вот только в виновники ты записал жс и шарп, а не конкретную реализацию конкретного контрола, которая не дает....я честно говоря хз че она там не дает. Если бы контрол писал я, то с датой работал как с датой и форматировал исключительно при выводе не теряя оригинальную дату как контекст.
Я конечно считаю жс лютым говном. Во всем мире не найдешь человека, который считает жс большим говном, чем считаю его я. Но истина дороже
>ДАТУ ЕБУЧИМ СТРИНГОМ, дата это лонг, это последовательность битов, это такой же универсальный тип данных как инт или в стрин
шта? ты щас вообще о чем. Какой еще стринг.
>парси ее для жс
вообще то не парси а форматируй ее в ISO, если у тебя на руках объект DateTime(Offset), который нужно послать.
У тебя же контрол который сам достает из базы и похоже шлет на клиента "как есть" и если SELECT ddd FROM ... выдаест ISO то жс умеет.
new Date() в жс отлично понимает и ISO формат и миллисекунды.
А если ты в базе хранить 25/05/2021 то ты сам себе злобный буратин
>ctrl + shift + f
то есть ты предлагаешь лазить по всему проекту пропуская сотни левых совпадений с шансом накосячить и это вместо автоматического рефакторинга - спасибо, но не нужно.
какого контрола? О чем ты говоришь? При чем тут реализация вообще?
>шта? ты щас вообще о чем. Какой еще стринг.
Так это ты про какой-то utc в базе мне расказивал, что уже не бойсь не помнишь, заднюю включил?
>вообще то не парси а форматируй ее в ISO
Вот по этой фразе я понял что ты нихуя не понимаешь о чем, говоришь, потому что date.toString("0") про который ты мне писал это и есть парсер гений, дата записывается и храниться в лонге, в цифровом виде, а приведение его к стрингу вот так date.toString("0") это парс
то-есть ты переводишь родной цифровой формат в стринг, скармливаешь его джс, и он из стринга переводит его в своей ебанутый формат, это и есть парс глупышка
>А если ты в базе хранить 25/05/2021 то ты сам себе злобный буратин
в базе храниться не 25/05/2021 в базе храниться 633896886277130000 sql показывает тебе 25/05/2021 только из за твоих региональный настроек, был бы ты арабом показывал бы 2021-05-25 то каким образом скл отображает цифровое значение не имеет вообще никакого значения
>то есть ты предлагаешь лазить по всему проекту пропуская сотни левых совпадений с шансом накосячить и это вместо автоматического рефакторинга - спасибо, но не нужно.
нет, у нормальных программистов есть документация со всеми сносками, а вообще порадовало твоё представление как работает поиск, будто ты всю жить в каком нибудь блокноте работал
>какого контрола?
на скрине вижу некий FilteredGridView. Ты же его показал как пруф того, что "никакого шарпа между жс и запросами в бд у тебя нет, оно все само такое дурное)
>вот так date.toString("0") это парс
вообще то это формат (формат в стандарт ISO), то есть действие обратное парсингу, ну да пофиг.
>633896886277130000
миллисекунды? тогда в чем проблема? откуда на твоих скринах парсинг каких то Date(12345?
>то каким образом скл отображает
Так то я всегда говорил про формат, в котором дата должна ходить от сервера к жс, чтобы жс ее правильно понял.
сам то я вообще никогда не извлекаю вот так сырые данные чтобы отправить - у меня из базы приходит готовый объект DateTime(Offset), но даже так в SQL SERVER есть функции типа convert
>у нормальных программистов есть документация со всеми сносками
у нормальных программистов самодокументируемый код так то
>как работает поиск, будто ты всю жить в каком нибудь блокноте работал
как раз у меня открыта последняя студия и я нажал в нем ctrl + shift + f и забил в поиск completed. И вижу что это самый обычный поиск по файлам без учета контекста. То есть ничем не отличается от блокнота
>вообще то это формат (формат в стандарт ISO), то есть действие обратное парсингу, ну да пофиг.
Формат стринга! Ты неуч, toString парсит дату из цифрового формата в стринг, а параметром парсер уже принимает формат к которому нужно привести одпаршеный стринг, в данном случае он принимает "O" то есть формат ISO
>миллисекунды?
какие миллисекунды ,что ты несешь вообще господи, иди нахуй читать документацию
>toString парсит дату из цифрового формата в стринг
Откуда ты таких метафор нахватался?
toString конвертирует дату в строковый формат в соответствии с заданным шаблоном. Ну или форматирует дату в соответствии с заданным форматом, что менее юридически точно, но все равно верно.
парсинг работает ровно наоборот - из текстового получаем объект даты.
твое "парсит в стринг" будет применимо только если строка будет производить операцию типа String.FromDateTime("o", dateObj)
>какие миллисекунды ,что ты несешь вообще господ
ааа. ты про внутренний формат хранения в бд. Так он не имеет значения. Важно то, что выдается в твоем SQL. И выдать там ISO который изи поймет жс очень легко (тем более что ты запросы руками пишешь)
откуда я знаю что ты там где как хранишь. То ты напрямую из базы выводишь, то какие то парсинги на жс и шарпе делаешь, причем вообще не пойми чего парсинги
напомню с чего все началось
>>1946445
первый пик - вообще хер пойми что ты парсишь. что это за Date(1225547 из которого ты вручную выбираешь миллисекунды похоже и таймзону да?
что это вообще формат такой. ты жалуешься что тебе приходится его мудрить парсить на шарпе вот так - так а зачем ты такой его прислал???? Что ты вообще присылаешь в шарп, что вот так оно выглядит не как дата? почему не пришла вменяемая дата которую просто бы скушал DateTimeOffset.Parse и вообще сделал бы это сам при бинде параметров - ни строчки кода ручками
второй пик - что это за ручной разбор даты
кто мешает сделать просто
new Date(dateStr)?
что такое вообще csDate что не дата (раз надо конвертить) и не строка, раз делается toString()
гоняешь между языками не пойми что, которое и приходится руками разбирать, а потом еще винишь кого то
>парсинг работает ровно наоборот - из текстового получаем объект даты.
Ты прав в том что парсер формально означает преобразования из стринга в цифру, я использовал слово некорректно, я конечно же имел ввиду совершенно противоположный процес, преобразования из цифры в стринг
>Так он не имеет значения. Важно то, что выдается в твоем SQL. И выдать там ISO
как раз таки только сам объект даты и имеет значение, а то в каком виде или в каком часовом поясе его отобразить должно быть совершенно по барабану
>первый пик второй пик
не ищи там логики, я просто скинул наиболее дебильные ответы со стака от которых я подгорел
сейчас после пандемии все устоялись мамскинимы программистами на дому, у работодателей отбоя от них нет поэтому сейчас не лучшее время
ну не майнить же
видях не купить, да и за что купить
чтобы купить видяхи нужно сначала заработать на шарпе денег
а работы нет
купить крипту? ну мы же не маски
Ну, все ж зависит. Если ты рассчитываешь на стори про 100к джуну - то не вкатишься. Если ты понаехавший в ДС и просишь 40к+ не имея опыта - не вкатишься. Если ты чел без опыта на удаленку рвешься - почти нет шансов. Если в твоей мухосрани нет контор, в которых шарп нужен - не вкатишься.
В остальных случаях - вполне.
Я правильно понимаю, что трейни на шарпах в природе нет? И они за спасибо работают?
Web dev?
Как сбилдить репозитарий с шарповым кодом, автоматом,
прямо на github'e, с помощью Azure Pipelines,
чтобы этот значёк был зелёным, https://github.com/ChristianEder/azure-pipeline-as-code
и заебато чтобы всё фурычило,
прямо из кода открытого,
и чтобы не надо было пердолится с конпеляцией ядра на ассемблере,
и чтобы бинарники можно было скачать бесплатно и без смс,
и чтобы оно было зелёненькое-зелёненькое,
как тут: https://github.com/bcndev/bytecoin
Данные передаются в контролер и прямо там считаются? Либо должен быть отдельный класс метод которого будет вызван в контролере для расчета?
Желательно класс или менеджер в контролере должны происходить только проверки и бинд модели
Желательно класс или менеджер в контролере должны происходить только проверки и бинд модели, ну это так у нас делают
Спасиб.
И еще вопрос, как получить пикрил инфу в асп коре? В каком классе она хранится?
Я так понимаю когда юзер заходит на сайт создается экземпляр класса с данными о юзере?
Зависит от платформы, это все есть в документации: https://docs.microsoft.com/pl-pl/dotnet/api/
C# Fullstack?
Двачую. Я когда только начинал учить шапр, по совету двачей, тоже засел на эту книгу. И как прилежный ботан пытался вдумчиво понять каждую читаемую строчку. И из-за вот такой хуйни, как на пике, которая буквально с первой страницы встречает нюфага, руки которого чешутся перед первым хелловордом, я чуть и не дропнул шарп тогда.
И дело не в том, что книга перегружена сложной и непонятной хуйней, а в том, что 99% инфы оттуда имеют такое сочетание сложности (средняя и высокая сложность) и практической применимости (нулевая применимость), что каждую минуту задаешься вопросом, нахуя это читать.
Книги по плюсам у меня никогда такого отношения не вызывали, потому что всякая плюсовая магия всегда на кончике пальца и в деле.
В принципе, кроме косметических правок, основную реализацию всех объектов написал (переписал со своего древнего говнокода). По ходу дела обнаружил, что частичные аналоги уже есть в стандартной библиотеке. В WinForms есть реализации многого из того, что мне нужно, однако зависимость от форм не хочется добавлять. И не думаю, что там всё это имеет какие-то оптимизации.
Есть также структуры Vector2 и Vector3 в пространстве Numerics. Может ли быть какой-то профит использовать именно их? Вроде как они очень круто оптимизированы. Недостаток их использования для меня, что я всё же не могу нормально расширить их функциональность.
В общем, что посоветуете по этой теме. Перформанс важен, но удобство кодинга и контроль над кодом важнее.
>Перформанс важен, но удобство кодинга и контроль над кодом важнее.
Если тебе Vector2 и Vector3 не подходят - ты ответил на свой вопрос.
Ну вот к примеру будет сайт с 5 страницами и обработкой введенных данных от пользователя. Вроде же некуда тут модель впихивать.
В этом случае тем не модель не нужна, а MVC в целом. Просто статические страницы с обработкой на клиенте, ну или если нужно сервер-сайд выполнение, то апишка с вызовом твоей числодробилки (сервис аз ис)
НЕТ, КОГДА ВЫ УЖЕ ПОЙМЕТЕ, клиенту похер как у вас код отформатирован, ему похер сколько вы комментариев настрочили, ему плевать какие крутые технологии вы использовали, ЕМУ ВАЖЕН ТОЛЬКО ПЕРФОМАНС, будете для себя код писать пишите как хотите, а для клиента вы ДОЛЖНЫ писать код который максимально эффективный и производительный
>Я пишу для себя микробиблиотеку тривиальной обработки геометрических сущностей
У тебя все хорошо?
>>1950724
А чего просто Blazor не навернуть?
Клиенту важно решение его задачи в срок, за тот бюджет что он выделил. Перформанс - может быть конкурентным преимуществом, если две конторы предлагают решение задачи за одинаковую цену.
Блядь, ну серьезно, посмотри на 1с, нахуй, там отчет формируется иногда по полчаса-часу, блядь, который можно ручками собрать парой SQL запросов и выгрузить куда нужно, но 1c всю эту залупу с тем чтобы бухгалтерша нажала и у нее сформировалась делает и поддерживает актуальную хуйню связанную с бухучетом и всем заебись, похуй на то что можно в 100 раз ускорить составление этого отчета.
Не знаю кому похуй, может какой-то тёте сраке и похуй но у нас нет, у нас нужно выполнить :
а) в срок
б) что бы работало как предполагается
в) что бы работало максимально быстро
г) что бы можно было поддерживать
е) что бы можно было развивать
ЛЮБОЙ из не выполненных условий валит проект
> в) что бы работало максимально быстро
Оки, тогда ты без труда скажешь, какой код работает быстрее и сможешь пояснить почему.
Щас бы дяде мидлу доказывать свою квалификацию школьнику с двача отвечая на детские вопросики которые даже гуглятся по первому запросу, ну ты даешь анон
Анон, что скажешь? Кто ни будь принимает за скелет/использует этот шаблон?
Ну, я так пытался делать, но обосрался. Постоянно возникало желание взять что-то тут из вышестоящего проекта, в результате выходило все равно сильносвязная хуета и я сливал все что там нарезал в один проект. Но я нубяра, майки подобный подход использовали в своем примере с eShopOnWeb/Containers.
Короче, чисто на бумаге и когда нормальные люди это делают - выглядит заебца. Когда делаешь что-то мелкое - тоже заебца. Когда пытаешься что-то что должно реальную пользу приносить сам и ты дебил что не способен нормально делить на куски и держать это все в голове - случается залупа.
Ну, просто абстрактно опишу что было у меня. Есть протокол общения с устройствами, пакетики там, протокол похож на Bisync, но байтики отличаются и иногда шифруются, а иногда не шифруются; есть клиенты которые хотят с клиентами-устройствами через мое приложение общаться их запросы нужно конвертировать в этот вот протокол; а сверху веб-морда на JS которая должна 1. Позволять админу менять настройки сервера(например ограничить время жизни сессии или число одновременно живущих сессий, отключить логгирование, поменять порт на котором ждут соединение, ограничить адресацию, дать возможность открыть диапазон портов для приема устройств); 2. Показывать состояние устройств что сейчас подключены(подключен, срет не тем чем нужно) и т.д. Ну, собственно: Вот протокол, его сборку-разборку из байт выносим в библиотеку. А дальше - а дальше хуй пойми как это резать, потому что описание протокола - вот иногда, если клиент такой - мы должны делать так, а если не такой - вот так, иногда клиент может прислать пакеты не по протоколу и мы должны их закешировать и если есть клиент что ждет сообщения от устройства - отдать ему; тут мы обрываем соединение если пакет битый, а там не обрываем, потому что у этих устройств обосрались на заводе и они всегда битые приходят, а потому мы считаем что пакеты не битые; вот тут мы должны открыть сеанс связи, а здесь не должны. А еще сверху, есть секретные пакетики, которые моя приблуда должна слать устройствам чтобы проверить что это реальное устройство и меня не наебывает злоумышленник. Но я тупой же, потому может быть не в такой архитектуре проблема, а во мне, опять же, мне стало проще - забить на попытки сделать чисто и я ебанул так чтобы все что нужно было делать - делало. ЗАТО РАБОТАЕТ БЫСТРО!!! ЫЫЫЫЫ: ЫЫЫЫ, НИ ОДНОГО ВЫДЕЛЕНИЯ ПАМЯТИ ПОСЛЕ ТОГО КАК БАЙТИКИ ИЗ СОКЕТА ПОЛУЧЕНЫ!!! ВСЕ НА УКАЗАТЕЛЯХ!!!!!! А ВАШ ЕБУЧИЙ ЕФ ЗАМЕНИЛ ЗАПРОСАМИ КОТОРЫЕ ПИСАЛ РУЧКАМИ, ЕЩЕ И НАХУЙ АСП, ДЛЯ АПИ Я ПРОСТО ЕБАНУЛ HTTPListener И ВСЕ НАХУЙ, НИКАКИХ ВАМ ТАМ МИДЛВАРОВ, СЕРВИСОВ, СИНГЛТОНОВ И ПРОЧЕГО, ПОТОМУ ЧТО НЕ НУЖНО!!! А 50% КОДА В Main НАПИСАНО!!!!!!!!!! Короче, я за 2 месяца работы - 20к строк кода, которые довольно хреново со стороны выглядят, зато я знаю каждую строчку и лично я легко с этим работать смогу, ну а если меня попрут - пусть страдают те кто не смог понять гениальный ход моих мыслей.
Ну, я так пытался делать, но обосрался. Постоянно возникало желание взять что-то тут из вышестоящего проекта, в результате выходило все равно сильносвязная хуета и я сливал все что там нарезал в один проект. Но я нубяра, майки подобный подход использовали в своем примере с eShopOnWeb/Containers.
Короче, чисто на бумаге и когда нормальные люди это делают - выглядит заебца. Когда делаешь что-то мелкое - тоже заебца. Когда пытаешься что-то что должно реальную пользу приносить сам и ты дебил что не способен нормально делить на куски и держать это все в голове - случается залупа.
Ну, просто абстрактно опишу что было у меня. Есть протокол общения с устройствами, пакетики там, протокол похож на Bisync, но байтики отличаются и иногда шифруются, а иногда не шифруются; есть клиенты которые хотят с клиентами-устройствами через мое приложение общаться их запросы нужно конвертировать в этот вот протокол; а сверху веб-морда на JS которая должна 1. Позволять админу менять настройки сервера(например ограничить время жизни сессии или число одновременно живущих сессий, отключить логгирование, поменять порт на котором ждут соединение, ограничить адресацию, дать возможность открыть диапазон портов для приема устройств); 2. Показывать состояние устройств что сейчас подключены(подключен, срет не тем чем нужно) и т.д. Ну, собственно: Вот протокол, его сборку-разборку из байт выносим в библиотеку. А дальше - а дальше хуй пойми как это резать, потому что описание протокола - вот иногда, если клиент такой - мы должны делать так, а если не такой - вот так, иногда клиент может прислать пакеты не по протоколу и мы должны их закешировать и если есть клиент что ждет сообщения от устройства - отдать ему; тут мы обрываем соединение если пакет битый, а там не обрываем, потому что у этих устройств обосрались на заводе и они всегда битые приходят, а потому мы считаем что пакеты не битые; вот тут мы должны открыть сеанс связи, а здесь не должны. А еще сверху, есть секретные пакетики, которые моя приблуда должна слать устройствам чтобы проверить что это реальное устройство и меня не наебывает злоумышленник. Но я тупой же, потому может быть не в такой архитектуре проблема, а во мне, опять же, мне стало проще - забить на попытки сделать чисто и я ебанул так чтобы все что нужно было делать - делало. ЗАТО РАБОТАЕТ БЫСТРО!!! ЫЫЫЫЫ: ЫЫЫЫ, НИ ОДНОГО ВЫДЕЛЕНИЯ ПАМЯТИ ПОСЛЕ ТОГО КАК БАЙТИКИ ИЗ СОКЕТА ПОЛУЧЕНЫ!!! ВСЕ НА УКАЗАТЕЛЯХ!!!!!! А ВАШ ЕБУЧИЙ ЕФ ЗАМЕНИЛ ЗАПРОСАМИ КОТОРЫЕ ПИСАЛ РУЧКАМИ, ЕЩЕ И НАХУЙ АСП, ДЛЯ АПИ Я ПРОСТО ЕБАНУЛ HTTPListener И ВСЕ НАХУЙ, НИКАКИХ ВАМ ТАМ МИДЛВАРОВ, СЕРВИСОВ, СИНГЛТОНОВ И ПРОЧЕГО, ПОТОМУ ЧТО НЕ НУЖНО!!! А 50% КОДА В Main НАПИСАНО!!!!!!!!!! Короче, я за 2 месяца работы - 20к строк кода, которые довольно хреново со стороны выглядят, зато я знаю каждую строчку и лично я легко с этим работать смогу, ну а если меня попрут - пусть страдают те кто не смог понять гениальный ход моих мыслей.
Как мне можно конвертнуть простую впф xaml страницу без кнопок, только с експандерами/текстблоками и подставленными значениями в html страницу?
Так юзай юниксовское представление в виде одного лонга. Вроде как это стандарт
формат то да стандартный, проблема в том что для шарпа мин это будет 0 0 0 0 и до 2010 будет одно значение таймпана, а для шапра это 1970, и шарп уже не воспринимает это как мин, приходиться пилить костили, ловить исключения, писать хандлеры и сосать писос когда где-то что-то упустил
ну или делать что-то вроде пикрила
> которые либо пришли из математиков и АСУ ТП в предметную область, либо наоборот, дополнили предметные знания навыками кодинга. А то, о чём ты говоришь - это сайтошлёпство и обезьяний бигдата+машоб на корзину для пускания пыли в глаза акционерам.
Вот мне интересно, что такие как ты думают о прогерской вышке? Чел, что закончил CS в MIT, но нихуя не шарит в биологии, банках или финансовой промышлености, это ведь обезьяна-формошлеп?
>>1917602
> Там где предметная область не нужна для таких кодеров будет внешний рафинированный интерфейс, за который ему и лезть не стоит.
Вроде как наоборот, для учоных в говне моченых прогеры делают DSL на питоне, чтобы они на ней и писали свои формулы для предметной области.
Вышка уже давно учит несколько специализации сколько учит УЧИТЬСЯ, челик который учился в MIT без труда научится всего чему надо в работе быстро и эффективно,
А челы из гуглов и микрософтов тоже формошлепы? Никакой же предметной области у них нет, они просто пишут софт для массового потребителя/энтерпрайза.
Майки это большая компания с крупным R&D и большим не публичным сектором формошлепы там тоже есть, но таких даже не большинство
Я темой никогда не интересовался, но безопасным предположением будет: никак без костылей несовместимых с жизнью.
Он хочет чтобы ты инжектил а не создавал сервиспровайдера. Там же все написано.
>>1951167
>Вот мне интересно, что такие как ты думают о прогерской вышке? Чел, что закончил CS в MIT...
>А челы из гуглов и микрософтов тоже формошлепы? Никакой же предметной области у них нет
Они разрабатывают компиляторы, ОС, СУБД, антивирусы, поисковики, навигаторы, архиваторы, игры, алгоритмы шифрования, блокчейн и т.п. Это их предметная область.
>Вроде как наоборот, для учоных в говне моченых прогеры делают DSL на питоне, чтобы они на ней и писали свои формулы для предметной области.
Порог входа в программирование с каждым годом всё ниже, и средний программист - это нихуя не математик-алгоритмист, который в свободное время контрибутит в ролсин и постгрес, это именно что нечто среднее между вчерашним продавцом шин и дисков и перекатышем из 1С. Он сможет сделать формочку или кое-как приспособить схему БД интернет-магазина под нужды заказчика. Скорее всего он может найти реализацию нужного алгоритма на СО и подключить даже не самые популярные библиотеки. Сможет ли он самостоятельно написать парсер для составной формулы - это уже вряд ли.
Я года 2 назад это использовал, но сейчас не могу ни найти, ни вспомнить, как этот класс называется. Подскажите, кто знает, велосипед не хочу писать.
> Они разрабатывают компиляторы, ОС, СУБД, антивирусы, поисковики, навигаторы, архиваторы, игры, алгоритмы шифрования, блокчейн и т.п. Это их предметная область.
Так погромистов которые это делают единицы. В мире всего то несколько ос, по компилятору под каждый язык, несколько СУБД и тд. А создатель чего-то нового, что будут использовать другие люди, точно войдет в историю про него будет страничка на википедии
Я очень сомневаюсь, что каждый второй выпускник стэнфорда вот так сразу же после универа идет в гугол писать поисковик или в майкрософт пилить новые версии тайпскрипта и шарпа.
Алсо, если ты сам такой тру программист, то напиши как им стать джуну-вкатывальщику. Я то совсем не против на первой работе писать компилятор, но почему-то во всех джуно-вакансиях требуют знания html, angular и sql, а не собственный ЯП на гитхабе.
если хочешь делать то что самому хочется то делай сам, за свои деньги,
пс: работал над проектом с нейросети который детектить пустые полки и вызывает работников магазина их заполнять, это был одновременно один из самых интересных и самых скучных проектов, с одной стороны были интересные моменты, но большую часть времени мы пинали хуи, да и интересность во многом заключалась в новизне, но если расказывать о том что ты работал с нейросетями то людям и работодателям кажется что ты какой-то супер хацкер
Заходит юзер на сайт по адресу droch.xxx/Product/List
Аспе Нет Коре создает экземпляр класса ProductController пикрил1 В классе срабатывает конструктор и видит что в конструктор должен принимать любой экзмепляр который реализовывает интерфейс IProductRepositoryпикрил2 Что бы присвоить его полю IProductRepository repository
Класс который реализовывает данный метод FakeProductRepositoryпикрил3.
Вот и создается экземпляр FakeProductRepository передается в конструктор ProductController там присваивается значения полю IProductRepository repository; и по вызову метода List() вся эта хуетень передается в представление и выводится юзеру.
И все это делается с помощбю строчки в Стартупе services.AddTransient<IProductRepository, FakeProductRepository>();
Я так понимаю эта строчка говорит следующее: Когда нужно создать экземпляр типа IProductRepository то используй для этого экземпляр FakeProductRepository.
Правильно понимаю чи нихуя?
Сложна пздц, но хоть начинаю врубатся, неделю назад ваще просто как обезьяна переписывал из книги код и не понимал что нахуй
верно. И нет там ничего сложного
DI контейнеры это очень просто, а контейнер от майков вообще базовый примитив.
Вместо ручного кода создания вида new Foo(new Bar(new Baz))
ты прописываешь декларативно что подсовывать вот "для такого вот нужного в конструкторе типа"
Книга по асп нет коре 2.1 я делаю на 3.1 и EF5 У меня нихуя не работает миграция.
Как правильно сделать?
Пикрил ошибки и пикрил кода
Не может найти строку хотя она бля есть
Я не понимаю как если ты имеешь вииду что-то типа пикрила как в контролере то там где мне нужно это так не работает, там где мне нужно метод требует параметра
> метод
И в чем проблема? Ты же не метод инжектишь.
А если ты имел ввиду какие-то определенные объекты в конструкторе - то тоже не понятно в чем сложность регистрируешь тот какой тебе нужен с теми параметрами какие нужны и достаешь.
Ну и ты можешь сделать класс-фабрику и в нее заинжектить что нужно, а разные параметры в методе Create передавать и там собирать. В классе где нужен специальный инстанс - создавать тот что нужен тебе.
https://github.com/BakaVaka/MySuperDuperPasswordManager/tree/master/MySuperDuperPasswordManager
Владельцы бизнесов, больших и маленьких, они сделаны из того же мяса, что и ты, и имеют такие же права. Пили свой проект и коммерциализируй. Я так и делаю например. Зачем тратить свою жизнь, обогащая дядю и работая над унылыми проектами?
>Я очень сомневаюсь, что каждый второй выпускник стэнфорда вот так сразу же после универа идет в гугол писать поисковик или в майкрософт пилить новые версии тайпскрипта и шарпа.
Поддержка и развитие всего того, что уже написано, и так требует кучу ресурсов.
Нечто радикально новое, типа языка программирования, в корпоративной среде вообще не может зародиться.
Либо покупается на стороне, либо у кого-то из сотрудников есть пет-проект по языку, которому в удачный момент компания даёт ресурсы, либо зовут уже зарекомендовавшего себя опытного языкописателя со стороны.
А в целом я и сам не очень понимаю, какими задачами постоянно заняты тысячи программистов в фейсбуке, гугле, нетфликсе и т.п. Всё вроде работает без особых изменений уже лет 10. Почему капиталист их всех не разгонит и не начнёт просто получать больше прибыли?
Иди на завод. лол. Там одна задача охуительней другой: нужно новый стек реализовать, нужно всякие шифрования и прочую залупень, серху нужно о перформансе думать, потому что твой код будет работать на китайских процах с ограничением в 32МБ оперативки и 128МБ встроенной памяти; а еще и будут браки в партиях, которые ты будешь обходить костылями, чтобы клиенты не заметили брака. И да, это все на шарпе вполне делается. Базарю, еще захочешь. Плоютят правда не так много, 25к людям с 5 годами опыта; но ты же интересные задачи хочешь решать, а не деньги зарабатывать.
Уууу, сеньеры не хотят ревьюить код. Как жить-то? Вот и как я узнаю теперь - хорошо ли я написал код или нет?
Да там вроде в этот раз не так уж и плохо же. Я старался.
Предметная область: Отдел расчета зарплаты.
Информационная система отдела расчета зарплаты на
предприятии хранит данные о величине оплаты различных видов работ.
Система хранит информацию о работниках предприятия.
Система должна позволять выполнять следующие задачи:
вводить информацию о различных видах работ;
вводить информацию о работниках и выполненных ими работах;
после ввода фамилии выводить для работника зарплату;
выводить сумму выплат всем работникам;
Для заданной предметной области спроектировать программную
структуру, состоящую из 3-5 классов.
В соответствии с разработанной диаграммой классов выполнить
программную реализацию.
Предусмотреть использование типа данных – перечисление.
Ввод/вывод должен быть реализован вне проектируемого класса.
Очень надо
За две тысчи сделаю.
Ну так шо. Я ужо написал. Хде мои две тысчи?
Cпасибо большое!
А что там не так?
Спасибо, помог!
Есть ли способ достать из словаря ( Dictionary<Tkey, TValue> ) ключ по значению, без прямого перебора всего словаря?
Я даже боюсь представить зачем это может быть надо....
Я не до конца уверен, что конкретно ты имеешь ввиду под перебором, потому ответа два:
1. Если ты не хочешь вручную перебирать значения, воспользуйся Linq, пр.: dictionary.FirstOrDefault(x => x.Value == "Kek");
2. Если вопрос был про максимальную производительность - тебе эта структура данных не подходит. Тут нужно по контексту смотреть, что для твоей херни подходит.
Я думаю он про перебор лиинком и говорил
>>1954405
а вообще можно сделать что-то типа этого: https://stackoverflow.com/questions/1171812/multi-key-dictionary-in-c
кастомные словари с несколькими ключами, может поможет
Если это важно для производительности, то следует хранить обратный словарь Dictionary<TValue, Tkey> (в лучшем случае) или Dictionary<TValue, List<Tkey>> в случае возможности повторяющихся TValue с разными ключами.
В документации не объясняется, проверка рандомных чисел логику не выявляет.
данные фильтруются на сервере и отправляются пачкой,
что меня интересует, можно ли вернуть пользователю одну пачку в потом по контексту его действий предположить какую пачку он захочет в будущем и начать ее загружать например с помощью сигналР? Как будто загрузка следующий пачки происходит в фоне для пользователя?
кто такое уже делал? есть советы как это имплементировать?
Знаю базовый .net, использую паттерны, работал с di, энтитифреймворк.(опыт работы около 2 лет). Не очень большой работы с мультитредом (т.е. не использовал на практике семафоры, например)
Сейчас в процессе чтения про Clr более подробно(Рихтер)
Как я понимаю, чтобы устроиться в энтерпрайз, нужно вкатываться/читать про asp. + Js изучать.
В свободное время ещё изучал unity 3d, но такое чувство, что Там оч плохо с зарплатами .
У кого был похожий опыт развития? Куда лучше двигаться?
в WPF всегда можно подменить шаблон который не будет знать про состояния кнопки и мыши и будет выглядеть как угодно
У меня есть таблица, к ней еще 3 зависимых таблицы
Сейчас вытягиваю сначала все данные главной таблицы одним запросом
Потом из каждой зависимой таблицы таблицы вытягиваю данные по одному запросу на каждую запись главной таблицы
Итого, получается мне нужно поочередно вытягивать первых 100 записей, их обрабатывать и потом там по кругу, пока данные для выборки согласно условию запроса не закончатся
На каждый такой заход 1 + 300 запросов
Как лучше это переделать?
Ну допустим я буду делать 4 запроса
Один для главной как был
И еще 3 на каждую зависимую таблицу через джоины
Тут вопрос какое условие к запросам написать
И ничего лучше чем написать WHERE IN (100 айдишников) мне в голову не приходит
И потом надо соответсвия програмно искать, чтобы связать объекты главной таблицы с объектами зависимых таблиц, ну с этим проблем быть не должно
Тут главный вопрос как правильно построить запросы
В качестве ORM у меня не Entity Framework, если что. Там-то все, по всей видимости, было бы просто.
Слишком обтекаемо и без конкретики написал, чтоб по существу что-то советовать.
Постараюсь поугадывать:
Если твоя ORM понимает linq - напиши джойн на на нем, получишь один запрос.
Если твоя ORM не понимает linq - напиши запрос на обычном сиквел с обычными джойнами (INNER JOIN / LEFT JOIN etc...). Будет все еще один запрос.
Далее идут странные кейсы. Если тебе кажется, что у тебя такой - тебе скорее всего кажется
Если тебе нужно данные главной таблицы как-то хитро фильтровать, что в сиквеле это сделать нельзя - я бы просто вытянул все данные с джойнами, а потом их фильтровал.
Если тебе нужно данные главной таблицы как-то хитро обработать перед джойном, что в сиквеле это сделать нельзя - я бы вытянул данные из первой таблицы, сделал с ними что нужно, а потом доставал бы из других. Я бы избегал WHERE IN, т.к. могут быть ограничения на количество данных в списке (2000 для SQL Server, например). Надежнее простым дайнемик сиквелом создать временную таблицу, наполнить ее твоими айдишками, и сделать на нее джойны.
ORM
https://github.com/praeclarum/sqlite-net
> Если твоя ORM понимает linq - напиши джойн на на нем, получишь один запрос.
Понимает, но я в свою очередь, не очень понимаю как это все обернуть на LINQ так чтобы свести потом все к одному объекту
Грубо говоря, объект в результате содержит три коллекции, которые эти 3 таблицы представляют, связь один ко многим от главной таблицы к дочерним.
Вроде такого
class TableMain
{
List<TableA> TablesА {get;set;}
List<TableB> TablesB {get;set;}
List<TableC> TablesC {get;set;}
}
> Если твоя ORM не понимает linq - напиши запрос на обычном сиквел с обычными джойнами (INNER JOIN / LEFT JOIN etc...). Будет все еще один запрос.
Ну одного запроса не выйдет, тут минмум 4
Один для главной и по одному с джоином на каждую зависимую таблицу
Потому что три зависмых таблицы не связаны между собой, а только имеют общего родителя
Запрос к главной таблице
SELECT FROM TableMain
WHERE (куча условий)
LIMIT 100
И потом что-то вроде такого
SELECT TA. FROM TableMain TM
JOIN TableA TA
WHERE IN (100 айдишников таблицы TM из предыдущей выборки)
И также с осальными 2 таблицами
А потом програмно раскидать каждую таблицу по своим объектам в соответсвующие коллекции
> Если тебе нужно данные главной таблицы как-то хитро фильтровать, что в сиквеле это сделать нельзя - я бы просто вытянул все данные с джойнами, а потом их фильтровал.
C фильтрацией главной таблицы проблем нету, проблема только в том как достать данные дочерних таблица.
> 2000 для SQL Server, например)
Ну мне всего лишь по 100 надо таскать за раз
> Надежнее простым дайнемик сиквелом создать временную таблицу, наполнить ее твоими айдишками, и сделать на нее джойны.
Звучит как хороший вариант, спасибо
ORM
https://github.com/praeclarum/sqlite-net
> Если твоя ORM понимает linq - напиши джойн на на нем, получишь один запрос.
Понимает, но я в свою очередь, не очень понимаю как это все обернуть на LINQ так чтобы свести потом все к одному объекту
Грубо говоря, объект в результате содержит три коллекции, которые эти 3 таблицы представляют, связь один ко многим от главной таблицы к дочерним.
Вроде такого
class TableMain
{
List<TableA> TablesА {get;set;}
List<TableB> TablesB {get;set;}
List<TableC> TablesC {get;set;}
}
> Если твоя ORM не понимает linq - напиши запрос на обычном сиквел с обычными джойнами (INNER JOIN / LEFT JOIN etc...). Будет все еще один запрос.
Ну одного запроса не выйдет, тут минмум 4
Один для главной и по одному с джоином на каждую зависимую таблицу
Потому что три зависмых таблицы не связаны между собой, а только имеют общего родителя
Запрос к главной таблице
SELECT FROM TableMain
WHERE (куча условий)
LIMIT 100
И потом что-то вроде такого
SELECT TA. FROM TableMain TM
JOIN TableA TA
WHERE IN (100 айдишников таблицы TM из предыдущей выборки)
И также с осальными 2 таблицами
А потом програмно раскидать каждую таблицу по своим объектам в соответсвующие коллекции
> Если тебе нужно данные главной таблицы как-то хитро фильтровать, что в сиквеле это сделать нельзя - я бы просто вытянул все данные с джойнами, а потом их фильтровал.
C фильтрацией главной таблицы проблем нету, проблема только в том как достать данные дочерних таблица.
> 2000 для SQL Server, например)
Ну мне всего лишь по 100 надо таскать за раз
> Надежнее простым дайнемик сиквелом создать временную таблицу, наполнить ее твоими айдишками, и сделать на нее джойны.
Звучит как хороший вариант, спасибо
Сохранить лог в базе?
Или просто в текстовом формате?
Использовать встроенный логгер?
Стоит ли создавать много файлов лога например на каждый день?
Насколько большие файлы лога обычно?
В нашей конторе мы храним на диске, на каждый день.
Но у нас десктоп приложение и логгер самописный
Няш, тебе на этот вопрос никто не ответит, нет универсального рецепта, то что подойдет одному не подойдет другому, ты должен сам определить.
пс: скажу только что если ты не знаешь куда двигаться дальше, это значит что у тебя нехватка знаний, так у нас отсеивают псевдо-мидлов
А если например админ хочет просмотреть историю активности пользователя тогда он должен каждый файл открывать и искать по нему? как устроен логМенеджмент?
У нас есть приблуда в программе типо журнала событий в винде, которая фиксирует основные события.
А лог это для ошибок, то есть что-то пошло не так идем в лог.
Решай по его важности, чувствительности, размеру и т.д.
Файловый лог норм, если его не много. Ну и искать по нему не очень.
Структурированный лог в БД прикольный, но не перегрузи ее командами.
Крутой вариант - писать в какую нереляционную БД, которая, помимо быстрой записи и анализа логов, поддерживает дашборды.
Нормальная история в зависимости от вида логов, писать их в разные хранилища.
Если встроенного логера хватает - отличный вариант. Если не хватает - можно установить, например, NLog, который использует интерфейс встроенного в Core, но поддерживает много таргетов и еще всяких штук.
логгировать как я понял нужно все вплоть до вызова некоторых функций и получений страниц
>>1955268
Ну в общем я думаю наиболее удобным вариантом писать лог в зависимости от типа в отдельные файлы, но не разбивать по датам, то есть отдельный лог для авторизированния пользователей, отдельный для вы авторизирования, отдельный для загрузок страниц, по каждому лог по типу ошибки, ну я думаю это под несколько сотен файлов и они будут храниться на сервере
вообще идеально было бы записывать и работать с логами с базой данных, но без базы данных, она находиться в облаке и по условию нужно минимизировать ее использование
Хм, обычно используют обратный подход: небольшое количество видов логов, и разбитие по датам. Если что-то пошло не так, гораздо чаще можно ответить на вопрос "когда?", а не "что?". Ну и если лог разрастется - его легко будет почистить (даже автоматическую очистку старых записей можно настроить).
К слову, облачные провайдеры порой предоставляют свои услуги по хранению логов, хотя знакомые жаловались, что они не очень по сравнению с нормальным noSQL. Ну и имей ввиду возможные проблемы с файловыми логами, если приложения тоже в облако уедут.
>гораздо чаще можно ответить на вопрос "когда?", а не "что?"
Верно подмечено
>>1955320
>Ну и имей в виду возможные проблемы с файловыми логами, если приложения тоже в облако уедут.
это тоже валидно
К тому же есть еще проблема с тем что бы записывать значения в файл в многопотоке я потому думал много маленьких логов использовать что бы избежать проблем с остановкой потоков из-за лока, с базой таких проблем конечно нет, но все таки не хотелось бы гонять трафик просто так, тут главная проблема даже несколько трафик сколько количество частых маленьких транзакций, может стоить сделать что-то типа буффера что бы он накапливал себе в память логи, а потом после достижения определенного количества строк просто одной пачкой транзактил это в базу? Как вам такой подход?
>что бы записывать значения в файл в многопотоке я потому думал много маленьких логов использовать
Я конечно хз, что у вас там за ограничения, но реализация лога - это тривиальная школьная задача, проще сортировки пызурем.
Пишешь буфер обертку вокруг листа или конкурентной сумки, и каждые 100к записей сливаешь в БД или в файл. Даже не знаю, что может тут пойти не так. Но писать в файл или тем более в БД чаще 1 раза в секунду или типа того - так себе решение.
Пишешь буфер обертку вокруг листа или конкурентной сумки, и каждые 100к записей сливаешь в БД или в файл. Даже не знаю, что может тут пойти не так. Но писать в файл или тем более в БД чаще 1 раза в секунду или типа того - так себе решение.
чел я именно об этом написал
Никаких проблем с логированием из множества потоков не встречал, ведь это само собой разумеющееся. Если будешь использовать NLog, там есть AsyncWrapper, который буферизацию делает. Как раз для ситуаций с большим потоком логов.
Шизик, прочитай внимательно
>проблема с тем что бы записывать значения в файл в многопотоке
Речь не шла про лог в многопотоке, речь шла про запись в файл в многопотоке, никогда не встречал? Тогда иди уроки делай
Ты туповат? Логер пишет в файл последовательно, даже при одновременных вызовах в разных потоках, а AsyncWrapper может буферизировать и склеивать логи для записи, чтоб решить потенциальные проблемы с производительностью.
Хм, я почитаю об этом...
Я работал только не через System.Data.SQLite, использовали для шифрования базы sqlcipher
Сначала хотели запаролить базу, но при установке пароля вся база шифруется и скорость всех запросов упала в разы
Поэтому махнули рукой и оставили как есть :D
Скорее всего, если посидеть, поразбираться, то можно нормально сделать, но для нас база с паролем не особо требовлась
Как вариант, архивировать базу в zip с паролем, а при открытии считывать, хранить и изменять в опер. памяти.
Это пиздец костыли - у меня база и так пару гиг весит, я и так ебусь чтобы ентити залупа не загружала всю таблицу в озу скопом, а по одной записи и вызываю гк на каждый чих ибо утечки шопиздец.
> Аноны, как сохранять лог?
Серилогом
> Сохранить лог в базе?
Если это требуется
> Использовать встроенный логгер?
Серилог используй
> Стоит ли создавать много файлов лога например на каждый день?
Если стоит такая задача. У нас, например, обычно, хранится 5 файлов, каждый по 100МБ. Каждый день нет особого резона, потому что обычно форматирован и содержит информацию о времени-дате, т.е. ты легко можешь фильтровать его, ну а лог за оч давно обычно не нужен.
> Насколько большие файлы лога обычно?
Зависит от системы и задач. Обычно больше гига никому не надо. Плюс, если тебе нужно большой объем данных хранить, то логи у тебя будут в бинарном формате -> гиг это пиздец как много данных на самом деле, для примера: вот у нас в девайсах стоит флешка на 512МБ и там логи работы за 5 лет не в состоянии засрать это все, другое дело, что там и логи бинарные, а не эти ваши 'UnhandledException и весь стек вызова.
Если ты веб-макака, то обычно логи у них - кидаются в какой-нибудь отдельный сервис, серилог - вполне способен это делать. Если ты десктоп-макака - серилго позволяет тебе как в файлик кастмоного формата, так и в JSON, так и в консольку с подсветочкой всего.
Короче, если у тебя нет каких-то специфичных штук, типа: Мне не нравится что уровень Trace называется, хочу чтобы он как-то иначе назывался - берешь серилог и используешь.
Так вот, в чем трабла. Я беспокоюсь: А как поступать если внезапно поток прервется или файл невалидный? Вот я парсю, бах, клиент до конца не загрузил файл - что я долежн делать? Или если все норм, но файл невалидный? Должен ли я паниковать и кидать всюду из-за этого эксепшны или не должен и нужно просто мягко это дело завернуть?
ча?
если бы еще серилог позволял гибко настраивать куда писать
вот за что мне нравится Nlog - за его возможность расписать какие логеры (и какого уровня) в какой файл писать, также доступны wildcard для указания пачки логеров
Чет орнул хоть и знаю что ты троль
ты легко можешь фильтровать его
Ну если лог в базе понятно как его фильтровать, а если он храниться в файле на сервере? Как его в таком случае фильтровать, линк тут не проканает, за месяц одних только логов подключения к базе данных было 200к строк, я боюсь что фильтровать что-то такое в файле может быть затруднительно...
>Короче, если у тебя нет каких-то специфичных штук, типа: Мне не нравится что уровень Trace называется, хочу чтобы он как-то иначе назывался - берешь серилог и используешь.
Ну тут проблемка потому что логи должны быть кастомного формата потому что у нас есть (или должен быть) дашборд которому можно скормить логи
Есть проект в вижуал студии. В проекте добавлены .txt файлы. Как сделать так чтобы при сборке проекта эти .txt файлы нигде не фигурировали на выходе после компиляции, а лежали просто в проекте, в исходниках?
В вебе на порядок больше вакансий, но больше всякого нужно знать и требования к проектам выше.
Ну, это я так со стороны вижу, сам то я десктоп педалю
Я сам сижу на веб+асп.нет, и в целом согласен с >>1956898
Вакансий намного больше (я особо и не видал десктопных). На бекенде зоопарк технологий большой, но они скорее приятные. Со значительной долей вероятности, работа будет для фуллстека, а на фронте еще больший зоопарк технологий, и, часто, куда менее приятный.
Сам десктопом не занимался, но с моей колокольни веб выглядит интереснее с точки зрения архитектурных решений, как на уровне отдельных сервисов, так и на уровне всего приложения. Если у тебя душа ни к чему не предрасположена, я бы за заработком вкатывался в веб.
> На бекенде зоопарк технологий большой, но они скорее приятные.
Какие надо знать вкатуну?
мимо
Допустим у нас есть переменная int a и мы ей присваиваем метод который возвращает int. При каждом следующем вызове этой переменной каждый раз заново обсчитывается метод или в ней уже хранится результат?
Или за бугром в проект берут отдельных SQL разработчиков?
ASP.NET Core и, желательно, Framework, ОРМ вроде EF и микро ОРМ вроде Dapper, какой-нибудь RPC фреймворк (gRPC, например), Quartz, SignalR, что-то для логирования, вроде NLog. Стоит знать SQL и иметь представление о noSQL.
Ты написал невозможную вещь. Если ты имеешь запись вида:
int a = SomeMethod();
, то переменной а ты присваиваешь результат выполнения SomeMethod(), что должно ответить на твой вопрос в ней хранится результат.
Поддерживаю. EF это хорошо, но регулярно нужно писать сложные и хорошо оптимизированные запросы на сиквеле. Даже если отдельный спец есть, твои команды и запросы он за тебя писать не будет, а займется, например, теми-же отчетами.
Ты тролль? Что за нубовопросы? нынешние джуны уже не только программировать не умеют, а уже и со студией разобраться не могут? Может сначала хотя бы гайдик по студии бы прочитал перед тем как позорится такими вопросами
Ты тупой? Ставишь bild action none, copy to iutput : do not copy,
Все! Еще может проверить bild event чисто теоретически там могут быть pre-build event команды которые его копируют, но если там ничего нет и в проперти поставишь нет и нет, тогда оно В ПРИНЦИПЕ не может копироваться в оутпут даже при всем желании
При этом запускается только нулевой runner 200 раз. Залупа какая-то. Баг ии фича?
замыкание на переменной цикла.
Замыкание. Сделай локлальную копию переменной j.
> Блять как вы будете отчеты делать?
Какие еще нахуй отчеты?
> всех новичков направляют на поддержку отчетов
Я бы нахуй вас сразу послал. Отчеты, блядь, поддерживать. Блядь, отчеты в SSRS делаются в 2 клика, в крайних случаях можно ручками запрос допилить, а поддерживать его может один человек, ну 2. Хули толку от того что новичек вместо того чтобы разбираться с инструментарием - и вникать в процесс разработки - будет отчеты вам делать, блядь.
> Или за бугром в проект берут отдельных SQL разработчиков?
За каким бугром, блядь? Даже у нас в конторе где всего 50 программистов - есть несколько отдельных хуев, что исключительно индексы теребят, да оптимизируют хранимки внутри команды разработчиков, а для отчетов, блядь, есть отдельный отдел, где отдельно обученные люди - хуячат это говно.
Пиздец. Нахуй. Отчеты.
А про SQL - хуй знает кто его там скептически относит. Это, блядь, вузовская программа так-то, все хотя бы на уровне 5НФ, индексы, хранимки и т.д знают, по крайней мере я ни разу не встречал за свой 5 летний опыт работы чела, что этого бы не знал и прошел собес.
У тебя гонка нечестная. Вот потому ты и обосрался.
1. Почему в статических методах мы обязаны использовать только статические переменные, объявленные за пределами этого метода?
(1 пик)
Я так понимаю потому что для их использования надо было бы инициализировать экземпляр класса???
2. Почему мы не можем объявить статические поля прямо в статическом методе?
3. Почему если мы объявим эти динамические поля прямо в статическом методе (2 пик), то всё будет работать? Ведь мы для x1 и x2 не создали экземпляров класса. Ведь так мы можем получить доступ к динамическим полям, верно?
Кароче я чё-то запутался, анонче.
На втором пике кста случайно static удалил перед методом.
> Почему в статических методах мы обязаны использовать только статические переменные, объявленные за пределами этого метода?
У тебя же самого на скрине ты используешь переменные внутри метода объявленные.
Ты наверное таки про поля говоришь.
> Почему мы не можем объявить статические поля прямо в статическом методе?
Это я вообще не понял. Ты хочешь типа иметь переменную, которая бы, допустим, как счетчик выступала и все время жизни программы жила?
> Почему если мы объявим эти динамические поля прямо в статическом методе (2 пик), то всё будет работать? Ведь мы для x1 и x2 не создали экземпляров класса. Ведь так мы можем получить доступ к динамическим полям, верно?
На пике 2 ты создал переменные. Это раз. Два, присвоив им значение ты создал в этот момент экземпляры(в данном случае это структура, но не суть, ValueType - тоже классы, просто со специфичным поведением). Вот кстати на моих пиках примерно что и происходит в этот момент, только у тебя вместо каста инта к моей структуре - происходит каст литерала к int, double и т.д. Думая в таком ключе это все легче воспринимается, хоть на деле все там немного сложнее работает.
Смотри, когда ты объявляешь в классе статические и не статические свойства, возникает прикол. Статические свойства хранятся в памяти в одном экземпляре, под не статические - выделяется память в каждом объекте. Если ты в не статическом методе хочешь обратиться к не статическому свойству - среде выполнения все понятно, она обращается к тому свойству, которое принадлежит объекту. Если же ты в статическом методе, который не относится ни к одному объекту, хочешь обратится к не статическому свойству - возникает неопределенность, непонятно, к свойству какого именно объекта нужно обращаться, потому такой возможности нет.
А касательно статического метода - не знаю, как конкретно это на уровне CLR делается, но среда обеспечивает то, что каждый вызов метода независим, он выполняется со своим набором переменных. Это сделано для того, чтоб, например, метод мог безопасно вызываться из разных потоков (пока не меняет статические свойства класса, конечно). Объявлять статические переменные внутри метода - джаваскрипт и источник ошибок, потому такой возможности нет. Да и непонятно, куда их запихивать, если не в стек.
вложенный класс ничем не отличается любого другого
кроме того, что он может видеть приваты внешнего класса
Что сейчас +- спрашивают на собесдованиях на мидла десктоп?
Я понимаю что тут немного десктоп разработчиков, так что хотя бы какие общие вопросы по .нет, базам данных и т. д. задают.
За свою жизнь был на трех собеседованиях, софт скиллы около нуля.
>Блядь, отчеты в SSRS делаются в 2 клика
Ты наверное писал только отчеты типа "количество проданных книг за месяц", но существуют сложные финансовые отчеты, с промежуточными итогами, группировками, огромным количеством входных параметров. Есть банковские отчеты. Километровые, иногда динамически генерируемые запросы, без углубленного знания SQL ты нахуй не нужен.
Достаточно посмотреть любой высер по сисярпу с пометкой "за час". Если есть знания в программировании и не совсем дебил, то этого будет достаточно.
А можно как-нибудь свой тип, который не имеет интерфейс IEnumerable и не имеет методов GetEnumerator и свойств Current и MoveNext сделать пригодным к foreach?
Просто суть в чем. У меня вот своя сущность образовалась, но я его сделал во FLUENT, потому что нужно было парсить токены, ну и мне казалось прикольно выглядит:
string zalupaName =
i.GoToNextNotEmpty()
.ThrowIf(x => x != zalupa)
.GoToNextNotEmpty()
.ThrowIf(x=> !x.IsName)
.Current.Value;
Но вот теперь я хочу чтобы была возможность это i - засунуть внутрь foreach, при этом мне не хочется добавлять GetEnumerator и свойство MoveNext
Книга по нетКоре 2.1 а я делаю на 3.1 там чета поменялось и теперь по другому надо, подскажите как
Вернее там все одно и тоже но я не понимаю что делает срока
defaults: new ( Controller = "Product", action = "List" }) ;
и нахуя она нужна
Вообще то foreach он поддерживает кря-типизацию
Цитата
"Для того чтобы конструкция foreach успешно компилировалась необходимо, чтобы у объекта был метод GetEnumerator(), который вернет объект с методом MoveNext() и свойством Current, а если такого метода нет, то тогда будем искать интерфейсы IEnumerable и IEnumerable<T>"
Я же использую эндпоинты, где то читал что майкрософт рекомендует юзать их а не мапроут.Чи мне приснилось что они такое рекомендуют?
https://ideone.com/fzGkAt
В каком смысле зачем? Вот посмотри на List. Он может принимать любой тип в себя и ты не будешь вынужден как в случае без дженериков кастовать то что там в листе из обжекта обратно в нужный тип.
Ну или допустим у тебя есть абстрактный репозиторий. Он должен поддерживать операцию вставки, удаления, обновления и получения значения. При этом ты хочешь иметь возможность получить именно ту сущность что тебе нужна. Ты делаешь IGenericRepository<T> wher T SomeEntity, затем имплементируешь GenericRepositoryBase<T> wher T SomeEntity и, потом, допустим, делаешь BookRepository : GenericRepositoryBase<Book> в котором только те методы которые нужны для работы с книгами делаешь, типа GetBooksByAuthor(string author). И все, у тебя BookRepository - поддерживает операции операцию вставки, удаления, обновления и получения значения именно книг, ты туда не засунешь ничего кроме объектов которые нельзя к книгам отнести. Без этого ты бы делал кучу одинаковых классов, которые бы были как один, либо городил огород из костылей, если нужно получать определенный тип.
Есть у меня страница, на ней есть выпадающий список с настройками для него вроде как лучше всего подойдет enum. Его в классе модели создать чи вынести в отдельный класс? Или использовать класс под этот список?
Бля когда по книге делаешь то понятно все, а когда что то свое придумывать то пздц туплю
> эти темы нужны вообще?
Нужны.
> я о них даже не слышал нигде
Ты вообще что-то писал?
Нужно чтобы упростить лично тебе жизнь. Вот посмотри на прикриплейд. Вот тебе хочется верить в то, что другой еблан в команде не поступит вот так вот как с ArrayList? Мне вот спокойнее если еще на этапе компиляции его говно отфутболят и мне не нужно будет в моем коде проверять, не запихнули ли в список, который должен быть списком пользователей - залупу.
> Ребяты, где обычно создают перечисления в asp net core?
В базе данных.
Создаешь таблицу: Heroes в ней ID, DisplayName, ... что-то еще. Отдаешь клиенту JSON с массивчиком этих Heroes. Не даешь публичного апи для изменения.
Да, кажется оверхедом, только вот на деле, когда это будет в проде - проще сделать один Insert или Delete в базу, чем лезть в код проекта, делать там изменения, перекомпелировать и заливать на сервер новую версию проекта, ебаться с остановкой твоего сайта ну и т.д. Опять же, ты можешь закешировать результат и обновлять только при вставке-удалении, чтобы не теребить базу.
Эммм ваще не понял. Таблица без модели?
Это у меня как бы настройки, в зависимости от настроек будет разное действие при заходе юзера.
Или вот так как на пикриле?
Но бомбочку с нуллом все равно можно сделать, если тип списка ссылочный.
Смотри на примере консольного приложения.
Тут я вместо базы CSV использую, а вместо нормальных хендлеров - обычный словарик с лямбдами, но суть тебе должна стать ясна, если ты немного задумаешься о том как это работает.
Ты можешь так вот просто отдать на клиент новые значения и т.д. При этом чутка заморочившись - можно в рантайме добавлять обработчики, сделав приватное апи с конструированием обработчика, и не ебашась с перекомпиляцией, остановкой контейнера/сервера и вообще из-за того что внезапно вы поняли что что-то не нужно, а что-то нужно в опциях на какой-то страничке.
Удобно - пиздец.
P.S.Конечно, ты можешь не ебаться с этим и просто сделать у себя класс Options который отдает константные значения и затем гвоздями прибить обработку того что от клиента пришло. А можешь вообще просто enum. А можешь - вообще на клиенте опции сделать и как-то обрабатывать то что от клиента приходит, опять же прибив все гвоздями. Другое дело, что вот тебе самому-то хочется каждый раз лезть в код и правки делать, если по сути тебе нужно просто новую опцию добавить, да новый обработчик сделать?
P.P.S.Конечно, если у тебя там логика работы не предполагает что когда-нибудь эти значения изменятся, то можно не париться и сделать самым простым для тебя способом.
А есть языки без фреймворков?
Бля пиздец как сложно. Мне наверное это все не нужно просто.
По сути от enum будет зависеть результат выполнения. Ничего приходить не будет же, все значения уже известны.
На каждый enum свой
public IActionResult Index()
{
return View();
}
Я вообще думал так сделать: Вот юзер создает модель эту назовем ее Aby, пишем модель в БД. У каждой модели прописан URL, и при переходе на этот урл происходит действие, например показ данных модели либо редирект либо пустая страница. В БД значение этой модели меняться не будут.будут но только руками по этому их я хотел как тоеще хз как хранить все время в памяти для быстроты доступа так как время обработки здесь самый главный параметр, если время обработки 0.5 сек то нахуй такое надо ваще. Ну вот юзер переходит на страницу, берется модель и передается в метод который сравнивает все данные и решает что делать, показать юзеру страницу или сделать редирект.
Вроде же простая задача а ебни как с самолетом(
В целом верно писали, что такого рода перечисление, обычно, в базе данных держат. Просто еще одна табличка с Id и значением, которая может быть связана с таблицей твоих имен на уровне БД. Но если тебе не охота, нормальных подход для енумераций - разместить их в как можно менее доступном неймспейсе, и как можно ближе к класам, где применяется. Конкретно это будет зависеть от твоей архитектуры.
Пример: если у тебя онион архитектура, и на уровне базы данных супергерои просто хранятся как инты, их реальное значение не играет нигде, кроме как на юайке для пользователя, этот enum стоит разместить где-то в районе юзер интерфейс проекта. Если ситуация обратная, и оно гдето в моделях есть - enum отправляется в домен, где все заинтересованніе доступ будут иметь.
Если у тебя MVC с одним проектом - особо не повыкаблучиваешься. Но и тут тоже вполне сыграет это правило: если оно только вместе с этой моделью используется, стоит разместить enum в одном с ней неймспейсе, можно (но не нужно) даже в одном файле. Если у тебя все модели вместе в одной папке - тоже, кинуть в ту же папку/нейспейс. Если же enum используется во многих моделях, и у тебя есть какая-то иерархия типа [Models].[Top].[Kek.cs] она может отправиться в [Models].[MyEnum.cs], или можно выделить отдельный неймспейс для этого: [Models].[Enums].[MyEnum.cs], если [Models] начинает походить на помойку.
Сам двигай!
А в остальном - все ведь хорошо. Версии клепаются, фреймворки мутятся. Драма и живые обсуждения возникают при кризисах, а тут лишь вопросики вкатунов.
ASM и C ещё более мертвы судя по активности обсуждения. Хотя весь тот мировой колосс, на спине которого резвятся обезьянки, построен именно на этих языках.
>>1957036
дополню этого. Помимо того, что он высрал еще нужно знать:
- Строение .NET - CRM/CLS/SDK etc.;
- Концепцию #, как ООП языка - иерархия типов, касты, модификаторы, ключенвые слова, как разложить сахар в нативный язык;
- Юнит тесты. Без них никуда;
- Знать дискретку и базовые законы логики. Без них - обосрешься на первов вопросе о принадлежностях одного к другому;
- Знать паттерны - какие бывают, зачем нужны;
- Знать про такие вещи, как код стайл, алиасы твоей IDE, SOLID, KISS, DRY, etc.
- Алгоритмы поиска и сортировки - какие бывают, зачем и как;
Дальше от специфики вката:
- Unity? Тригонометрию, геометрию, аэродинамику (в идеале), Unity 3D естественно
- Веб? Версточку (sass, less, bootstrap/material/ant), native JS, один из популярных фреймворков - React/V/Angular (жетально и TS и JS, понимать что такое TS и зачем он нужен, полезешь в реакт - redux, ангуляр - rjsx). Так же - знание веб технологий - сокеты, порты, TCP/ID, UDP, работа браузера, REST (жетально еще SOAP). Начали спрашивать по CI/CD, Docker, Jenkins (если фулстеки) - зачем нужны, что и как. Веб инструменты - postman, tpcview, другие тулзы для работы с клиентской стороной.
- Десктоп - XML, MVVM, WPF, WinForms (смотря какая глина будет). Win32 also, процедуры. Если полезешь в кросплатформ - демоны, unix, какой ни будь не попсовый релиз lunix (про убунту или дебиан лучше даже не вспоминай - arch, kali твой выбор). В этой среде я плаваю, может кто чего дополнит;
- Мобилки - Xamarin.
И последнее - база в матане решает. Все глиномесы с фронта глотают престный калл, когда дело касается инженерных задач с вычислениями.
Все по верхам, хочешь вкатиться - копай глубоко. Типа как реализовать собственную коллекцию хотя бы с энумератором или как написать свой мьютекс/семафор.
Дерзай
Тут сидят успешные специалисты, которым не до праздной болтовни. Извини, нет времени подробно расписывать.
Пиздецки как много воды.
Метанит лучше всего подходит для вката.
Если что то не понятно то можно подсмотреть в любой книге.
Ну это имхо
>Метанит
Соглашусь. Там довольно плотно инфа льётся. Сам через него вкатывался, хотя если шарп первый язык, то метанит не подойдёт. Всё таки базовые концепции он не особо обкашливает.
Ну и если своих задач нет и не можешь придумать, то нужен задачник.
>хотя если шарп первый язык, то метанит не подойдёт.
Ну да это я не учел. так то я был уже знаком с базовыми понятиями и мне нужен был только синтаксис.
Вот треды таски асинк авейт там ппц плохо объясняются, пришлось и читать книги и видео смотреть и до то до конца не понимаю эту тему.
там еще домашки не плохие. Как-то на этом метаинте прочитаешь и забудешь все сразу, а тут автор прям прожевывает так, чтобы ты все понял
Ну стоит читать тогда. В целом нет какого-то особо выдающегося учебника для начинающих (кроме Рихтера, конечно же). Все они про одно и то же. Тут важно, чтобы процесс чтения сопровождался практикой, поиском альтернативных объяснений сложно понимаемых моментов и т.п.
*Имел ввиду, что Рихтер конечно же не подходит для начинающего (после 3-5 лет практики можно присмотреться, если ещё будет актуально).
>Васильев А.Н.
>на рузске
даже влень гуглить это говно, бери Тролсена ангельском и не еби мозги
>бери Тролсена ангельском
Не стоит пытаться одновременно угнаться за двумя зайцами: и учить кодинг и учить английский.
Делая так, как советует этот анон, ты будешь читать очень медленно, и многое будешь не понимать, и скорее всего дропнешь.
Английский сам вынужденно придёт, когда нужно будет читать специфические вещи в доках.
зачем ты советуешь изучение на рузке, если все сводится к аутстафу за бугор. Нынешнее ойти - это работа на забугорного барина, а ему твое рузке нахуй не нужно. И когда тебя будут продавать галере, будут собесить только на английском и только с английскими терминами.
Лайт бонус - если ты в своей первой конторе покажешь, что знаешь ангельский, то могут закрыть глаза на какие то пробелы в знаниях, т.к. тебя будет дешевле продать.
Я вообще не понимаю нахуй разработчику общаться с заказчиком? ПМ нахуя тогда нужен?
А программист тут при чем, лол?
Программист - пишет программы. Не его работа общаться с заказчиком, не его работа писать текст, его работа, внезапно, писать программы. Все. Блядь.
Я просто хуею с дуры. А если на китайского заказчика работать будешь - будешь китайский учить? А заказчика из испании, который не хочет на английском общаться? Пиздец, блядь. Дура, нахуй.
Мне вот интересно даже. А если бы ты был игровым разработчиком. Ты бы советовал всем кто кодить в геймдеве - учиться рисовать и моделить. Ну а хули - игр без графики нет, ты же не текстовую РПГ делать будешь ЛОЛ. Пиздец. Блядь. Нахуй.
За 5 лет работы в ни разу не пришлось с кем-то там общаться, а весь текст переводили специально обученные люди. Я надеюсь хоть тебе на галере доплачивают за то что ты совмещаешь с работой программиста работу переводчика и менеджера, иначе ты тот еще лох.
>За 5 лет работы
я не знаю, где ты там работаешь, но все, что ты пишешь - это бизнес. Бизнес, за бугром. И я уже писал про аутстаф, ты видимо слов таких не знаешь, или работаешь на закрытом рынке за хуй с солью
>>1959331
если ты думаешь, что дев в 2к20 и 2к00 это тоже самое, то ты сильно ошибаешься. Аутисты не проходят фильтрацию, т.к. кодика писать уже недостаточно и многие реально скиловые тонут на софт скилах. Это правда нынешнего ойти. Хочешь работать и зарабатывать? Ты себе и апиху на .NET пиши, ты и фронт ковыряй, ты и CI/CD настраивай и все это тестируй. Нужно перекашлять вопросы? Заказчик онлайн - звони.
>Заказчик онлайн - звони.
Бля как можно доверять апездалу разработчику такое? А если я еблан такой позвоню заказчику и скажу что на хую вертел его желания так как на его говне такое сделать не реально а если он все таки хочет получить нериальное то нужно все полностью переписать и это нужно делать пол года.
Заказчик психанет и разорвет контракт, в итоге из за еблана такой проеб, я то работуда и не факт, я же ничего плохого не сделал, просто ввел заказчика вкурс дела потеряю а контора дохуя бабла.
я про аутстаф изначально и писал. Если ты на внутренний рынок работаешь, ты себя считаешь лучше аутстаф работника? Я бы на твоем месте так не горячился
>>1959353
ты вообще не понимаешь, как работает эта система, раз пишешь такую хуйню. По поводу длинного языка или каких либо своих убеждений заказчику - тебя убирают с проекта, ставят нового. Пизданул слишком много или заказчик слетел - от выговора до занесения в блек листы.
И я читаю вашу писанину и понимаю, в какой бездне ойти в 2к21. Срам
Нашел, это говно 10Гб весит
Глянь ulearn, там есть мини-курс по линку с задачками
на каком языке можно писать что-то крупное без фреймворков?
А если что-то не выложено ни на рутрекер, ни в другие закрома, то это 100% не достойно чтения.
libgen.rs
bool TryFind(..., out T result)? В стандартной либе и во многих других кастомных либах постоянно такое вижу.
Хотя более логичным выглядит шаблон типа:
T? TryFind(...)
Потому что в случае возврата Nullable<T> нет нужны даже в случае неудачи что-то записывать в result. В случае с double для этих целей есть NaN, но для int или кастомных структур и классов нет значения, явно указывающего на отсутствие результата. При в первом случае возможно ошибочное использование result'а даже если TryFind вернул false.
В твоём случае перечисления не делаются.
Делаешь абстрактный класс AHero, от него уже наследуются 4 реализации конкретных героев HerCheb и т.п.
> T? TryFind(...)
Потому что Null - может быть валидным значением в каком-либо апи.
Допустим, в апи при парсинге HTML - в случае отсутствия кук - возвращаем Null. Вот и что по твоему логичнее - вернуть Null в обоих случаях, если весь запрос невалиден и если куки в запросе нет или таки ответить, что запрос валиден, но куки в нем нет и вернуть Null из в качестве результата.
Там правильно написали про то, что null тоже может быть результатом.
Еще есть такой момент, что null`able пытаются поменьше использовать, чтоб избегать засилья if для постоянной проверки на null, и исключений, когда забудешь/что-то поменяется.
А еще мне нравится красота выражения
if(peka.TryGetGreka(out var greka)){}
по сравнению с
var greka = peka.GetGreka();
if (greka is not null){}
И как же ее найти то ля? И как узнать где знаний хватает а где нет?
Вот к примеру из описания вакансии.
>Уверенные знания С# и .NET Framework/Core
Вот на сколько уверенное? Как проверить уверенное чи нет?
>Навыки разработки кросс-браузерных Javascript/HTML/CSS приложений с синхронным/асинхронным клиент-серверным взаимодействием
Ну такова нет, но вакансия джуна то подразумевает что он нихуя не разрабатывал же.
Корочи как определить что еще нужно доучивать? Во всех вакансиях требования разные, учить asp net core wpf html sql css js react angular и еще дохуя умный слов можно год и в итоге ничего не выучить.
На самом деле большинство спецов в тех конторах, куда ты хотел бы устроиться, знают очень мало и просто среднеудачливые самозванцы, в лучшем случае пришедшие после курсов или какого-то самовката по едва осиленному мануалу типа C# за 14 часов на ютубе.
Единственное, что тебя отделяет от должности - это собеседование. При этом кадровики технически не грамотны и не способны тебя отсеять по незнанию каких то языков или технологий. Технические специалисты просто не умеют собеседовать, хотя бы даже в силу отсутствия достаточного опыта. Но даже и опыт в этом деле не особо помогает. Например препод в ВУЗе в целом не дурак, знает свой предмет, имеет колоссальный опыт приёма экзаменов, но его всё равно студенты постоянно наёбывают и выдают себя за знающих. С собеседовании в конторах всё НАМНОГО хуже.
Также важно понимать, что на самом деле глубокие и обширные значения в работе не нужны, потому что ты не компилятор и не ОС пишешь, а приблуду для какого-то веб-говна с привычным для данной области крайне низким качеством (всё тормозит, страница весит 200 Мб, на 100+ комментах всё зависает даже на топовом i9 и т.п.). В принципе качество современного веба и сопутствующих сервисов наглядно даёт понимание о среднем уровне современного программиста.
Ну бля все равно надо для себя хотя бы поставить какую либо планку после который сам себе смогу сказать типо вот все пора работу искать.
Так то я ваще не хотел бы прикасается к вебу и особенно к фронтэнду, но таких вакансий большенство(
все дело в семантике
например обращаясь к базе данных это "дай мне набор данных" можно вернуть null, что будет означать "нет набора данных".
А вот если у тебя словарик какой-то, в который ты что-то кладешь что-то и null если в данный момент ничего другого положить не можешь. Можно было бы и не класть null, но само наличие значения по ключу может означать, что данный ключ обработан. Заводить тип NoValue? делать дополнительно список ключей "для них мы работали, но не клали в словарь null мы не кладем? да проще использовать bool TryGet
Стоит ли для начала быстренько просмотреть ролики, объясняющие основы ASP.NET MVC, чтобы перекат был не такой болезненный?
>обращаясь к базе данных это "дай мне набор данных" можно вернуть null
Только в шарпе для этого зачем-то завезли ещё один специальный нулл, который System.DBNull, и который нихуя не равен обычному нуллу.
не путай "null как значение колонки в бд" и null, как возврат из метода (вместо пустого массива) в языке программирования.
блин нельзя посты редактировать
поясню зачем завезли
В ADO.NET например есть метод ExecuteScalar(). И он может вернуть null. И как ты отличишь null как "нет данных вообще" от "данные есть, но их значение null". Вот DBNull и позволяет их отличать.
знания типа "if else/for/switch/while" достаточно будет для вката? Завод же, хули
Боюсь знание шарпа даже на "очень харашо" не дает опыта мороки с хранимыми процедурами и интеграции всяких там PDM T-Flex.
Ну вот в данном случае уж как раз подошел бы шаблон bool TryExecuteScalar(out string result) или что-то подобное. Вместо этого нагородили очередной новый не имеющий аналогов нулл и затащили его вообще во все методы, и теперь вместо одной проверки на нулл получаем две.
Может быть. Очевидно они решали проблему XY
Было небось так
1 тааак. у нас есть ExecuteReader, но что если нам нужно одно значение? пусть будет метод ExecuteScalar
2 он может вернуть, что угодно...значит пусть возвращает object
3 так и null может быть значением...значит сделаем NullObject чтобы отличать
И если там кто-то и предложил " а может bool TryExecute", то с ним поступили как на всем известной картинке
Была бы открытая разработка, то им бы народ ткнул сразу что IReadOnlyList очевиден и что не должен HttpClient кидать OperationCanceledException на таймаут, что метафора "запрос был отменен (внутренним механизмом)" понятна, но теряется контекст причины отмены. И что надо бы что-то вроде await?, а не ConfigureAwait(false), и вообще не нужно void, а нужен Void, чтобы в будущем не было Task и Task<T>, а был только Task<T>, и что null safety нужен сразу, а не потом...и так далее
Зачем после 3-5 лет Рихтер? Рихтер именно для нуля лет опыта знать нужно, чтобы собесы проходить. И актуальность вообще не решает. Когда тебя спрашиют, как что-то работает - они хотят услышать не как оно в .net 5 работает, а как в Рихтере с Троелсеном написано.
Ага, любой леткод бери - и решай все задачи через linq
Вот например, есть объект Circle. У него есть свойство Radius и приватное поле radius, через который определяются все остальные параметры.
Но вот например, Diameter или Area. Тоже наверное свойства, потому что в принципе мы могли бы использовать их вместо радиуса, и ничего бы не поменялось, всё просто считалось бы обратным способом, это лишь детали реализации. Но с другой стороны, это вычисляемые поля. И в данном случае они вычисляется быстро, но для более сложных объектов, вычисления могут быть не быстрыми, а пользователь может быть введён в заблуждение, что типа раз это свойство, то оно почти сразу доступно. Но если же выбирать метод или свойство по объёму вычислений, то это уже раскрытие деталей реализации.
У тебя в голове какой то оверинжиниринг. Пользовательне будет введен в заблуждение, т.к. пользователю вообще не известно что у фигуры на экране есть какие то свойства. Пользователь всегда условно туп. делай ка кполучится и не думай о производительности. Скорее всего твоя программа умрет не добравшись до беты. Если не умрет до беты. то загнется в бесконечной бете с кучей переделок и вся твоя изначальная архитектура пойдет по пизде. Если случится чудо и ты доберешся до релиза, то вот тогда уже смотрик ак оно у тебя выглдит и пили тз под версию 2.0
Если у тебя это отдельные классы - не вижу препятствий делать как подходит для класса - через свойство.
Если у тебя некая сложная иерархия и реалистичны случаи, когда ты будешь получать свою Area у наследника через интегрирование - делай методами.
Если не уверен - тоже делай методами, ведь мне, как потребителю твоей библиотеки, не особо важно, буду ли я свойством получать данные, или методом. Я исхожу из того, что ты сделал как нужно, а при какой-нибудь сериализации я себе в ногу не выстрелю.
С точки зрения чистого кода, конкретно к твоей ситуации. У тебя есть класс Circle. У него есть 1 поле только для чтения Radius. Все. Больше ничего у него нет и менять поле никак нельзя.
Затем, у тебя есть отдельный класс: DiameterCalculator который будет рассчитывать диаметр кругов. У него метод CalculateDiameter(Circle c) => c.Radius*2. Это конечно рофельный пример, тебе проще самому в нужном месте рассчитать, либо сделать метод расширения, если так уж надо.
Потому у тебя может появиться абстрактный класс: AreaCalculatorBase<T> where T : IShape, с методом CalclulateArea(T shape) и от него уже CircleAreaCalculator : AreaCalculatorBase<Circle>.
Суть. Круг изначально ничего не знает ни о каких там своих пощадях. Нахуя ему вообще это знать? НО, если тебе потом понадобится такой вот круг, который бы мог вычислять свою площадь - ты просто делаешь фассадик и получаешь тот функционал что тебе нужен.
> как обрабатывать такое исключение?
В каче пишешь что нет сваязи с базой. В файнли закрываешь соеденение.
Но у меня должны возвращаться данные, если я не сделаю ретурн в каче я получаю ошибку компиляции а я не могу возвратить никакие данные потому что нет связи с базой, что делать?
Не понял, я же спросил как правильно написать, что за тупой ответ, вы все тут такие остроумные?
Правильно напсиать кетч так как сказано выше. если тебе этот вариант не подходит, потому что другой твой код не компилится,то это уже проблема твоего другого кода.
Универсальное правило: если исключения ожидаемы (что не очень хороший стиль для твоего кода, и случается, обычно, при использовании сторонних библиотек) - напиши свой трайкетч, а возвращай что-то вроде пустой колекции или модели со значением свойств по умолчанию. Если исключения не ожидаемы (к чему обычно относят потерю соединения с базой) - ничего не делай, и рассчитывай на глобальный обработчик исключений, который покажет юзеру сообщение, что что-то пошло не так, а ты по логам сможешь легко понять, что и где пошло не так.
Слава господи, адекват в треде,
то-есть в каче что, вызвать логгер, и бросить не имплементированное исключение которое поймает глобальный обработчик?
Как же заебали вкатывальщики, которые сначала задают тупые вопросы, потом не понимают ответа, и вместо того, чтоб вежливо уточнить, начинают называть окружающих дебилами, хотя именно они чего-то не понимают.
Вообще не использовать трай-кетч. Обычно настраивают глобальное логирование, которое и пишет в лог необработанное исключение. Но если у тебя простая хуйня для обучения - я бы с глобальным логом не заморачивался - кто их читать будет. Просто знай, что такое есть, а трай-кетч в твоем случае не используй.
Понял, это в целом полностью перекликается с ответами со стакОверфлов где писали что исключений нужно ловить только когда ты можешь что-то с ними сделать, спасибо за разъяснение этого принципа более детально!
Тебе написали понятными словами понятный порядок действий. Код за тебя никто писать не будет. Если нужен код, то давай контакты. Сумму за работу уточним.
Школьник успокойся ты уже обосрался и тебя уже послали, дальнейших действий не требуется, съеби отсюда
На метаните написано что нужно добавить ADO.NET Entity Data Model
Но как я понял это уже устаревшая статья.
Как мне такое в консольном net core 3.1 ef приложении сделать?
Кстати, это пример того что у меня есть в продакшн коде. Как же хорошо жить без кодревью ваших.
Все разобрался.
PM> Scaffold-DbContext "Server=(localdb)\MSSQLLocalDB;Database=SPTest;Trusted_Connection=True;MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Нужно было убрать \ так как в консоле не экранинуются символы.
Это интересный подход, и я даже пробовал несколько раз подобным образом проектировать классы, но как-то в итоге жизнеспособно не получалось. В стандартной либе, насколько я могу судить, так не делают почему-то, и я по дефолту всё же пытаюсь подражать именно ей. Но было бы интересно увидеть небольшой живой проект, где так пишут.
Ну что проще - делать миллион классов типа
StringStringDictionary, IntStringDictionary, GovnoJopaDictionary и переопределять там все методы, или просто в одну строчку сразу писать Dictionary<string, string>?
эти миллион классов все равно же надо прописывать, разве нет? А потом можно их вложить в одну коллекцию, которая принимает абстрактный класс-батю
Нет конечно(ну или я не понял что ты имеешь в виду).
Я просто беру и пишу вообще на ровном месте var a = new Dictionary<string , int>() и могу сразу использовать потому что компилятор сам все сгенерирует.
попробую иначе. Допустим у меня есть дохуя однотипных классов - наследников от одного абстрактного класса. Я могу также писать на ровном месте List<Батя> и пихать в него любой из наследников, нежели создавать обобщенный класс
чем твой пример отличается глобально от моего?
Ну класс List и есть щаблонный класс, если бы он был не шаблонным, тебе пришлось бы делать специальный BatyaList. А потом ты захочешь список из типа инт, а инт это ну вообще не батя, придется писать новый класс.
Ты можешь возразить, что абсолютно все является наследником класса object - значит надо сразу делать класс List для обжекта. И действительно, ты можешь сделать класс работающий с типом object, и он будет работать с абсолютно любым классом.
Но:
1. Тебе приедтся постоянно прописывать касты. Типа ((Batya)myList[3]).PosmotretVShel();
Не удобно же.
2. Ты не можешь гарантировать, что все объекты в списке будут одного типа. Я смогу получается и строку и число в список запихать легко. Вот принимает какая-то функция на вход какой-то список, и хуй вообще знает а что за список ей нужен. Придется в описании функции писать, постоянно туда смотретт. Более того, я могу случайно что-то не то положить список и компилятор меня не предупредит, а потом хуй знает как эту ошибку в большом проекте искать.
>Вот принимает какая-то функция на вход какой-то список, и хуй вообще знает а что за список ей нужен. Придется в описании функции писать, постоянно туда смотретт.
если я сделаю так, ты же не сможешь дать неправильный список
> В стандартной либе, насколько я могу судить, так не делают почему-то,
Потому что изначально стандартная либа писалась впопыхах и нужно было с одной стороны быстродействие, с другой чтобы был сахарок и все фишки жавы и даже больше. Потому там статик через статик, потому там стримы кидают исключение вместо того чтобы просто давать тебе интерфейсы отдельный для чтения, отдельный для записи и вообще, с точки зрения именно что чистоты кода - там такое себе.
По сути - современный кор/net5 как-бы и стараетлся наконец в архитектуру. Посмотри код кестрела, например или примеры архитектуры которые на гитхабе залиты от самих мелкомягких. Классы в пару строчек, всюду адептеры да фассады. Красота с точки зрения чистоты. Разобраться в этом коде можно за полчаса.
Когда ты откроешь исходники старого дотнета - ты охуеешь от того как там хуячат. Ну, хули, деды, они могли 4к строк за полчаса выдать, потом накатить и еще столько же выдать и так 12 часов в день.
А что не так, лол?
Совершенно верно, потому что List -
и есть дженерик
Вот попробуй сделать свой класс который делает все тоже самое что и лист в качестве упражния.
Ты начнешь писать
class MyList
{
}
Так что там ему нужно? Надо чтобы можно было добавлять, получать по индексу, и удалять элеиенты, да?
Ну хорошо попробуем добавление элементво сделать
class MyList
{
public void Add(.....)
{
}
}
Как функцию Add написать, какие у нее параметры должны быть? Она должна принимать элемент... какой? Не понятно. Обжект что ли? Тогда проблемы описанные мноц выше актуальны.
А что если сделать так...
class MyList<T>
{
T[] data;
public void Add(T element)
{
//это оставляю тебе
}
}
Вот это другое дело!
Совершенно верно, потому что List -
и есть дженерик
Вот попробуй сделать свой класс который делает все тоже самое что и лист в качестве упражния.
Ты начнешь писать
class MyList
{
}
Так что там ему нужно? Надо чтобы можно было добавлять, получать по индексу, и удалять элеиенты, да?
Ну хорошо попробуем добавление элементво сделать
class MyList
{
public void Add(.....)
{
}
}
Как функцию Add написать, какие у нее параметры должны быть? Она должна принимать элемент... какой? Не понятно. Обжект что ли? Тогда проблемы описанные мноц выше актуальны.
А что если сделать так...
class MyList<T>
{
T[] data;
public void Add(T element)
{
//это оставляю тебе
}
}
Вот это другое дело!
Насколько ты нуфаг? Си шарп твой первый язык?
Вообще практика - это самое главное. Напиши сам какую-то программу - подумай, что ты мог бы сделать с учетом твоих знаний? Тогда многое поймешь.
В частности на странице видео с ютуба хочу погружать коменты пока все не прогрузятся. Нужно прокрутить, подождать потом снова прокрутить. Да я пробовал примеры 7летней давности с SOF, не работает
Хочу парсить коменты, в get не умею, а апи только 10к запросов что для меня очень мало.
Такая же бида, только у меня все эпичнее. Два года быдлокодил на хуюньке, порвал с тянкой, впал в депрессию. Щас вот тока оправился и решил вкатиться обратно, без работы, скоро от голода сдохну, но мне не страшно. От юнити просто блевать тянет. Делаю вывод, что чем больше обдуманно изучаешь тему разработки, тем больше хейтишь юнити-хуюти. Вот дотнет вообще балдежный, настолько в нем изящно сделана и продумана каждая деталь, просто зубришь и все, без всяких ебаных подводных камней. И чисто если рассудить, то количество говнокода должно быть в разы меньше, потому что нет уебков, котоыре вкатились ради "ХОЧУ КАК ГОДЗИМА ДЕЛАТЬ ВЕЛИКИ ИГРЫ", а по факту пилят обоссаный код, за который нужно вешать нахуй и четвертовать. В общем ебал в рот юнити, дотнет ня.
1) Что понимается под "знанием .NET Framework/.NET Core/.NET"? Все библиотеки, что входят туда, вроде ASP.NET/ADO.NET/WPF/LINQ и т.д. или просто понимание того, как платформа функционирует, в чём её преимущества, etc.
2) Только что дочитал главу с делегатами и интерфейсами, выглядит всё довольно сложно, хотя большая часть понятна, но мне как-то контринтуитивно их применение, как заставить себя их использовать и видеть ситуации в которых они важны?
3) Насколько важно знание паттернов проектирования и рефакторинга в контексте джуниорской/стажёрской вакансии? Стоит ли это всё учить или не стоит сейчас забивать голову?
4) И наконец что конкретно понимается под "чистым" кодом? Я вот по дефолту делаю понятные имена переменных/методов, комменты добавляю на английском, разбиваю слишком длинный метод на несколько, это можно назвать "чистым кодом" хотя бы на начальном уровне?
1).NET Framework - старое УГ только для винды, .NET Core - сексуальное воплощение божией силы работающее везде где можно, .NET - по сути тот же неткор, просто майкрософт любят ебаться с ребрендингом. У меня лично довольно дохуя времени ушло, чтобы разобраться в сортах говна .NET.
ASP.NET - сайтики, есть еще core версия. ADO.NET для бд, старое говно. WPF окошки для винды, лучше начни с WinForms. LINQ - способ обращения с коллекциями в различных извращенных формах - функционально или SQL форме.
2)Задачи появятся в контексте проекта. Придумай себе проект и трахайся с ним, читай статьи. Пока что тебе не понятно нахуя это надо, потом само поймется, это нормально. Но вообще чистые delegate используются редко на моей практике, delegate нужен лишь для существования эвентов
3)Пока ты духджун, знать скорей всего не надо. Поймешь на практике.
4)Чистый код, это когда тебя выебали во все щели на первых ревью, а затем еще и твою мать, твою собаку и кота за лишние пустые строки в коде. Тогда ты научишься делать "чистый код"
Надо добавить - сколько ты не старайся, но тебя выебут на первых ревью, поэтому жопу готовь, но стараться все равно нужно, чтобы хотя бы взяли на работу.
>>1962501
Спасибо за расписанный ответ анон.
>NET Framework - старое УГ только для винды, .NET Core - сексуальное воплощение божией силы работающее везде где можно, .NET - по сути тот же неткор, просто майкрософт любят ебаться с ребрендингом. У меня лично довольно дохуя времени ушло, чтобы разобраться в сортах говна .NET.
ASP.NET - сайтики, есть еще core версия. ADO.NET для бд, старое говно. WPF окошки для винды, лучше начни с WinForms. LINQ - способ обращения с коллекциями в различных извращенных формах - функционально или SQL форме.
Да, это я уже понял, я вот только не понял, это всё и понимается под знанием условного .NET? Просто я в вакансиях видел одновременно владение, скажем .NET Framewrok и ADO.NET, в таком случае нелогично выходит, потому что второе входит в первое.
>Задачи появятся в контексте проекта. Придумай себе проект и трахайся с ним, читай статьи. Пока что тебе не понятно нахуя это надо, потом само поймется, это нормально. Но вообще чистые delegate используются редко на моей практике, delegate нужен лишь для существования эвентов
Т.е. если я напишу на тестовом реализацию чего-то условного не листом объектов, а простым массивом, то не будет слишком сильно резать глаза и быть неправильным решением?
>)Чистый код, это когда тебя выебали во все щели на первых ревью, а затем еще и твою мать, твою собаку и кота за лишние пустые строки в коде. Тогда ты научишься делать "чистый код"
>лишние пустые строки
а разве пустой строкой не надо разграничивать блоки кода для повышения читабельности? Я вот всегда инициализацию данных отделяю строкой от остального функционала.
>Надо добавить - сколько ты не старайся, но тебя выебут на первых ревью, поэтому жопу готовь, но стараться все равно нужно, чтобы хотя бы взяли на работу.
Ну за счёт жопы я не боюсь, а вот чтобы взяли всё же было неплохо, ибо в условные пол-месяца/месяц/полтора если я не найду работу то кушать таки будет нечего.
Скачай курс скиллбокса по шарпу с торрента. Там как раз неплохая база для полных нулей
Чувствую себя будто только научился стрелять и тут сразу же бросили в бой. Даже не знаем с чего начать.
Я вообще не ебу что кодить.
Класс CitizenAccount с полями name, surname, age, occupation etc?
Это еще кучу реквестов хендлить из других сервисов, самому реквесты высылать, пиздец программированию так и учатся?
Конечно тебе нужен класс жителя, как ты с базой будешь работать без него? Нативный squery фигачить будешь?
Насчет сервисов я вообще не понял, из пикрила не вытекает необходимость использования каких-то сторонних сервисов, там есть только какие-то оплаты, и насколько я понимаю тебе не нужно делать именно САМУ возможность оплат, КАК МНЕ КАЖЕТСЯ, тебе нужно просто создать что-то типа записной книжки с триггерами что бы пользователю напоминать что и когда оплачивать, и что и когда он уже оплатил, как запланированные дела только с оплатами ну это ОПЯТЬ ТАКИ ПО МОЕМУ ПРЕДПОЛОЖЕНИЮ СУДЯ ИЗ КОНТЕКСТА, по одной картинке ТЗ сложно понять,
А поиск других пользователей и чат так это вообще тривиальная задача, я даже не поверю если ты мне скажешь что вы такое уже не делали на курсе,
в общем-то все задания очень тривиальные, типа get/post как джун на работе ты скорее всего 99% времени будешь должен щелкать именно такие задачи
Надо было сразу всю схему показать
Больше всего боюсь именно за обработку входящих запросов из других сервисов
Почитать бы что нибудь про это сразу целиком, гугл выдает только кусками и не понятно как это все вместе склеивать
Не понимаю в чем сложность, они что будут тебе в каком-то специфическом формате запросы отправлять? Не в Джейсоне?
ЛОЛ, повезло чуваку на морге, принял труп, написал что он здох, продолжил чилить...
Что за курс кстати?
Чет типа такого. Без остальной информации таки сложно ванговать.
(раньше ставил на пробу годот, потом удалил, и теперь у меня не работает nuget
То есть создаю новый проект, открываю nuget, выбираю либу, нажимаю установить - пишет вот это все снизу
Старые проекты где уже подключены библиотеки - тоже теперь не компилируются, показывает восклицательный знак на всех либах и ничего не дает с ними делать.
Вангую, тебе просто нужно постирать записи об годоте в нугет файлах и еще может в проектнейм.sln (открой блокнотом).
пкм-delete. Я из гитхаба компилировал
>>1963455
>Вангую, тебе просто нужно постирать записи об годоте в нугет файлах и еще может в проектнейм.sln (открой блокнотом).
А как они туда попадают? Проект новый
>>1963457
так не должна, это вообще никак не связано, просто годот где-то насрал (в Tools -> Options -> Nuget Package Manager -> Package Source ничего нет кроме дефолтного адреса)
>пкм-delete. Я из гитхаба компилировал
солюшины подтягивают параметры нугета для компиляции, а ты свой нугет распердолил, вот у тебя в солюшинах и сыпятся ошибки потому что он не может нормально подтянуть зависимости из-за наебнувшигося нугета, лечится заменой нугета из бекапа или переустановкой студии, ничего страшного
> годот где-то насрал
Шо аж ты со своей вендаколяски свалился, на потеху всему опенсорц сообществу.
>бекапа или переустановкой студии, ничего страшного
Переустановил - не помогло, все равно откуда-то блядь оно пытается такщить
Вот на пикче источники nuget - тут ничего нет
Даже представлять не хочу зачем это нужно, но теоретически ты можешь преобразить png в векторный файл и запихнуть кнопку туда
Какой это дает профит? Как его юзать? где и когда?
При том если число меньше 3.9 то результат будет правильным.
ну дык флоаты же
они как и даблы в двоичном выражении выражаются плохо, то есть с погрешностью, вот и получаются разные результаты.
Майкрософт предлагают использовать decimal тип, и видимо это рабочее решение, но ведь это непрактично.
Вообще, как часто может возникнуть ошибка на почве подобной арифметики, как следует ее избегать?
Если не работаешь с деньгами, то можешь всю жизнь и не вспомнить про эту особенность, так как накапливаемая погрешность мала
А обычные случаи, где после потери точности ты пытаешься сравнивать через == , студия (или решарпер я хз) подсветят
когда программист работающий с деньгами начинает вот так оптимизировать, то это приводит к тому, что оптимизируют самого программиста
>просто за оптимизацию обидно
вот когда тебе зряплату оптимизирует - вот и будет обидно
а так выбирай - либо точность, но медленнее, больше размер, либо оптимизация зряплаты или самого оптимизатора
Почему тут так не любят программистов, которым не плевать на быстродействие?
потому что оптимизированный код обязан выдавать верные результаты
public double Multiply(double a, double b) => return 42d;
работает быстро, но верно ли
Любой код должен возвращать правильные результаты, но лучше что бы код еще и работал быстро, почему народ здесь этого не понимает?
Я сейчас говорю не в разрезе именно этого случай, а о парадигме коддинга сейчас в целом!
Закон мура уже поламался, никаких +100% производительности из метала уже не получить, поэтому ньюфеги должны сейчас запрыгивать в лодку оптимизации, нейросетей, датаАнализа и низкоуровневого программирования! Все эти фичи стают все более востребованы именно из-за упора текущего технологического прогресса в средства обработки информации. Это раньше можно было тяп ляп и все готово, сейчас таких гонят в шею, и все эти разговоры про рабство ньюфегов которые работаю за еду от того что такие программисты уже больше никому не нужны, сейчас на рынке будут оставаться только те кто может написать уже существующий код в более производительном русле, или написать что-то что будет работать быстрее чем то что могут написать другие, неужели аноны тут этого не понимают? Мы на пороге слома парадигмы, и у ньюфегов есть преимущество над мидлами, учиться СРАЗУ ПРАВИЛЬНО лучше, чем переучиваться
Какие есть предложения, как решать ситуацию в конкретном данном случае и в целом?
мимо-ньюфег
Ты что тупой? Тебе же сказали если тебе важна точность юзай децимал, это валидно
>Любой код должен возвращать правильные результаты, но лучше что бы код еще и работал быстро, почему народ здесь этого не понимает?
народ не понимает как можно заявлять такое приводя код который возвращает неправильные результаты
>народ не понимает как можно заявлять такое приводя код который возвращает неправильные результаты
ча? Я никакого кода не приводил, ты о чем вообще? Я мимоходом вписался
тогда сорян. сам понимаешь, двач не подписывает кто где говорит и потому по дефолту считается, что идет диалог, а каждый со стороны во избежание такого подписывается "мимо-крок/ньюфаг"
Да мой косяк, забыл Мимо дописать
К слову, видел не очень интересное выступление архитектора noSQL БД на шарпе, так он там тоже за оптимизацию затирал. Но его посыл был в том, чтоб сначала оптимизировать архитектуру, потом алгоритмы всякие, а в последнюю очередь байтоебством заниматься. Так и выигрыши по производительности лучше всего получаются на единицу трудозатрат.
И в свете выше написанного, лучше пусть ньюфаги научатся нормально с коллекциями, асинхронностью и базами данных работать - это даст выхлоп куда больше, чем знание тысячи и одного способа, как сэкономить два такта и сделать код необслуживаемым.
>так он там тоже за оптимизацию затирал. Но его посыл был в том, чтоб сначала оптимизировать архитектуру, потом алгоритмы всякие, а в последнюю очередь байтоебством заниматься.
Сейчас именно так и происходит, все началось далеко не с байтоебства, сейчас мы на стадии отказа от совместимости c x86 командами, а так же внедрение в архитектуру чипов хардверного ускорения для нейросеток, потом будут более поверхностные изменения, но то что со временем эстафета перейдет к программистам это очевидно предполагаемый исход, и будет это гораздо быстрее чем ты думаешь, а интернет вещей еще больше бустанет этот процесс
>как сэкономить два такта и сделать код необслуживаемым.
Не надо утрировать, тоже так умеем, медленный однопоточный код вездесущ, речь далеко не о 2 тактах
> сейчас мы на стадии отказа от совместимости c x86 командами, а так же внедрение в архитектуру чипов хардверного ускорения для нейросеток
Во-первых, один лишь Эпл - это не "Мы". Во-вторых, поддержкой разных архитектур в CLR занимаются майки, а не "Мы". В-третьих, внедрение хардверного ускорения для почти всех дот.нет программистов будет заключаться или в подключении библиотеки, а не жонглировании байтами, или вообще ни в чем. Это явно не забота ньюфагов.
Еще пара слов о умерщевлении закона мура - ну так микроэлектронщики придумали многочиплетную компоновку чипов, а программисты придумали всякие многопоточности с микросервисами. На наш век производительности хватит.
>Не надо утрировать, тоже так умеем, медленный однопоточный код вездесущ, речь далеко не о 2 тактах
Мой опыт - при хорошей архитектуре и адекватных алгоритмах получить достаточно медленный однопоточный код, чтоб это стало проблемой, почти невозможно. Если нужны супер оптимизированные на уровне железа функции - лучшим выбором будет воспользоваться библиотекой, а не придумывать и поддерживать свою. Разрабатывать такую библиотеку - не забота новичка. Если в дотнете есть готовый тип для хранения денежных значений - почти всегда лучшей идеей будет им и воспользоваться, а не выдумывать велосипед.
Пишу я такие простыни, чтоб новички не тратили время на маловажные аспекты программирования, и тратили на важные.
винда переходит на арм, уже, линукс уже давно, интел в торопят пилит новые процы, все остальные уже давно
>В-третьих, внедрение хардверного ускорения для почти всех дот.нет программистов будет заключаться или в подключении библиотеки, а не жонглировании байтами, или вообще ни в чем.
вообще не понял к чем ты это, а жонглирование байтами ты вообще сам придумал.
>Еще пара слов о умерщевлении закона мура - ну так микроэлектронщики придумали многочиплетную компоновку чипов, а программисты придумали всякие многопоточности с микросервисами. На наш век производительности хватит.
многопоточность которая реально мало где задействована это один из методов оптимизации кода, но даже в таком случае в высокоуровневом программировании есть действия которые не разбиваются на многопотоки и увеличивают время ответа, такие будут переписаны на низкий уровень в первую очередь,
>Мой опыт
Ты вообще читал что я писал? твой опыт не валиден в будуйщем
>Пишу я такие простыни, чтоб новички не тратили время на маловажные аспекты программирования, и тратили на важные.
убираешь будущих конкурентов
>вообще не понял к чем ты это, а жонглирование байтами ты вообще сам придумал.
Попытался подобрать синоним к байтоебству
>многопоточность которая реально мало где задействована это один из методов оптимизации кода, но даже в таком случае в высокоуровневом программировании есть действия которые не разбиваются на многопотоки и увеличивают время ответа, такие будут переписаны на низкий уровень в первую очередь,
Я не знаю, о какой сфере применения ты речь ведешь, но многопоточность уже давно и крепко обосновалась на десктопе, и практически абсолютная в вебе. И как я уже написал, крайне сложно придумать задачу, где нормально спроектированный код будет выполнятся слишком медленно.
>Ты вообще читал что я писал? твой опыт не валиден в будуйщем
Двадцать лет назад задачи сервера при обработке запроса, требующего немедленного ответа, сводились к CRUD, через 20 лет - ничего не поменялось, но сейчас то все должно немедленно затормозить с просто так?
>винда переходит на арм
Винда обеспечила ограниченную поддержку арма
>линукс уже давно
Линукс обеспечивает поддержку арма
>интел в торопят пилит новые процы
Задача производителей процов - пилить процы. Что ты этим сказать хотел?
И к чему это все? Майки обеспечили поддержку выполнения IL на арме, а от меня, как от разработчика, ты чего хочешь? decimal работает как на x86-64, так и на ARM.
>убираешь будущих конкурентов
Какие же они мне конкуренты? Наоборот, помогаю им на работе и здесь, чтоб толк от них был.
>Во-первых, один лишь Эпл - это не "Мы".
>буквально все уходят от x86
>бля пиздану что-то про то что задача производителейпроцы производить процы, надеюсь проканает и никто не заметит что я обосрался
>Я не знаю, о какой сфере применения ты речь ведешь, но многопоточность уже давно и крепко обосновалась на десктопе, и практически абсолютная в вебе. И как я уже написал, крайне сложно придумать задачу, где нормально спроектированный код будет выполнятся слишком медленно.
Ты из тех кто думает что добавить второй тред и ебнуть Thread.Sleep(100500); это типа внедрение мультипоточности? ну да, таких вот в первую очередь и будут гнать в шею.
>Двадцать лет назад задачи сервера при обработке запроса, требующего немедленного ответа, сводились к CRUD, через 20 лет - ничего не поменялось, но сейчас то все должно немедленно затормозить с просто так?
Все правильно, как я писал 20 лет назад и до недавнего времени было так, закон мура мертв, появились нейросети, появились новые технологии новые концепции и сейчас эту парадигму ждет перелом
и второй раз повторяю байтоебство это утрированный термин,а я надеюсь мы говорим о каких-то реальных вещах
>Мой опыт - при хорошей архитектуре и адекватных алгоритмах получить достаточно медленный однопоточный код, чтоб это стало проблемой, почти невозможно.
ключевое слово "мой опыт"
>буквально все уходят от x86
>что я обосрался
Вижу ПК на и серваки на x86, не вижу на АРМ. Технологические компании много над чем работы ведут на всякий случай, но это не значит, что оно превратится в продукт. Обосрался, похоже, ты.
>Ты из тех кто думает что добавить второй тред и ебнуть Thread.Sleep(100500); это типа внедрение мультипоточности?
Ты из фантазеров? Или по номеру поста гадаешь?
>Все правильно, как я писал 20 лет назад и до недавнего времени было так, закон мура мертв
А я написал, почему рост количества транзисторов на одном чипе уже не играет большой роли.
>появились нейросети
Зачем мне нейросеть для доступа в базу данных? Зачем мне байтоебство для работы с нейросетями на дотнете?
>появились новые технологии новые концепции и сейчас эту парадигму ждет перелом
Без конкретики - это пустые слова
>и второй раз повторяю байтоебство это утрированный термин,а я надеюсь мы говорим о каких-то реальных вещах
Пытаться компенсировать погрешность double для применения вместо decimal для экономии тактов - это байтоебство. Отличный термин.
>>1965074
>ключевое слово "мой опыт"
Так ведь это единственное, что может котироваться в данном вопросе. Ты мне можешь какую-то статистику показать, что без низкоуровневой оптимизиации через несколько лет все перестанет работать? Или у тебя есть строгое математическое доказательство?
я могу показать тебе реальность
постоянно приходится покупать новые смарты и компы, потому что старые начинают тупо не тянуть обновленный и новый софт.
А все из за говнописателей "цензура цензура и в продакшен"
Так и есть. Даже пример могу привести - MS Teams. Съедает до гигабайта оперативки, умудряется тормозить на хорошем компьютерном железе, в своей консоли у него сотни ошибок отображаются. Почему так? Потому что сделано на электроне, с почти отсутствующей многопоточностью, с применением angular jquery, и не очень хорошими программистами. Как это исправить? Использованием подходящей платформы (желательно нативной), на технологиях, которые не допускают чрезмерно говнокодистого кода, и подтягивая уровень разработчиков.
Как это не стоит исправлять? Низкоуровневым программированием.
интерфейсы это способ указания контракта. Как ты удовлетворишь контракт - дело десятое
Вообще да. Используется, в первую очередь, для разных техник инверсии контроля, в т.ч. инъекции зависимостей. Почитать о первом можно в описаниях принципов SOLID, о втором - когда ASP.NET учить будешь.
Да. Но на первое апреля можно по приколу.
Типа вот я пишу метод int Foo(IFizz|IBuzz FizzBuzz) и получаю что объект FizzBuzz - имеет методы и свойства как IFizz так и IBuzz.
У этого есть какое-то название? И вообще, что думаете об этом? Просто мне кажется - вполне логично в контексте отказа от толстых интерфейсов, с другой стороны - не всегда получается в контексте какого-то метода обойтись тонким, ну и часто не хочется делать отдельный интерейс, который просто два других в себе объединяет, тупо из-за того что трудно имя придумать, да и засирает это количество интерфейсов в коде.
Что такое контракт я во всей главе по интерфейсам не нашёл, даже краткого упоминания, из чего сделал вывод (возможно, что ложный), что интерфейс - способ объявления реализации функционала. Причём поскольку один класс может наследовать сразу от нескольких интерфейсов, более гибкий, чем реализация этого функционала в родительском классе. В чём я не прав?
Контрает это договоренность о том, что объект имплементирующий интерфейс будет иметь публичные свойства и методы с данными именами и сигнатурой. Все, блядь.
Смотрите. Был некий служебный код, который, был вынесен в отдельный internal sealed класс. Таких вот классов было несколько, в зависимости от задач. Ну, приведу пример: есть некая задача: импортировать данные из апи наших партнеров, апи довольно сильно отличается от нашего, ну, соответственно - конвертация вынесена в отдельную сущность, чтобы не засорять основной класс, который еще и должен не просто импортировать, но импортировать определенным образом, попутно произведя фильтрации и прочее. Так вот, в ходе аппробации мне сказади, что без логов непонятно, на чьей стороне обосрамс, то ли я обосрался, то ли это апи партнеров серет. Решено было добавить логгирование в эти вот служебные классы. И тут вот случилось страшное: мои служебные классы - не имеют явных конструкторов, не имеют состояний и вообще могли бы быть статичны, но они не. Если я добавлю конструктор который принимает в себя логгер и зарегистрирую эти классы - 1. Придется много где менять код; 2. Сами эти классы придется довольно сильно ковырять, ведь т.к. они были служебные куча методов там - ванлайнеры.
Так вот, я думал насчет того, чтобы ебануть такую вот залупу: мы при конструировании хоста тупо дергнем из него ILoggerFactory и сделаем публичное поле для чтение в Program. Но это кажется мне каким-то не самым элегантным решением, да и я не уверено насчет его надежности. А как иначе прокинуть логгер не меняя кучу кода - не представляю. Можно конечно потратить неделю на глобальный рефакторинг, только кто ж даст время на это, особенно учитывая что на словах-то задача: добавь логгирование, выглядит как: в 2 методах добавь строчку Log.Info(message).
Ну сделай ты публичное поле с логгером
Имхо вообще логгеры не должны никуда прокидываться а получать на месте
Но в asp.net core di во главе всего. Вот туда и впихнули логгеры до кучи
В чем наеб?
> Имхо вообще логгеры не должны никуда прокидываться а получать на месте
Ну да. Я сам с этим-то согласен. Просто с другой стороны - логгеры-то разные, вот, кто-то NLog использует, мы - Serilog, кто-то еще что-то. С точки зрения DI - довольно удобно, что твой код не зависит от этого всего, с другой стороны - то что в каждом классе приходится хуячить один аргумент под логгер - не оч выглядит.
В принципе, можно написать interceptor (почти хрестоматийный случай для этого), который будет логировать то, что получает и возвращает твой метод. Так логер не нужно инжектировать. Но твой хелпер клас, конечно, придется регистрировать в твоем контейнере.
Хм. Почему-то не вспомнил про него. Да, думаю это будет лучше чем делать статичное поле которое все дергают.
Просто вроде кажется что штука должна-то быть полезной. Но примеры использования кастомных постоянно какие-то стремные. Нужно кучу обвяза написать, нужна рефлексия, нужен отдельный класс, который бы как-то это все обрабатывал, в который нужно прокидывать объекты к которым атрибуты применяются.
Вот и мне интересно, у вас есть какие-то примеры использований, отличающиеся от: Сделаем валидатор который будет фреймворк понимать, или возьмем готовые и покажем что рефлексией достали эти метаданные?
Хочется, допустим, вот такой атрибут:
[OnThrow((e)=> {Console.WriteLine(e); throw new Exception(e)})]
Вроде-то все понятно с точки зрения семантики - мы хотим чтобы если в методе что-то кинулось - мы бы вывели на консоль ексепшн и кинули новый. А вот как это намутить не городя кучу кода - непонятно, потому что если доставать эти метаданные из перед вызовом метода - получится еще больше кода чем тупо написав try...catch, да и не у всех же методов мы эти атрибуты пропишем. Опять же - если мутить хрень с тем, чтобы из сборки достать все объекты с данным атрибутом - тоже как-то невесело выглядит.
Короче, поясните за атрибуты. Когда свои писать и вообще надо ли оно? Меня просто заебало каждый раз try...catch когда мы с базой работаем писать, хочу вот такой вот атрибут в методах где дергаем базу или работаем с сетью.
Атрибут - способ добавить некие метаданные не расширяя класс/метод/свойство.
В голову приходят такие варианты:
Добавить для вариантов enum некий атрибут Title, и сделать метод расширения, который этот Title может извлекать. Весьма удобно, когда варианты этого перечисления, например, нужно юзеру показать.
Другой вариант - вот хочешь ты навесить определенный препроцессинг на действия контроллера. Авторизацию, фильтрацию, тротлинг, логирование. Как это еще красиво реализовать? Атрибутами можно пометить такие методы для некого особенного обращения, или в эти же атрибуты встроить, как именно это обращение должно происходить. А как еще это сделать? Сделать мегаметод, куда списком во время запуска приложения передавать список подотчетных методов? Не слишком удобно и наглядно. Для таких случаев в голову приходит сделать абстрактный метод в классе Controller, в котором fluent билдером делать конфигурацию свойств контроллера и его действий, но не знаю, удобнее это будет, или нет.
Но если ты сам хочешь без заморочек сделать, например, кеширование результатов определенных методов через интерсепторы, то помечать их через атрибуты и при настройке IoC контейнера эти методы находить и интерсепторы навешивать выглядит самым оптимальным вариантом.
В общем - есть фича. Хочешь - пользуйся. Не хочешь - не пользуйся.
Просто не особо думая переписать любой код с почти любого другого языка, в т.ч. шарпа, на С - это уже от х3 до х1000+ к перформансу.
Вот только код на си пишется подобно тому, как скульптор выбивает во мраморе статую. Один раз сделал, работает охуенно быстро и круто, и больше к этому не возвращайся, ибо переделать не получится, только всё заново писать, а это долго.
Чем лучше код оптмизирован, тем он сложнее, и вносить изменения практически не возможно.
Потому что это не узкое место. Оптимизировать надо узкие места.
В шарпах рефлексия сейчас не супер дорогая, потому не критично. Более того, во многих случаях, как в примерах с интерсепторами и действиями контроллера , что-то с атрибутом делается лишь однажды, при запуске программы или первом обращении к контроллеру, потому это не играет роли.
Вот есть модель: Товар. У товара есть коллекция атрибутов вида тип атрибута, значение. У типов атрибутов есть уникальное символьно обозначение и описание на понятном языке.
Примерно так это выглядит:
Item{
int Id;
string Name;
decimal Price;
ICollection<Attribute> Attributes;
}
Attribute{
int Id;
AType Type;
string value;
}
AType{
int id;
string Name;
}
Так вот, если я EF'ом просто делаю Include.ThenInclude у товара, то на то чтобы вытащить 1 товар по ID у которого 100 атрибутов уходит почти 10 секунд. Это конечно в дебаге и в релизе побыстрее, но все равно же пиздец.
Может быть есть какой-то способ быстрее это делать?
Вообще, можно профайлером или в дебаге посмотреть, что за запрос генерирует EF чтоб поржать. Вангую, там сотни селектов.
А по твоему вопросу: можно эти данные повытягивать через join, а потом уже полученную коллекцию преобразовать в нужную тебе структуру данных через всякие GroupBy.
Не совсем понял. Ты предлагаешь писать нативный запрос? Я бы мог, только вот не уверен что в команде поймут такое вот решение. Просто я бывший плюсовик и привык к тому что перформанс нужно максимальный стараться получить, изначально мне при переходе на шарп сказали не париться, дескать тут более высокий уровень, но вот в такие моменты я просто не понимаю - это действительно так и должно быть, или я что-то не то делаю.
Нет, я предлагаю просто написать запрос с join`нами на LINQ, который тебе вернет коллекцию из сотни рядков Attribute + AType (можно вместе с Item, а можно и отдельным запросом, если поиск по Id) - будет полный аналог запроса на SQL. А потом уже преобразуй коллекцию в свой объект Item с атрибутами.
Но в целом, с LINQ довольно часто такие приколы бывают, если не хеллоуворды пишешь, и в моей команде давно пришли к правилу, что если LINQ генерит фигню, стоит просто делать запрос на SQL. Я бы рекомендовал этот вопрос поднять на митинге.
> - будет полный аналог запроса на SQL
Имею ввиду, что сгенерируется простой запрос с джойнами на сиквеле
Быстрофикс
Настоятельно рекомендуется к прочтению:
https://ru.wikipedia.org/wiki/Денормализованные_числа
(What Every Computer Scientist Should Know About Floating-Point Arithmetic)
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Subnormal (denormalized)
когда все биты экспоненты установлены в 0
читай блок "Underflow" здесь (наглядно)
https://www.h-schmidt.net/FloatConverter/IEEE754.html
Я не до конца понял о чем именно ты спрашиваешь, но это должно ответить на твой вопрос:
В отличие от классов в пространстве имен System.Collections, Array имеет фиксированную емкость. Чтобы увеличить емкость, необходимо создать новый объект Array с требуемой емкостью, скопировать элементы из старого объекта Array в новый, а затем удалить старый Array.
Размер массива ограничен максимальным количеством элементов — 4 миллиарда, а также максимальным индексом 0X7FEFFFFF в любом заданном измерении (0X7FFFFFC7 для массивов байтов и однобайтовых структур).
.NET framework: По умолчанию максимальный размер Array составляет 2 гигабайта (ГБ). В 64-разрядной среде можно избежать ограничения на размер, установив значение атрибута enabled элемента конфигурации gcAllowVeryLargeObjects равным true в среде выполнения.
То есть: если тебе хочется узнать количество элементов - это свойство Length.
Если ты хочешь узнать, под какое количество элементов в памяти выделено места - под то, сколько в Length задано.
Если тебя ограничения размера массива интересуют - читай msdn, оттуда цитата.
Спасибо за ответ.
А у обычного массива никак не могут быть разные Length и Capacity? Я пытаюсь сделать так, но массив нулями сам заполняется, в итоге и Length и Capacity одинаковые оказываются
Нет. Если тебе нужна коллекция с частым ресайзом - можешь использовать List<T> - хотя под капотом там массив используется.
Столкнулся с такой херней - получить данные из открытой программы. Вот пишу я текст в блокнот - получаю оттуда текст. Нажимаю на кнопку "файл" в блокноте - выбранный пункт меню отображается в моей программе.
Вопрос, а как это ваще делается? Как слепой котенок тыкаюсь, не могу понять. куда и как это делать. Надо лезть в потоки?
По мне, выглядит как ужасная дыра в безопасности, если бы такое можно было с нихуя делать. Представь - открываешь прогу с паролями, и они все утекают через шарвер какой-то.
Если условный блокнот сам не предоставляет такую инфу - вангую, ты без обходных путей на грани вирусописательства такое не сделаешь.
блин, ну не могли же мне в тестовое вручить такую-то хуету :\
Мне надо озвучить выбранные пункты меню в блокноте и вести лог в формочке с выбранными пунктами. Пока единственная зацепка - ui automation фреймворк, но от всего этого пока гавной воняет. В первую очередь от меня :с
Я недопонял, а в чем проблема? Замени sqliteconnection на нужный тебе конекшен (Microsoft.Data.SqlClient или MySql.Data.MySqlClient) в : base(...) и убери код с ошибкой.
Ты не понял. Я в рантайме программно хочу коннект либо sqlite либо mysql, чтобы в зависимости от того что передали в конструктор создавался коннект либо к sqlite либо mysql.
Тогда вместо ручного создания конекшена, передавай просто нужный конекшен нейм и используй его в конструкторе DbContext(String).
В Web.config, указывая конекшен стринги, можно указывать и названия провайдера, т.е. класс твоего конекшена (майсиквел, сиквелСервер и т.д.). Пример тут есть: https://blog.elmah.io/the-ultimate-guide-to-connection-strings-in-web-config/
От меня ускользает, почему ты фреймворк вместо кора используешь, но если будешь делать на коре - тут: https://docs.microsoft.com/en-us/ef/core/dbcontext-configuration/ описано, как настроить и создать контекст на нем.
> От меня ускользает, почему ты фреймворк вместо кора используешь
Wpf, .net4.0.
> Тогда вместо ручного создания конекшена, передавай просто нужный конекшен нейм и используй его в конструкторе DbContext(String).
А я смогу в прописаном конекшене поменять айпи/порт?
т.е. исходный метод int ReadByte()
превратится в
Task.Run( () => serialPort.ReadByte())
Не сильно сложная задача, речь тут про хуки.
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwineventhook
https://stackoverflow.com/questions/7761875/is-there-a-way-to-hook-mouse-events-for-a-specific-button-in-a-windows-form
Баловался таким по молодости лет.
Смотри на пальцах: Тебе нужен кусок памяти под 10 элементов. Ты просишь у ОС памяти: ДАЙ МНЕ ПОЖАЛУЙСТА 10 размер твоего типа данных. ОС выдает тебе этот кусок памяти. При этом, в зависимости от того какие флаги ты выставил - этот кусок памяти может быть занулен или с мусором. Так вот, фреймворк за тебя занулил этот кусок памяти и заполнил значениями по-умолчанию, когда ты создал массив.
Дальше. Теперь ты хочешь пользоваться этим куском памяти иначе. Ты не хочешь думать о нем как о целом куске памяти, ты хочешь представить его как, допустим, портсигар. Он иожет быть пустым, но пространство портсигара будет неизменным - пока ты не решишь купить побольше.
Так вот. Решив сделать динамический массив - ты, считай, создаешь такой вот портсигар. В нем Length - текущее количество сигарет. Capacity - вместимость. Когда ты добавляешь сигарету - ты увеличиваешь Length, достаешь сигарету удаляя ее из портсигара - Length уменьшаешь. Если ты хочешь, чтобы портсигар автоматом увеличивался достигнув предела вместимости - ты тихонько, под капотом - достаешь все сигареты из старого и кладешь их в новый.
Так вот, а при чем тут массив. А при том, что в шарпах - массив - считай вот такой вот кусок памяти просто. Ты не можешь его просто так увеличить и потому ему и не нужна вместимость не создав новый массив. Таким образом, если тебе так хочется авторасширяемый массив - ты делаешь что-то в духе:
public List<T>
{
private const int defaultCapacity = 4;
private T[] _items = new T[defaultCapacity];
private int _lastElementIdex = 0;
public int Count => _lastElementIdex;
public int Capacity => _items.Length;
public void Add(T item)
{
if(++lastElementIdex >= _items.Length){
var temp = new T[_items.Length 2];
Array.Copy(_items, temp, _items.Length);
_items = temp;
}
_items[lastElementIdex] = item;
}
public T this[int index]
{get
{
if(index <= _lastElementIndex)
{
return _items[index];
}
throw new IndexOutOfRangeException();
}}
}
ну и т.д. В зависимости чему свою структуру данных ты научить хочешь и как хочешь чтобы она себя вела.
Смотри на пальцах: Тебе нужен кусок памяти под 10 элементов. Ты просишь у ОС памяти: ДАЙ МНЕ ПОЖАЛУЙСТА 10 размер твоего типа данных. ОС выдает тебе этот кусок памяти. При этом, в зависимости от того какие флаги ты выставил - этот кусок памяти может быть занулен или с мусором. Так вот, фреймворк за тебя занулил этот кусок памяти и заполнил значениями по-умолчанию, когда ты создал массив.
Дальше. Теперь ты хочешь пользоваться этим куском памяти иначе. Ты не хочешь думать о нем как о целом куске памяти, ты хочешь представить его как, допустим, портсигар. Он иожет быть пустым, но пространство портсигара будет неизменным - пока ты не решишь купить побольше.
Так вот. Решив сделать динамический массив - ты, считай, создаешь такой вот портсигар. В нем Length - текущее количество сигарет. Capacity - вместимость. Когда ты добавляешь сигарету - ты увеличиваешь Length, достаешь сигарету удаляя ее из портсигара - Length уменьшаешь. Если ты хочешь, чтобы портсигар автоматом увеличивался достигнув предела вместимости - ты тихонько, под капотом - достаешь все сигареты из старого и кладешь их в новый.
Так вот, а при чем тут массив. А при том, что в шарпах - массив - считай вот такой вот кусок памяти просто. Ты не можешь его просто так увеличить и потому ему и не нужна вместимость не создав новый массив. Таким образом, если тебе так хочется авторасширяемый массив - ты делаешь что-то в духе:
public List<T>
{
private const int defaultCapacity = 4;
private T[] _items = new T[defaultCapacity];
private int _lastElementIdex = 0;
public int Count => _lastElementIdex;
public int Capacity => _items.Length;
public void Add(T item)
{
if(++lastElementIdex >= _items.Length){
var temp = new T[_items.Length 2];
Array.Copy(_items, temp, _items.Length);
_items = temp;
}
_items[lastElementIdex] = item;
}
public T this[int index]
{get
{
if(index <= _lastElementIndex)
{
return _items[index];
}
throw new IndexOutOfRangeException();
}}
}
ну и т.д. В зависимости чему свою структуру данных ты научить хочешь и как хочешь чтобы она себя вела.
Простыми способами - нет. Если тебе нужно и айпи с портом заменять - тогда подготовь методы, чтоб они тебе создавали и возвращали sqlConnection нужного типа с нужными параметрами, и передавай его в конструктор своего контекста.
Вот создал я новый проект. Эта шняга всобачила мне sqlite. Как мне удалить все ссылки на него одним кликом? Мне нужен sql server. Я создал новый data source, проверил соединение, отлично, вижу базу, но блядь, мне её не видеть надо, а в проект добавить! Мне руками писать в appsettings.json? Руками писать connection string? В 2021 году, в инструменте, за который просят двести баксов в год?!
Зачем тебе динамический массив? Пользуйся листом.
Стоит ли начинать самому писать тесты самому, если никто не пишет? И если да - то как их впиндерить в общий проект у которого в структуре нет отдельного места под тесты, а разделение ответсвенности за каждый кусочек проекта строится на: вот у тебя папочка в общем солюшене, в ней проект - хуярь.
>Стоит ли начинать самому писать тесты самому, если никто не пишет?
Если есть проблемы с качеством кода/переоткрытием баг, то подумай над причинами, что в процессах и архитектуре не так. Если уверен, что с ними все ок, и дело в сложности бизнес логики или еще чем, от тебя не зависящем - стоит писать. Если нет - лишняя работа.
>структуре нет отдельного места под тесты
Сделай
>вот у тебя папочка в общем солюшене, в ней проект - хуярь.
Сделай рядом папочку projectname.Tests. Не думаю, что кто-то возмутится сильно.
Ну, у меня просто из-за того что нет тестов оч большая боязнь что-то менять, из-за этого каждая новая фитча - это дополнительное время на то чтобы убедитсья что я ничего не сломал. Это наверное просто психологическое на самом деле и вызвано временами из вуза, когда: написал строчку - скомпилировал, проверил что работает - написал следущую; но ничего поделать не могу с собой.
Насколько данная конструкция безопасна, при условии, что на входе может быть что-угодно?
Я к вам с вопросом. До этого никогда не писал на низкоуровневых библиотеках, Я C# разработчик. Извините, если вопрос не совсем по адресу.
Я ищу решение следующей проблемы. Опишу подробнее.
У меня есть плата raspberry Pi с установленным линуксом, ещё основная проблема это Arm64.
И мне нужно написать небольшую прогу, которая
1. пару раз в минуту обращается наружу хттп гет запросами, откуда получает json, парсит, и получает необходимые обьекты. И из них В общем, строки для последующей работы.
2. Полученные строки необходимо плавно(линейная интерполяция) рисовать и двигать по экрану, тем самым создавая такой красивый заанимированный графический интерфейс бегущих строк
Размер окна, в котором это нужно рисовать маленький(200х300).
Я до этого поста пробовал сделать на wpF+avalonia(кроссплатформенный wpF), оно работает, но бывают частые лаги. Я замерил интервалы отрисовки, когда вызывался Invalid окна, 90% кадров рисовались отлично с задержкой 15-16миллисекунд, а 10% кадров с задержкой 30 миллисекунд. В результате этих лагов выглядит криво. Как я гуглил, у многих такая же проблема, и разрабы avalonia пока не исправляют.
Мне посоветовали посмотреть в сторону SDL2, и я нашел нугет пакет для .Net core, но опыта в нём, соответственно, ноль. Опыта работы с линуксом околонуля.
Я бы написал все прекрасно на юнити и не парился по всему этому поводу, но в юнити нельзя собрать для линукс arm64.
Собственно тут я вижу два стула.
1. Подскажите, пожалуйста, какими средствами это лучше и быстрее сделать.
2. Если у кого-то есть опыт в этом деле и время быстро с этим помочь(именно линукс и именно arm64), то может договоримся за оплату.
У тебя фронт на малинке десктопный под линем? Поставь на неё ОС вместо прошивки для роутеров, если уж используешь как ОС (иначе делай фронт в виде веб-сайта).
Даже если я напишу на жс что-то подобное без фреймворков(открывал хтмл и жс 4 года назад) , оно мне разве там выдаст 60 фпс?
Нет. Это значит, что телегу, которую ты накатал, ты сам должен будешь тестить.
БУМП
thread.sleep(10000) то Физически ядро ДЕЙСТИТЕЛЬНО будет заниматься ничего не деланием, или мы делаем слип только для виртуального потока а на физическом ядре котором выполнялся виртуальный поток начнется выполнятся другой поток?
В твоей команде, ты типа её владелец что ли? Судя по написанному ты ламак джуниор.
Книжка вроде как не говно и советуется для ньюфагов, но на msdn я такого не видел никогда
Это их экономия на Console при каждом выводе, или есть рекомендация часто используемые пространства имен по возможности импортировать статическими?
Разницы в IL коде не будет при вызове Console.ReadLine() и ReadLine() с директивой using static System.Console, это просто для удобства делается.
Если нет - то объясните пожалуйста, что это такое.
> что это такое
> все эти потоки
Несколько программ выполняющихся одновременно. Дебильное сравнение, но самое точное для полного новичка.
Почему нельзя создавать новый поток в не статическом классе? Разве поток, который был создан в этом классе не будет уничтожен после уничтожения класса или после того как прекратит свою работу? ОН ЖЕ НЕ БУДЕТ СУЩЕСТВАОВАТЬ ВЕЧНО ПОСЛЕ ТОГО КАК БЫЛ СОЗДАН ВПЕРВЫЕ?
ASP.NET приложение.
Два конфиг файла: appsettings.json & appsettings.Development.json
В обоих определена переменная Foo:Bar:Foobar
На Винде и Linux ведут себя по-разному
Startup.ctor
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddCommandLine(Environment.GetCommandLineArgs());
Configuration = builder.Build();
Console.WriteLine("Configuration.Foo.Bar.Foobar = {0}",
Configuration["Foo:Bar:Foobar"]);
// На обоих платформах пишет значение из appsettings.Development.json
==============================================
В транзиентном сервисе в AppConfig.ctor
Console.WriteLine("Appconfig.ctor: appConfig.Foo.Bar.Foobar = {0}", configuration["Foo:Bar:Foobar"]);
На винде пишет из Development, на Линухе — из основного
Для переменной FBar из корня конфига — тоже самое. То есть конфигурация из appsettings.Development.json, первое что приходит в голову: файла appsettings.Development.json нет, но в ctor всё пишется правильно на обеих платформах + optional = false
Второе что приходит в голову: на Линухе DI-контейнер игнорирует вставку Configuration. Но на видне не игнорирует. Это же критикал, его бы поправили сразу же
==============================================
В чём прикол?
ASP.NET приложение.
Два конфиг файла: appsettings.json & appsettings.Development.json
В обоих определена переменная Foo:Bar:Foobar
На Винде и Linux ведут себя по-разному
Startup.ctor
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddCommandLine(Environment.GetCommandLineArgs());
Configuration = builder.Build();
Console.WriteLine("Configuration.Foo.Bar.Foobar = {0}",
Configuration["Foo:Bar:Foobar"]);
// На обоих платформах пишет значение из appsettings.Development.json
==============================================
В транзиентном сервисе в AppConfig.ctor
Console.WriteLine("Appconfig.ctor: appConfig.Foo.Bar.Foobar = {0}", configuration["Foo:Bar:Foobar"]);
На винде пишет из Development, на Линухе — из основного
Для переменной FBar из корня конфига — тоже самое. То есть конфигурация из appsettings.Development.json, первое что приходит в голову: файла appsettings.Development.json нет, но в ctor всё пишется правильно на обеих платформах + optional = false
Второе что приходит в голову: на Линухе DI-контейнер игнорирует вставку Configuration. Но на видне не игнорирует. Это же критикал, его бы поправили сразу же
==============================================
В чём прикол?
>Почему нельзя создавать новый поток в не статическом классе?
Потоки можно создавать где угодно.
>Разве поток, который был создан в этом классе не будет уничтожен после уничтожения класса или после того как прекратит свою работу? ОН ЖЕ НЕ БУДЕТ СУЩЕСТВАОВАТЬ ВЕЧНО ПОСЛЕ ТОГО КАК БЫЛ СОЗДАН ВПЕРВЫЕ?
Можешь рассматривать каждый поток как еще одну точку входа в приложение. У любой программы есть public static Main() она живет пока исполняется она или порожденный ею поток. Когда создается новый поток ты в него передаешь какой-то метод, который и будет уже его точкой входа.
В сторону SFML посмотри, он вроде повыше чем SDL.
Анон, а как такую штуку посмотреть?
Чем тебе не подходит стрим который отдается SerialPort'ом? Стримы в дотнете нормально в асинхронность могут. На кой тебе это извращение?
Ну так и пиши сразу по английски. Хуй тебя пойми.
Тоже самое напиши в magicstrength?
а. я тупой. потому что все значения это int.
после дрочки кода всю ночь совсем забыл про это.
еуые
Потому что SerialPort написан дебилами-лгбт-зумеркками-чурбанами которые понятия не имеют как работает ком порт в апи вынды (его как раз писали белые олды и он работает без проблем). SerialPort.BaseStream в асинхронном апи не учитывает таймауты, соответственно бесполезен т.к. зависнет на первом же пропавшем байте.
А так?
int timeoutMs = 1000;
var task = SerialPortAsyncTask();
if (await Task.WhenAny(task, Task.Delay(timeoutMs)) == task) {
// task completed within timeout
} else {
// timeout logic
}
Да, засыпает нить выполнения
Не будет работать, ReadAsync у стрима игнорит токен отмены после запуска чтения. Даже если бы он корректно работал, писать эту обвязку еще больше гемора чем просто в таске запустить синхронное чтение.
Таааак, принимается! Но можно замапить cancelationToken на закрытие стрима:
async ValueTask Read(Stream stream, TimeSpan timeout = default)
{
if(timeout == default(TimeSpan))
timeout = TimeSpan.FromSeconds(5);
using var cts = new CancellationTokenSource(timeout); //C# 8 syntax
using(cts.Token.Register(() => stream.Close()))
{
int receivedCount;
try
{
var buffer = new byte[30000];
receivedCount = await stream.ReadAsync(buffer, 0, 30000, tcs.Token).ConfigureAwait(false);
}
catch (TimeoutException)
{
receivedCount = -1;
}
}
}
Нужна удобная работа с ком-портами (это не совсем стрим, поэтому peek не катит), поскольку там всякие временные задержки то удобно поллить по байту или пачками и выгребать что приходит, а если секунд 5 ничего не пришло закрывать соединение.
хочу что-нибудь типа first()
а то мне в зависимости от того есть он или нет в коллекции нужно либо false вернуть из метода, либо дальше обрабатывать объект
гугление чет не помогло
Ты блядь по человечески вопрос задавай, нихуя ж неясно.
Если ты спрашиваешь про то есть ли объекты в коллекции - то Any()
Если ты хочешь пройтись по коллекции и если встретишь элемент вернуть, а если не встретишь - нулл, то FirstOrDefault. Из названия понятно, что в случае структурок там не null будет. Если тебе прям гарантированно NULL нужен - запаковываешь все перед тем FirstOrDefault.
Только я хз нахуя тебе гарантированный null. Ты можешь либо FirstOrDefault либо Where(predicate).Count() Where(predicate).Count() почему-то с линкумагией быстрее работает чем просто Count(predicate). и потом если там есть твой объект - достать его.
А можно быть человеком и ручками цикл написать. Работать будет быстрее чем линку, памяти не будет выделяться и вообще заебись ручками циклы для таких вот вещей писать.
> Ты блядь по человечески вопрос задавай, нихуя ж неясно.
ну что ж я могу поделать, если не понятно
иди нахуй, да?
Да ты охуел, он тебе по человечески простыню накатил, а ты его нахуй послал. Сам иди нахуй и не заходи сюда больше.
И, внезапно, я осознал, что не представляю как делать мне ловить-то их консоли всякие комбинации клавишь.
Ну, допустим, я хочу сделать Ctlr+X - вырезать. Я нажимаю Ctrl+X и програма завершается. Или я хочу Alt+стрелка вверх - сдвинуть строку вверх. С точки зрения кода самой операции - я все понимаю: у меня буффер, я просто свапаю в нем строчки местами, а вот как мне перехватить-то это нажатие Alt+стрелка вверх? Я чет не представляю. Я даже стал думать что на шарпе это не опускаясь на уровень Winapi и не получится, но тогда уже проще взять С++. Может быть есть у вас идеи?
С меня как обычно.
1. Как в сишарп реализованы круды через ORM
2. Как в сишарп реализованы круды через нативные SQL запросы
Владимир
https://ru.stackoverflow.com/questions/1030404/Подготовка-к-собеседованию-c
Вот блять не могу придумать как сделать часть с пикрил1. Можно нагородить хуеты с проверками и чекалками всего и вся, собственно что я и делал но с каждой такой проверкой выходило еще куча проверок. Не могу врубится подскажите мб как это сделать короче и лаконичнее.
Я думаю создавать обьект у которого есть поле Level =1; и при ответе на вопрос добавлять +1, вернутся к указаному вопросу устанавливать значение поля и там уже в свитче переходить к вопросу, но тогда надо чекать заполнены ли поля вопросов которые были до . А заполнить анкету заново установить значения снова на 1 но тогда еще нужно сбрасывать стальные значения в обьекте. Наверняка есть какой то способ что бы без вот этих костылей сделать, я просто сам вижу что эта хуйня на постном масле получается которую даже я не разберу через неделю.
Дайте совет пллиз.
А как ты хранишь объекты вопросов? И вообще, давай ссыль на гитхаб свой
>Порог входа в программирование с каждым годом всё ниже, и
Ты угараешь бля? Сейчас с джунов требуют то, что лет десять назад делали мидлы
Когда 100 джунов на вакансию, можно и пожестче требования выставить. В итоге там вообще недомидл проходит
var bitmap = new RenderTargetBitmap((int)visual.ActualWidth, (int)visual.ActualHeight, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(visual);
var frame = BitmapFrame.Create(bitmap);
encoder.Frames.Add(frame);
using (var stream = System.IO.File.Create(path))
encoder.Save(stream);
Я сохраняю картиночки один раз и всё нормально, снова хочу сохранить и вылазит ошибка, что файл уже используется каким-то потоком, но у меня тут ведь поток закрывается. В чём дело-то?
Что-то не вижу проблемы так сходу. Могу накидать идей:
1. А в простое ли место сохраняешь? Может эту директорию какой-нибудь яндекс-диск сразу синхронизировать начинает? Посмотри ProcessExplorer-ом, какой процесс держит хэндл на твой созданный файл
2. Проверь, не существует ли уже файл с таким именем
3. Можно попробовать заменить File.Create() на File.Open(path, FileMode.OpenOrCreate)
4. Из любопытства: попробуй сохранить не в файловый, а в MemoryStream, и потом уже его отдельно в файл записать
Блять, неудивительно что к вам никто не идет, если представитель конторы в твоем лице такой тупой, что уж обо всей организации говорить.
Лол, да. Более того, с джуна требуют сегодня больше, чем с мидла. Я пол сотни собеседований на Джуна прошел, и нихуя. В итоге устроился мидлом с четвертой попытки, напиздев про полтора года опыта. Причем если на мидла спрашиваю хоть немного по делу, то на Джуна - какую-то хтоническую хуйню из глубин Рихтера и верчения радужных деревьев.
Сам я мертвый в шарпе да и вообще я не программист особо но появилась задача, которую мне проще всего именно на нем решать (остальные варики там вообще - делфи или VB).
нужно запилить библиотеку которая через COM взаимодействует с программным пакетом. У меня практически полное непонимание как именно работает COM, но это, вроде как, ладно. У библиотеки есть метод, который и запускается целевым пакетом, и передает в метод абстракцию своей рабочей среды (все нужные для этого типы предоставляются в виде .dll), В которой я могу уже что-то дергать из доступных инструментов, особо не парясь при чем там вообще COM и как он работает.
Но есть такая проблема: часть методов возвращают тип dynamic, и в описании к API сказано: если должен быть возвращен единственный объект, то возвращается именно объект (пусть IModel), а если нужно вернуть несколько, то возвращается коллекция. Заранее понять, что вернется, невозможно. Из-за этого я не могу с этим dynamic обращаться каким-то одним кодом: еслим туда залетает коллекция, то по ней надо сначала итерироваться, просто дергнуть что-то типа IModel.Feature - просто все падает в рантайме. А если объект один - то написать для него foreach(IModel mod in incomeObj) - то же самое. Никакие проверки типов с помощью incomeObj is Collection<IModel> - не приводят к результату, я уже все туда впихнул - и контейнеры коллекций API, и стандартные из шарпа. Хз, наверное потому что нигде не объявлено явно что то что приезжает имеет вообще какой-то тип, а утиная проверка по принципу совпадения имен методов - это не про шарп и вообще не имеет ничего общего с типобезопасностью. Короче, в итоге я написал такой дебилизм, что сначала пытаемся итерироваться, но заворачивая это в try{}, если там возникает эксепшен то я уже точно знаю, что там IModel, и в блоке catch могу с ним работать. Такой вот каличный способ ветвления. Это работает.
Собственно, в чем вопрос - как это можно нормально сделать? И можно ли вообще понять какой тип у объекта dynamic? Если б это была Джава, я мог бы воспользоваться reflection, но в шарпе я 3 дня всего работаю, такие лоу-лвл вещи будут сложноваты.
Сори за то что насрал вам тут стену текста, просто попытался доходчиво донести в чем проблема.
Сам я мертвый в шарпе да и вообще я не программист особо но появилась задача, которую мне проще всего именно на нем решать (остальные варики там вообще - делфи или VB).
нужно запилить библиотеку которая через COM взаимодействует с программным пакетом. У меня практически полное непонимание как именно работает COM, но это, вроде как, ладно. У библиотеки есть метод, который и запускается целевым пакетом, и передает в метод абстракцию своей рабочей среды (все нужные для этого типы предоставляются в виде .dll), В которой я могу уже что-то дергать из доступных инструментов, особо не парясь при чем там вообще COM и как он работает.
Но есть такая проблема: часть методов возвращают тип dynamic, и в описании к API сказано: если должен быть возвращен единственный объект, то возвращается именно объект (пусть IModel), а если нужно вернуть несколько, то возвращается коллекция. Заранее понять, что вернется, невозможно. Из-за этого я не могу с этим dynamic обращаться каким-то одним кодом: еслим туда залетает коллекция, то по ней надо сначала итерироваться, просто дергнуть что-то типа IModel.Feature - просто все падает в рантайме. А если объект один - то написать для него foreach(IModel mod in incomeObj) - то же самое. Никакие проверки типов с помощью incomeObj is Collection<IModel> - не приводят к результату, я уже все туда впихнул - и контейнеры коллекций API, и стандартные из шарпа. Хз, наверное потому что нигде не объявлено явно что то что приезжает имеет вообще какой-то тип, а утиная проверка по принципу совпадения имен методов - это не про шарп и вообще не имеет ничего общего с типобезопасностью. Короче, в итоге я написал такой дебилизм, что сначала пытаемся итерироваться, но заворачивая это в try{}, если там возникает эксепшен то я уже точно знаю, что там IModel, и в блоке catch могу с ним работать. Такой вот каличный способ ветвления. Это работает.
Собственно, в чем вопрос - как это можно нормально сделать? И можно ли вообще понять какой тип у объекта dynamic? Если б это была Джава, я мог бы воспользоваться reflection, но в шарпе я 3 дня всего работаю, такие лоу-лвл вещи будут сложноваты.
Сори за то что насрал вам тут стену текста, просто попытался доходчиво донести в чем проблема.
>Проверь, не существует ли уже файл с таким именем
Блэт, существует, я их не удаляю. Вот нельзя что ли поконкретнее ошибку писать, а не про потоки мне затирать
По идее это решит твою проблему:
var actualType = ((ObjectHandle)dynamicObj).Unwrap().GetType();
И уже полученный тип проверять на тему является ли он коллекцией.
Да краулер скорее всего написали и всё. Запускают его периодически в параллели с динамического пула IP и получают фоточки.
Что-то подумал, даже GetType() не надо. Просто:
if(((ObjectHandle)dynamicObj).Unwrap() is Collection<IModel>)
{
}
нет, что бы надрочить нейросеть нужно иметь у себя базу фоток связанную с инфой о человеке, я не совсем понимаю как можно надрочить нейросетку использую краулер кроме как то-то что бы загрузить ВСЮ ИНФУ СЕБЕ
А как написать свой краулер который например будет сохранять все фотки с ебалом с определенного сайта?
>>1971529
Спасибо, но это к сожалению не срабатывает. Так ни разу и не смог получить true из любых проверок, ни сравнивая с API-коллекцией, ни с ICollection шарпа, и при создании типа через var, и непосредственно проверяя, как во втором посте. Хотя точно известно что там коллекция и у нее можно получить итерирование
Неа. Причем, конкретно эта строчка вызывает краш. Как собственно и любые попытки прикастить к чему-то этот объект, кроме как к Object.
То что я выше написал, что даже попытка проверки на обжект вызывает false, похоже, хрень: просто программа крашится раньше, и до этого тупо не доходило (дебажить тут нельзя, все приходится выяснять через месседжи которые кидает прога, для которой либа)
Сегодня только увидел, спасибо за подробный ответ, помогло разобраться лучше
С чего ради? Название класса соответствует тому, что он абстрагирует, и в случае объектной парадигмы языка, ты абстрагируешь (любым классом) - объект, а не саму концепцию класса. Хз как в дот-нете, но в Java для объектного описания самой идеи класса существует свой класс, который называется (сурпрайз мазафака) - Class. Через него осуществляется доступ к классу, породившему объект (в рамках рефлексии) - у любого объекта можно получить объект его класса через поле .class, и потом делать с ним всякие прикольные вещи.
И в этом все кристально логично. У тебя малость сбито понимание что и чем является.
Кто использовал linq2db? У меня совершенно нубские вопросы, на SO боюсь идти, выебут.
1. В чём разница linq2db и linq2db EF Core? Зачем нужен второй? Нужен ли он мне?
2. Можно ли в linq2db приготовить запрос, а потом его исполнить с параметрами?
3. Какого типа будет этот запрос? Если я хочу его в функцию или в класс передать? Я НИХУЯ не могу понять. Везде в примерах ебучий var...
Боже, как всё просто было 20 лет назад. Вкурил "дельфи за 21 день", или круче того, пыхпых для чайников, и пошёл ебашить. А тут - бляя...
Спасибо
Порог входа, например, во врача (со специализацией) - это 8-10+ лет учёбы, потом ещё 5-10 лет обязательной работы за 5-8к на селе с бабками, и только потом ты сможешь устроиться в норм клинику на зп js-джуна.
Вкат в джуна - это взять разом 4 недели отпуска, положенных каждому россиянину в год, и просто усердно прочитать 1-2 книжки и попрактиковаться в IDE с задачками. Это уровень усилий как для подготовки к сдаче на водительские права.
Конечно, в мейл или сбер конкурс большой и 40 летнего пенсионера-росгвардейца, вкатившегося в питон, туда скорее всего не возьмут. Но в шарагу с 1с или конвейером интернет-магазинов - добро пожаловать.
Почему ты не смог сесть и нормально подготовиться к собесу?
Причина №1. Ты неусидчивый, неорганизованный, ты просто не можешь ни на чем сосредоточиться, ты не можешь заставить сам себя что-то делать. Ты обречен на неудачу в любом начинании.
Причина №2. Ты привык по жизни всегда делать всё наотъебись, всё, что ты делаешь, ты делаешь как говно. Авось прокатит. Таких людей не мало и они опасны, особенно в ответственных профессиях. Они хуже умышленных вредителей. Но в программирование они всё же зачастую просачиваются.
Причина №3. Ты просто тупой. На самом деле нет. Умные программисты нужны очень редко
Как из студии экспортировать настройки цветов для различных кейвордов?
Заебался на разных компах вручную это натыкивать.
> Сможет ли он самостоятельно написать парсер для составной формулы
Лол что это за хуйня сейчас была? Это второй, блядь, курс МухГУ. Писал на си и ничего.
И компиляторы писали, и субд разрабатывали порстенькие.
Я это просто так к слову вспомнил, да, порог входа на самом деле действительно низкий, учитывая с какими кадрами я работаю и даже если у меня встают волосы дыбом, они - нужны, потому что работы много и тех у кого есть образование на нее кидать как-то не с руки. Другое дело, что то про что ты там говоришь - это не какие-то охуенные знания, которые хуй где найдешь - это программа среднего такого провинциального вуза в айтишной кафедрой. Любой студентик это делает: пишет парсеры, лексические анализаторы, компиляторы, пишет субд, пусть и простые относительно тех что на рынке, крутит деревья и т.д. Просто нужно отделять программиста от айти-макаки, вот и все.
>Это второй, блядь, курс МухГУ
Ты этому учился в техническом ВУЗе на программиста, где преподы на лекциях и семинарах тебе про это рассказывали.
А у меня за плечами было только 2 года учебы в платной гум. шараге (для отсрочки) с последующим отчислением, когда получил реальную негодность и не захотел, чтобы мамка платила за эту ненужную хуйню, и пошел работать.
И когда я уже одной ногой вкатившись сталкивался с подобными задачами типа парсинга с вложенностью, это было для меня сложно, но зато когда я такое решал, то до сих пор помню, что чувствовал себя молодцом.
А в целом вообще, интересно, какой процент людей, работающих программистами, могут написать алгоритм для ханойской башни, для быстрой сортировки без рекурсии и без её имитации через собственную реализацию стека, для обхода лабиринта, муравьиный алгоритм для задачи коммивояжёра и т.п. Без ограничения по времени, но и без гугла и подсказок.
>Как в сишарп реализованы круды через ORM
Довольно просто и удобно.
>Как в сишарп реализованы круды через нативные SQL запросы
Довольно сложно и неудобно.
> переменную паблик
Под переменной ты поле подразумеваешь?
Наверное. ты имел ввиду нахуя вообще проперти нужны
Ради инкапсуляции, сначала, возможно, проперти у тебя ничем не будут отличаться от полей
Но потом тебе могут понадобится какие-то манипуляции проводить с этими полями перед их получением с помощью get или проставлением с помощью set. Вот тогда они и пригодятся.
> предопределенные get, set
А так переопределением ты в производном классе можешь возвращать/проставлять значение по-другому чем это было в родительском классе.
Такие проперти должны быть помечены как virtaul чтобы их переопределить с помощью override.
В том что ты можешь логику дополнительную в них вставить.
Допустим твое приватное поле хранит температуру в кельвинах, а ты пользователю хочешь отдавать в цельсиях и давать задавать в цельсиях. Или ты хочешь чтобы не выставляли null или еще что-то. Если у тебя тупо Get-Set - можно действительно обойтись полем открытым, просто это дурной тон, потому что семантически поля должны хранить внутреннее состояние, а свойства - то что ты хочешь дать пользователю класса трогать.
>просто это дурной тон
ООП головного мозга - это плохо.
Если ты пишешь тип, в котором гарантированно поле - это просто поле, как есть, и никакой доп. логики там не может быть по определению, то это поле надо делать публичным полем, как это делают в стандартной либе. Принцип KISS превыше всего.
В целом, если ты пишешь структуру, а не класс, то скорее всего поле должно быть открытым. Кроме того, если ты пишешь ридонли структуру (а обычно именно так и следует делать), то гет на ридонли поле - это уже совсем кукухой надо поехать.
Учитывая что в С#
между написанием
public string myField
и
public string MyField {get;set;}
Разница большой в плане трудозатрат нету, то проще второе писать
Так меньше будет доебок со стороны коллег
>>1972530
Я если, что под предопределенными имел ввиду вот эту конструкцию int number (get; set;). Просто визуально это все потом выглядит как будто ты просто к переменной обращаешься, так что мне не было понятно зачем такая проперти вообще нужна.
Но если я понял по твоему сообщению
> А так переопределением ты в производном классе можешь возвращать/проставлять значение по-другому чем это было в родительском классе.
Это типа заглушка, чтобы если потом понадобится какая-то проверка или модификация перед присвоением в другом классе переписать.
Ну как бы любое решение должно быть обосновано.
В System.Numerics такая дичь почему-то не используется, и коллеги тех, кто это писал, как-то стерпели. Поля структур там - это публичные поля. Проперти там - это действительно проперти, т.е. свойства, отражающие какие-то аспекты внутреннего состояния, а не оболочки полей.
Тупой коллега, начальник-самодур и т.п. - это жизнь, с этим приходится работать и находить компромиссы, да.
Хз, у меня проблемы такой нету
Я если что-то начал делать, меня хуй чем отвлечешь, такой я аутист.
Ну, у тебя в возврате динамик-типов явно указан нативный для твоей среды тип - строка либо массив строк, не удивительно, что он их распознает. А у меня там какой-то мусор, который приезжает через межпрограммный интерфейс. Я не особо понимаю как все работает, но даже судя по тому, что VS не подсвечивает, не автодополняет и не показывает ошибку на абсолютно любом вызове для dynamic (даже если вписать туда что-то вроде .getMyDick()) то в рантайме там просто происходит поиск по имени метода и сигнатуре, а типа как такового может у него и нет.
В любом случае, я уже разобрался с проблемой через рефлекшн (5 секунд в гугле, больше сюда писал, вот уж правда двачеебы неисправимы). Если сделать вот так:
Type t = dynObj.GetType()
то можно у полученного объекта через .Name узнать его имя. Короче, для массива тип System.Object[], а для одиночного объекта - __ComObject. Этого достаточно, чтоб не ебаться с try-catch, тем более что я могу там же получить список всех методов, полей, признак массива, признак что это КОМ-объект, и даже небо и аллаха. Теперь проблема в том, что я для любого объекта, который приходит из этого SDK, как динамик, и не является массивом, вижу этот же тип - __ComObject, и я не могу различать теперь их между собой (разве что по характерным именам методов). Ну и никакого объявленного типа "__ComObject" у меня в проекте нет. Мне уже хватает инфы чтоб задачу сделать, но хотелось бы доразобраться, гуглю сейчас как вообще шарп работает с КОМ и что можно сделать с такими объектами.
>>1971834
да прекрати, это общеООП-шная хуйня. для меня шарить было бы если б я нормально понимал как именно .NET устроен и как все это на более низком уровне работет. А просто кододроч тут как и на других околосишных языках
Угу, а завтра тебе нужно добавить дополнительную логику, типа невозможности изменить поле после того как оно установленно. Сделав изночально свойство ты просто добавишь эту логику там, если у тебя было поле - ты будешь вынужден везде где дергалось поле менять логику. Охуенный кисс получается.
А, ну да, такие же как ты думают, что вот порешали на первом митапе и все - у нас все железно, и не выйдет так, что мы тупо бизнес не поняли, не поняли предусмотрели что-то и т.д.
А ровняться на стандартную библиотеку это вообще пиздец. Или по твоему - охуенно кидать экспешн вместо того чтобы дать классу интерфейс который будет однозначно говорить, какие методы/свойств есть у класса, а какие - нет? Хули, стандартная библиотека так вот делает в куче мест. Давайте все как там делать: нахуячим абстрактных классов, нахуячим дублирующих классов, потому что те что мы нахуячили ранее конфликтуют, и будет у нас 3 разных цвета, дохуя стримов, жопой брашей. Охуенный ты ориентир выбрал, няша. И то что майкрософт сами признали что говно сделали и пытались по человечески передалать, это так.
1)Пересоздавать БД перед каждым тестом (через темплейт)
2)Очищать таблицы и заполнять заново перед каждым тестом
3)Использовать две БД - одну для тестов, где данные только читаются, другую для тестов где есть записи в бд (бд созаются и удаляются перед/после всех тестов).
Мне кажется третий вариант лучше, тем более что первые два завалятся из-за параллельного выполнения тестов (или нет?). А какие есть нормальные варианты?
а чем доступ по индексу отличается от доступу по аргументу? короче, чем fun(x, y) отличается от fun[x, y]
Так-то ничем, кроме того, что ты более явно говоришь другим программистам, который будут с твоим кодом работать, что в коде происходит.
Индексатор сразу понятно, что там какая-то коллекция запрятана в классе с которой ты хочешь чтобы работали именно через индксатор, с методом это уже надо название метода читать и разбираться что за ним скрывается.
Те же проперти тоже можно на методы поменять
>завтра тебе нужно добавить дополнительную логику
Анон, если ты пишешь класс Customer, Order и прочий ентерпрайзовый ООП-шит, то там очевидно, что надо писать геттеры.
Если ты пишешь что-то элементарное, ну скажем, структуру Vector5, и тебе хочется перформанса, а возможно и нормальной интероперабелности с С в будущем, решение будет другим.
> сли ты пишешь класс Customer, Order и прочий ентерпрайзовый ООП-шит
> ну скажем, структуру Vector5, и тебе хочется перформанса
Дело в том, что вторым занимаются единицы.
БРАТЬЯ СЛОВЯНЕ ПОМОГИТЕ
Да. Но я не пробовал.
- .net reactor - на торрентах вирусы.
- babel obfuscator - пробная версия.
- eazobfuscator - пробная версия.
>А в целом вообще, интересно, какой процент людей, работающих программистами, могут написать алгоритм для ханойской башни, для быстрой сортировки без рекурсии и без её имитации через собственную реализацию стека, для обхода лабиринта, муравьиный алгоритм для задачи коммивояжёра и т.п. Без ограничения по времени, но и без гугла и подсказок.
Где-то около 100%, я думаю. Я бы посмотрел на программиста, который этого не сможет.
pageDef.PageSize = new Size( doc.PageWidth,doc.PageHeight);
где doc это FlowDocument
Если её закомментить, то дальше отъёбывает на этой строчке
sourceDocument.Save(stream, DataFormats.Xaml);
где sourceDocument это TextRange
И всё это с ошибкой
>Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток
Что не так-то?
Нужно ли изучать или ждать новую версию (Maui), которая выйдет в мае?
https://devblogs.microsoft.com/xamarin/the-new-net-multi-platform-app-ui-maui/
https://github.com/dotnet/maui
Я давно хотел заняться мобильной разработкой, но руки не доходили. А пока рожал, уже новую версию заанонсили
Райдер - огонь. Важно понимать, что в нем пока всяких визуальных редакторов и прочих плюшек, которые есть в студии, но зато с точки зрения работы с объемными солюшенами, состоящих из штук этак 25 больших проектов, он конкретно рулит. Тормозов нет, в отличие от студии он является честным 64 битным процессом и ограничения в 3 ГБ памяти у него нет.
Лол, зумерка не заставшего венгерскую нотацию видно из далека. Ты занимаешься подгонкой решения под ответ. В общем случае противоречие на лицо, и связано оно синтаксической коллизией языка и метаязыка. А если бы использовали слово class вместо object, такой коллизии не было бы. Рефлессия тут вообще ни при чём.
> Они разрабатывают компиляторы, ОС, СУБД, антивирусы, поисковики, навигаторы, архиваторы, игры, алгоритмы шифрования, блокчейн и т.п. Это их предметная область.
Ага, как в одном недавнем твите MS Research показалил нигретоску которая методами АИ выявляет а какие еще сорта нигеров недостаточно хорошо представлены в самой МС.
>Вкат в джуна - это взять разом 4 недели отпуска, положенных каждому россиянину в год, и просто усердно прочитать 1-2 книжки и попрактиковаться в IDE с задачками. Это уровень усилий как для подготовки к сдаче на водительские права.
Перетолстил, это не Джун это недотрейни. А с ментором был бы трейни. Джун сегодня это не циклы с массивами, это знание языка на приличном уровне +3-4 технологии сторонние, а возможно и ещё жабаскрипт впридачу. Ну серьезно, ты думаешь вкатыш осилит за месяц c#+ SQL+asp.net+JS? А вакансии именно такие висят
>Порог входа, например, во врача (со специализацией) - это 8-10+ лет учёбы, потом ещё 5-10 лет обязательной работы за 5-8к на селе с бабками, и только потом ты сможешь устроиться в норм клинику на зп js-джуна.
Ты ебанько путаешь теплое с мягким, точнее требования гос структуры и частного бизнеса. Тогда уж для корректного примера не 1эсника или js макаку в мелкой конторе бери, а какого нибудь кодера роскосмоса к которому тоже формальные требования вроде вышки.
Вот мой опыт:
>>1972878
Его очень хуесосят и, как мне кажется, за дело. Кстати, чтобы забилдить под ios тебе нужно будет реальное устройство на mac в той же локалке что и основной комп, я под это даже хакинтош собирал.
Ничего лучше чем юнити для настоящей кроссплатформы я не нашел. Движок пилится годами, поддерживаться тоже скорее всего будет сто лет вперед, пакеты подцепляются какие хочешь. А тот же замарин вон сегодня есть, а завтра ку-ку. Или гугл плей очередное требование выкатил, которое ты не можешь удовлетворить из-за прекращенной поддержки и никакой документации. А у тебя 5 проектов активных. Вот такие у меня мысли. Проще натив под каждую платформу выучить, один хрен они плюс-минус как сисярп
я точно знаю, что приложением буду пользоваться я и мой друган, может быть стоит просто по вайтлисту айпишники закрыть и успокоиться? или лучше сделать это, но еще с шифрованием и логин формой?
Bump
> зумерка не заставшего венгерскую нотацию видно из далека
>из далека
Не то что школьника, который не застал уроки русского языка
Это сугубо требование рынка.
Просто опыт показал, что программист и без ВО остаётся программистом и успешно справляется со своими обязанностями.
А врач без ВО - это в принципе любой твой знакомый 35+, который, особенно в России, уже гарантированно переболел всяким и готов дать крепкий медицинский совет, назначить дообследование и план лечения, причём решительно по любой жалобе.
Но как ты понимаешь, бабки с уринотерапией не особо пока способны заменить профессиональных врачей.
Даже на мед.сестру, чтобы кровь из вены взять, учат дольше, чем программиста С++ за 21 день.
Современная разработка вообще не требует алгоритмов на самом деле. Чуть менее чем все js-макаки и питонисты-датасцаентисты вообще не умеют в алгоритмы.
Программист, который нужен отрасли, это не творец, это даже не ремесленник, это заменяемая шестеренка на конвейер, сорт оф работяга со своим уклоном.
Мне не зашел.
С одной-то стороны есть прямо вкусные плюшки, но блядь, эта хуйня думает что она умнее меня и даже больше студии лезет.
Еще эта хуйня с подсветкой имени аргумента пиздец тупо сделана.
Вообще, объективно - для написания кода - лучше всего подходит VSCode. Вот серьезно, в нем - писать одно удовольствие, с одной стороны скорость и плавность, с другой это не совсем редактор и всякие автокомплиты и прочее таки есть. Для дебага - студия или райдер.
Так вот. Я понимаю, что это нехорошо так делать, но как иначе-то в таких вот случаях?
Здравствуйте, всем уважаемым шарпачам желаю здоровья. Вообщем я 3 курсник специальности мат и комп моделирования, тут нас учат пинать хуй и в поте лица зарабатывать баллы(оценки). Всё изучается ебанно хаотично - учишь мпиай+параллельно sql+делаешь ебейшие задачи биологии, химии и физ процессов на c++. Забил на эту хуйню хуй и учу чисто чтобы проходные набить. Только начал понимать что если щас сам не возьмусь за самообучение то после уника выйду полнейшим дном. Дк вопрос то с чего начать то, и главное как? Взял книжку по C# for players, на англ читается хорошо но после что? В чем смысл бытия этого ремесла? и вообще нужно ли все это? обращаюсь к кабанчикам с 300к н/сек
Скинь пожалуйста ссылку, буду благодарен.
Мне похую на язык унтерменшей. Усёк?
А почему у тебя так сделано:
public async Task Start()
Сдается мне он тоже void должен быть. Вообще, без сценария использования всей этой радости сложно что-то советовать.
Падажжи! Тебе вообще, в целом, нравится с кодом возиться? Как кабанчик с 15летним опытом разработки за деньги скажу так: 90% рабочих задач, где нужно писать код еще более скучные и как ты говоришь, ебейшие, чем твои лабы по биологии, химии итп. Так что если душа к этому не лежит, лучше другую сферу поискать. Вон у меня пара приятелей разочаровались в программировании и в финансы ушли (один из них прям круто поднялся, трейдер в инвестиционном банке, кайен, дом на новой Риге), другой в пилоты линейные на б737 (сейчас правда с карантином соснул хорошо). Короче, ради денег в ИТ точно идти не стоит.
Твоя мать шлюха должна мне два минета.
То есть по делу тебе ответить нечего, раз ты лишь в лужу пёрнул. Если рынок везде разный, то и копейки везде разные. Для пыхаря 50 тысяч в замкадье это средняя з/п, но для мобильщика это копье.
Еще раз говорю: у нас +30% от рынка. Кадров нет вообще. Если бы мы могли найти 10 мидлов-шарпистов, мы бы мгновенно устроили их к себе, сразу же загрузили их проектами и взяли бы больше проектов к себе на горб. Нам приходится отказываться от очень жирных и денежных проектов, потому что у нас не хватает рук. А рук не хватает, потому что на рынке нет кадров. Все очень просто.
Т.е. ты на серьезе говоришь, что не можешь найти 10 мидлов-шарпистов на 200к в месяц? Вам определенно что-то нужно делать со своим отделом hr.
Лол, так о том и речь что у вас днище контора с нищенскими зарплатами нацеленная на отлов местных студентиков которые по какой-то причине привязаны к месту и не могут сразу в нормальную контору устроиться. В мухосранях такая практика довольно распространена, если в городе есть программерский быдловузик.
>>1975197
Конечно всерьёз, на такие зарплаты даже дебил не пойдёт.
Ты не можешь найти мидлла на 150? Не пизди.
Потому что в теории старт может быть долгими таки его хотелось бы иметь возможность нормально отменить(в реализации подобной шняги у коллег например, просто виснет приложение и ждем пока таки запустится, меня вот это жутко бесило, особенно потому что вот идет интенсивный обмен, я блин, понял уже что все нормально и клиент на связи, а нет - жди пока закончится, никаких обменов в фоне, а кнопка отмены - не реагирует на нажатие).
На пике - примитивный сервер на сокетах. Это просто пример, потому что я думаю все понимают, что при старте там будет выделяться пул под получение сообщений, будет какая-то логика биндинга и это вот все, это хотелось бы таки не просто пульнуть, а подождать прежде чем дальше логику какую-то выполнять, ну в после того как стартанул - нужно же продолжить выполнение уже ожидая клиентов и как-то их обрабатывая, но вот незадача - если будет async Task - так не выйдет, ведь прием - бесконечный цикл и если его ждать, то все, тю-тю, а с другой стороны мне студия прям кричит: АПАСНА, АСИНХРОННЫЕ ВОЙДЫ ЭТО ПИЗДЕЦ, ГРОБ, КЛАДБИЩЕ, СДЕЛАЙ ТАСКОМ И ЖДИ!!!
У меня 2 года опыт работы, лололо микросервися, лололо сетевые технологии, лололо ебля с протоколами проприетарными. Ыыыыы, ЗОВОД!
За 50к в месяц и гарантию что не буду делать фронтенд согласен на все.
Я готов
У меня 5 лет опыта, зп 100к.
Только условие, брать без собеса, скажешь что я свой парень с сосача.
Ещё в школе я понял, что не одарён быстрым и мощным мозгом, основу языка я понимал и структуры данных и базовые алгоритмы, но олимпиадные задачки мне никак не давались, и не даются. С математикой и физикой было так же. Я их понимал, но мозга недостаточно, чтобы выйти на уровень олимпиадника.
Сейчас же пытаюсь на codeforces участвовать в соревах, получается делать только самую лёгкую задачку A, для более сложных не хватает интеллекта, чтобы решать сложные математические модели, и быстро придумывать нужные алгоритмы, или вообще даже спустя много времени решение не приходит в голову.
Потому что используешь конструктор без аргументов а в нем ты не инициализировал лист свой.
Имя пользователя
Пароль
Время отиправки сообщения
Хеш сообщения
Ну, т.е. совсем просто - все это одна ASCII строка, разделитель каждого поля - \0 а идентификатор начала и конца сообщения - 0xff.
Так вот, никакой сложности сделать это руками. Но хочется же, допустим, добавлять разные уровни для разных сообщений, вложенность и чтобы потом это нормально десерилиазавалось, а пилить это ручками - ну, заебисто же. Хотелось бы что-то вида:
[Serialize([0xff], [0xff])]
class Login{
[String.Ascii, EndWith('\0')]string Name{get;set;}
[String.Ascii, EndWith('\0')]string Password{get;set;}
[DateTime.Format(dd-MM-yy hh:mm:ss))]DateTime Timestamp{get;set;}
[Byte(4)] byte[] Hash{get;set;}
}
Есть ли что-то такое?
Объект класса сериализировать тебе не подходит?
Пиздец я долбоёб. Спасибо.
Неоднократно сталкивался по работе с не самыми умными программистами, да что уж там, даже откровенно туповатых видел. Они вывозили, по большей части, на крайне высокой усидчивости и минимуме прокрастинации.
Что они могли по алгоритмам ? Или это были фронт енд не думающие макаки ?
https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.integration.windowsformshost?view=net-5.0
>>1975903
Они как раз-таки бэкендом трейдинговой системы занимались. Худо-бедно справлялись за счет уже реализованного костяка проекта, вопросов знающим людям, ну и много их код на ревью назад на доработку отправляли с комментами. Справедливости ради, по долгу такие чуваки не задерживались.
Такие обычно вывозят за счет того, что пиздеть хорошо умеют и их поэтому начальство считает их незаменимыми.
Неее, в нашем случае все знали, что эти чуваки контракторы звезд с неба не хватают, но кого прислали на временное усиление команды, того и прислали.
Сто касается скила на общение с людьми, то этим туповатым программистам он реально нужен, просто потому, что им нужно часто ходить к прошареным чувакам за помощью.
А что такого сложного в бекенде трединговой системы, что нужен очень высокий интеллект ?
Допустим пользователь вводит свои данные в два поля. Если gmail подтверждает, что данные верные, то у пользователя открывается некоторое окно(юзаю WPF ), если нет - выводится label о неверности данных. Интересует сама реализация проверки без отправки письма.
Хо-хо. Там борьба за микросекунды, дружище. И от этого архитектура, скажем так, весьма своеобразная. Грубо говоря, есть медленная шина типа TIBCO, есть быстрая кастомная in-memory база и прочие радочти энтерпрайза.
THANKS
Да я в полном ахуе с себя, я отчаялся и пошел на двач писать, так как сидел минут 40 над ошибкой и действительно не понимал в чем дело
Полагаю ни в каком файле они не связываются, но как тогда они связываются по названию. Че это вообще за хуита?
Ну, когда стану 20к/месяц то могу дать тебе одну тысячу рублей со своей первой зп
Какие подводные?
небольшие. десктоп на винду щас не популярен. Лучше всего
Java и в андроид или бекенд/фронт, там без работы никогда не останешься, и она всегда будет даже в самом срано мухосранске
Есть метод Operaion, который делают некоторую работу и выбрасывает эксепшены если что-то пошло не так
Но есть случаи когда выполнение этого метода вообще не имеет никакого смысла и лучше бы его завернуть в таком случае в самом начале
При этом надо завернуть так чтобы об этом узнал вызывающий код
Можно конечно фигануть еще один эксепшен и его обрабатывать
Но так как это довольно распрастраненная ситуация может быть, в этом случае лучше вовзращать сразу бул удалась ли или нет попытка выполнения метода
Вижу тут 2 решения
Сделалть метод AttemptOperation, оборачивающий Operation
Перед вызовом Operation делать проверку и возвращаться фолс если попытка невозомжна
или
Ставить эти проверки перед каждым вызовом метод Operation в вызывающем коде, это всем другим разрабам нужно помнить будет, что эти проверки нужны
Ну и к тому еще в обоих вариантах, что Operation что AttemptOperation эти вызовы должны быть обернуты в трай кетчи
Мне ни один из этих вариантов не нравится
Можно ли еще что-то придумать?
Джезва говно.
Так жена не моя собственность.
Картина такая: позиций шарповых меньше чем джавошных, а программистов много, потому на приличные зарплаты конкуренция сейчас довольно большая. Про то что шарп потихоньку вымирает не согласен: .NET 5 с aspnetcore и общая нацеленность на бекенд, уже даже сейчас привела к росту таких позиций. Ну и понятно, много компаний ищут людей для поддержки легаси на WPF или совсем уж старья на WinForms.
У формы есть свойство owner
Туда нужно присвоить ссылку на родительское окно
Если у тебя диалог в сторонней библиотеке вызывается, передать в метод которые его вызывает ссылку на главное окно.
Судя по недавним статистическим выкладкам, проекты C#, .Net Core и TypeScript самые популярные и востребованные и это только. Шарп уже обогнал Джаву, а расхайпленный Питон уже соснул и востребован в основном на Западе.
Все таки Core выстрелил знатно.
Да, и желательно ASP.NET Core Web API и MVC. Больше всего радует, что можно и пофрилансить, писать небольшие сервисы.
Каким стеком знаний в идеале обладать на позицию джуна ?
Синтаксис
ASP.NET Core Web API
MVC
SQL какой-то
Что ещё ?
>У формы есть свойство owner
пробовал. У этой формы в овнере - нулл
>передать в метод которые его вызывает ссылку на главное окно.
Да, но мой вопрос и состоит в том, как его получить, чтоб туда передать
В случае, когда есть такой стек знаний - шансы устроиться джуном хотя бы на $700 примерно равны какому проценту ?
Прямопропорцианально тому сможешь ли уверено пиздеть на собеседовании или нет и тому, где ты живешь.
Для этого есть HorizontalAlignment="Right"
И вообще докпанель обычно используют для глобального лейаута окна, а не как вложенную панель.
Поставь в докпанеле свойство LastChildFill в false мб
Вот я пишу что-то вроде
govno.someCallback = (??????) =>
{
};
Как мне можно быстро посмотреть какие там параметры должны приниматься, и что она должна возвращать?
Сейчас я смотрю на сам делегат и с него переписываю параметры, но это очень неудобно - иде могла бы и сама мне все сразу подставить.
На работе попросили кусок моего кода, т.к. я делал проект в котором нужно таки было на уровень TCP спуститься и сейчас у других челов стоит похожая задача и они не хотят ебаться с этим и просили мой код "для примера". Ну так вот, я-то что сделал - я не ебался с сокетами, а просто взял и добавил к кестреллу свой кастомный обработчик, обернул это все в свои контексты и понеслась.
Вопрос вот в чем. Не упаду ли я в глазах кодеров такими вот решениями, если таки дам свой код? Просто мне самому не особо нравилось, но с другой стороны - мне так самому не хотелось ебаться с сокетами и прочим, вот и сделал так вот. Кестрел работает шустро, плюс получалось что конфигурирование этого дела совсем уж стандартно. Но мня все равно гложет совесть, кажется что нужно было как деды - все на сокетах делать, а не вот эти вот оберточки мутить.
К вопросу - давать или не давать такой вот код? Засмеют или не засмеют меня за то что я не ебался с сокетами, а решил что проще просто в кестрелле кастомный обработчик намутить и от него плясать?
Вот код на дропбоксе. https://www.dropbox.com/s/00921wjs9aeif6n/SimplTcp.7z?dl=0
В чем проблема-то собственно. По какой-то непонятной мне причине - не всегда что при чтении, что при закрытии соединения - соединение закрывается. Вот тупо проверил - одна две суки висит. ХЗ почему так. Я наверное тупой и что-то не так делаю.
Java по синтаксическому сахару и фичам это C# 2008
Джезва отсталое говно, и проекты на ней скучные.
Однозначно Java. C# только для разработки приложений под винду, а в росии такой работы очень мало. Учи джаву и иди в андроид, в разы больше денег и вакансий будет
что он не так сказал? То, что на джаве ты можешь зарабатывать деньги, а не создавать свистелки-перделки, как это делают студенты в этом треде? Или как другим долбоебам демпинговать свой язык?
мимокрокодил
Неа. Но у меня если че студия без аддонов, мейби это решарпер какой-нибудь добавляет?
двачую адеквата
Всегда демпингую где могу и другим советую.
>Java
>недоязык
проиграл с подливой. Аудитория шараги №8 села Малые Бугаи факультета ИИ в треде
Реально, в универе решетки для лаб, а стажируюсь на фронта потому-что на дотнете только стремный завод приглашал за формами посидеть
>Что они могли по алгоритмам ?
А что вообще средний программист может по алгоритмам? Особенно привыкший к популярным высокоуровневым языкам, где уже есть куча готовых либ на все случаи жизни?
Мне вот недавно требовался алгоритм для определения того, находится ли точка внутри полигона. Это известный алгоритм, из точки пускается луч и считается количество пересечений с гранями полигона. Если получаем нечетное число, то точка внутри. Но если луч пересекает вершину, или коллинеарен с гранью, то это особый случай, который надо выявлять и особо обрабатывать.
Мне в голову приходило только тупое решение - генерировать новый луч до тех пор, пока он не сумеет избежать особых случаев. Решил посмотреть, как это решают другие люди.
Попробовал код из первой строчки гугла. Он не проходит тест, на хитром примере даёт неправильный ответ. По итогу я потратил много часов изучая и тестируя код из выдачи гугла, я проверил наверное десяток реализаций, и все они ломались на некоторых особых случаях. Особенно забавно, что один из сайтов был посвящен изучению алгоритмов, и под примером кода было несколько тысяч комментов.
В итоге нашел магический код на С на персональной страничке какого-то деда из американского вуза, который четко работал, и был ещё и очень быстр.
вот поэтому нужно хорошо прокачатся в олимпиадном программировании, которое сильно прокачает алгоритмическое мышление, чтобы на задачи подобного уровня не тратить много времени и усилий, и быстро придумывать быстрые и правильные решения самостоятельно
Нихуя это так не работает.
Тем более что олимпиадное программмирование на 95% состоит из зазубривания.
Лол. Я тоже пытался реализовать подобный алгоритм своими руками. В итоге забил. Можно ссылку на посмотреть? Интересно как он работает с полигонами типа кольца или буквы V.
Если я пишу так, то работает:
var connStr = "Host=localhost;Port=5432;Database=SomeDB;Username=user;Password=1234";
Но я хочу подключиться, что бы как раз создать базу, т.е SomeDb еще не существует, а если я удаляю параметр DataBase из connStr, то сервер меня шлет нахер. Как быть?
Для каждого элемента последовательности выбирает выбирает последовательность и объединяет все это в одну последовательность. Т.е. если обычный Select проецирует один элемент источника в один элемент результата, то SelectMany один элемент источника в последовательность результирующих элементов и объединяет их. На мсдн ходил? Уж куда проще-то
https://docs.microsoft.com/ru-ru/dotnet/api/system.linq.enumerable.selectmany?view=net-5.0
https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html
int pnpoly(int nvert, float vertx, float verty, float testx, float testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if ( ((verty>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx) * (testy-verty) / (verty[j]-verty) + vertx) )
c = !c;
}
return c;
}
>вот поэтому нужно хорошо прокачатся в олимпиадном программировании, которое сильно прокачает алгоритмическое мышление
Алгоритмические задачи - это задачи уровня научно-исследовательских.
Известные ныне, кажущиеся простыми, алгоритмы разрабатывали умные люди зачастую в рамках своих phd по CS (или кандидастких по ф.-м. н.).
Это не решается в олимпиадном темпе.
Чтобы придумать грамотный алгоритм, нужно погрузиться в задачу, размышлять над ней, ложиться спать с мыслями о ней, просыпаться с идеями, которые хочется проверить в коде.
Хороший программист, если ему это реально надо, может помнить множество известных проверенных алгоритмов, нюансов их реализаций, держать их в голове и на кончике пальцев. Принять их и вариации на тему в ежедневной практике.
Но когда говорят, что программист должен уметь придумывать действительно не зазубренный им произвольный алгоритм для какой-то хитрой задачи, и ещё предлагают сделать это в коде в реальном времени, а то и на собеседовании, желательно минут за 30, то это просто смешно. Так это не работает.
программист олимпиадник в алгритмическом плане будет в разы быстрее и ему в разы легче придумывать нужные рабочие алгоритмы, чем не олимпиаднику. Простая аналогия - работа грузчика. Пауверлифтер будет в разы эффективнее и быстрее, чем обычный грузчик - ряботяга, который тоже может выполнить задачу.
Да нихуя. Я это уже говорю как олимпиадник. Вмдеть стандартные решения - да, ты благодаря олимпиадам можешь из крайне странного описания понять, что тут мы должны жадный взять, там мы должны большие числа применять, тут регрессия и т.д. Но вот когда становится нужно что-то новое - хуй там.
И ты просто почитай как квиксорт был придуман. Дядька работая преподом в союзе несколько лет взял и придумал его в ходе работы над совершенно другим проектом , и казалось бы крайне хуевый баблсорт взял и модифицировал так, что тот стал не хуйней для показывания на парах, а штукой, которая долго была одним из самых популярных алгоритмов.
>и казалось бы крайне хуевый баблсорт взял и модифицировал так, что тот стал не хуйней для показывания на парах
Бабл-сорт вроде не так уж и плох на очень маленьких арреях так как у него нету оверхеда.
И еще: как у Blazor обстоят дела с HLS (Http Live Stream)?
Там мусор с пола подбирать надо, не хотеть.
Он не может исполнять код, даун.
Ты дурак.
Это просто просмоторщик, не умеющий исполнять код. В общем, бесполезная хрень, тот же самый блокнот.
Там можно компилятор и автокомплит подрубить. Зайди в список плагинов, я уверен на 100%, там для шарпа есть
Могу я ставить знак равенства между code и полностью опенсорсным вариантом codium? Там что вводить, чтобы всё это подрубить?
Впервые слышу про него, но думаю да.
https://docs.microsoft.com/ru-ru/dotnet/core/tutorials/with-visual-studio-code
Ну наверное, попробуй. Правда я чет не понял почему у тебя там разработчик расширения мухаммад какой-то, а не майкрософт https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp
Картинку забыл.
Что значит без отладчика? Я скачал нормальный VScode и установил то, что на первой картинке, просто попытался запустить код на второй картинке и выбрал сверху .NET Core и получил третью картинку...
Затем я возвращаюсь на вторую картинку и снова пробую нажимать F5, так как мне похуй, что там на англюсике на третьей картинке написано, ведь я его не понимаю, и получаю хуй. Да, я языковой нацист.
Для такого запуска нужно создать json для билда/отладки.
Когда появлялось "не удалось найти задачу build" нужно было клацнуть настроить задачу. Там автоматом создается дефолтный жсон. Сохраняешь и все будет так билдится.
Но вообще, если у тебя net core cli стоит - просто открой вкладку консоль отладки и пропиши netcore run
То, что прекрасно запускается в VS2019 требует танцев с бубнами во всех прочих средах, которые я пробовал. ЗАЩО???!!! Что оно от меня хочет? Сделал всё, как та написал.
Кстати, я выбирал после "Настроить задачу" .NET Core. Может, это не то?
Во вкладке терминал.
Это создаст тебе новый проект. Список шаблонов есть на сайте MS.
Но вообще, если тебе проще - пользуйся VS обычной.
>>1980148
Я проследовал этой инструкции и оно работает.
https://docs.microsoft.com/ru-ru/dotnet/core/tutorials/with-visual-studio-code
А нельзя как-то обойтись без ввода какого-то говна в консоль? Я не линуксоид и больше предпочитаю клацать по кнопочками, я не дрочить на чёрную консоль.
И да, мне нужно установить среду разработки на C# и на C/C++ на диск D на устройстве, где просто нету места на диске C для чего-то, кроме самой винды и МС офиса, так что VS сразу нет.
Для этого делается напрямую из дот.нета вызов функции SetDIBitsToDevice из gdi32.dll.
Это работает намного быстрее стандартного System.Drawing.Graphics.
В функцию SetDIBitsToDevice передаётся как аргумент указатель (IntPtr) на первый пиксель.
Это функция Paint на картинке. Она получает в качестве аргумента _pArray, который запинен через GCHandle в конструкторе класса (и распинивается в финализаторе). И перед каждой отрисовкой вызывается Marshal.Copy(BD.Scan0, _pArray, 0, _width * _height);
Т.е. каждый раз мы копируем данные пикселей из BitmapData BD в запиненный буфер _pArray.
В своём коде (функция Paint2 на картинке) я избавился от этого копирования, которое на 4К очень затратно и снижает FPS. Я сразу передаю BD.Scan0 в SetDIBitsToDevice. И это работает, пока ничего не ломалось. Могут ли быть с этим проблемы?
Ведь по существу GC в любом случае не может двигать в памяти BD.Scan0, т.к. в принципе, то, если возвращаются указатели, то значит они и так запинены или зафиксированы. Поэтому копирование в запиненный буфер не должно быть нужно. Но автор с хибра, явно разбирался в вопросе больше, чем я, тем не менее, делает это. Зачем?
Поясните про этот момент.
Кстати, могу ли я без использования рефлексии получить Scan0 битмапа без LockBits, если мне нужен битмап целиком? Ведь по существу при LockBits опять идёт не нужное копирование в памяти. Я конечно мог бы вообще не использовать дотнетовскую обёртку битмап, и рисовать через SetDIBitsToDevice пиксельные данные из обычного массива. Но мне нужно писать текст на битмапе, а для этого мне всё же нужен System.Drawing.Graphics. Разбираться с нативными функциями винды для этого смысла нет, т.к. Graphics делает это быстро.
Результат тот же. Я хочу консоль как на второй картинке, я категорически не приемлю вид как на первой. И хотелось бы кнопки для создания проектов, чтобы в консоль ничего не вводить и не держать в голове в хуй не упёршиеся команды, я же не линуксоид дрочить списочки команд или в голове всякий мусор держать.
Вторая картинка.
Ну типа, в программировании нужно постоянно кучу всего учить, и запомнить пару команд на фоне остального не выглядит чем-то таким, для чего тебе прям стараться придется, чтобы запомнить.
Это другое, дебильные команды вместо нормальных кнопок и команды-слова в языке программирования не одно и то же. И как всё же запускатть программы в VS code с выводом в обычный cmd? Пока оно всё в отдельном окне, VS останется для меня единственным вариантом.
Расскажу вам про шарп vs джава. У меня был большой проект, которым занимался не много не мало, а 6 лет - трейдинговая платформа в одном инвест банке. Серверная часть, как водится в банках, на джаве, гуй - WPF. Общались они по своему in house developed протоколу. Сам я на проект пришел когда он только только начинался на позицию простого сеньора. Потом года через 3 оказался на позиции product owner-а и отвечал за архитектуру гуёвой части. Так вот: в плюсы джаве можно записать очень хорошо настраиваемый рантайм (важно в плане перформанса), серверный дебаг и инструменты удаленного профайлинга. С дотнетом местами приходилось изобретать велосипеды / покупать всякие dotMemory / dotTrace за отдельные деньги. У джавы это все искаропки. В минусы джавы можно смело писать ненастоящие дженерики, которые теряют информацию о типах-параметрах в рантайме, в которых нельзя хранить примитивные типы. Stream API не дотягивает до LINQ. Короче когда работаешь с кодом постоянно возникает ощущение, что джава намного более отстала по времени, чем шарп. Собственно в dotnetcore MS и пытаются прижать хвост джаве и в сфере серверной разработки.
например есть два ретурна зависимо от того как проходит атентификация один возвращает какой-то мусор типа страницы для домохозяек а другой страницу где хентай с лолями, они будут использовать какой-то краулер на запросы которого дотнет будет всегда отвечать положительно?
Ну предположим краулер, но что если контент будет возвращаться в зашифрованном виде и без моего ключа его расшифровывать 100 тыс лет, не будут же они использовать квантовое превосходство ради такой ерунды правда?
И еще, как эти бекдоры работают на винде и линуксе? они вообще на линуксе работают? Я не уверен, что они могут работать без подходящего ядра.
если кто знает страницы где подобные вещи разжёваны буду очень благодарен, можно и даркнет, было отлично если в даркнете, буду благодарен в двойне
>ненастоящие дженерики, которые теряют информацию о типах-параметрах в рантайме
я как же вы их хуевертили, что они отпадали? Через 100 мапперов?
>Stream API
Теже яйца, только в профиль. Могу поспорить, что все равно писали на нативном Sql запросы
Тем не менее, не будет утечек, как это обычно случается с C#, unsafe код - выстрел в ногу
Мелкософт жидко серанули, что сделали опенсоурс так поздно, да и кроссплатформенность из жадности не вводили. А так могли бы уже выйти на уровень с Java.
Так или иначе - рынок покрыт, специалисты есть, постоянные свитчи туда-обратно. Не знаю, что должны мелкософт сделать, чтобы вытеснить Java с рынка. А по сабжу, коньюнктура теряется только из за переката в Kotlin - за ним будущее. Да и альтернатив много нарисовалось, Go/rust/node, тот же ror, immortal пыха.
Устраивать холивары безмысленно, достаточно смотреть на спрос и понимать, что сейчас в тренде
>>1980296
только фронтдоры, из подветренной только мелкософты заходят
и кстати да, я бы посмотрел, как запели людители .NET, если бы все нормисы поголовно не юзали Шindows. У меня все.
>как же вы их хуевертили, что они отпадали? Через 100 мапперов?
Хочешь сказать, что type erasure для 2021 года это нормально? Ну ну.
https://docs.oracle.com/javase/tutorial/java/generics/erasure.html
>>1980779
Если бы у бабушки были...
Если по делу, то дотнет справедливо занимает свое место под солнцем и сейчас действительно наблюдается рост именно дотнет бекендных позиций на фоне общего спада числа дотнет вакансий из-за всеобщего ухода с WinForms / WPF на веб.
Да, про стримы забыл.
>Stream API Теже яйца, только в профиль. Могу поспорить, что все равно писали на нативном Sql запросы
Дядя, о каком SQL речь ведёшь? Я про in memory операции с данными вообще-то. Если детально, то проблема в том, что в джаве нет extension methods на которых, собственно и сделан LINQ. Из-за этого некоторые вещи сделаны неочевидно. Сравни:
c#: .ToList()
java: .collect(toList());
Вроде бы одинаково, но уже не так очевидно. Ну и code completion тут не особо поможет.
>unsafe код - выстрел в ногу
Вот не поверишь, ни разу в продакшене unsafe не использовал. Впрочем было один раз в рамках одного proof of concept, но потом этот модуль откололся в соседний проект и был на плюсах переписан.
>Устраивать холивары безмысленно, достаточно смотреть на спрос и понимать, что сейчас в тренде
Вот тут согласен. Позиций на джаве намного больше, по деньгам - на позиция лидов тоже самое. На позициях типа простого сеньора - джавистам чуть-чуть больше у нас дают. Лично я на джаве писать не люблю, хоть и умею. Тот же спринг рулит, да и вообще AOP на шарпе так и не прижилось. Все от проекета зависит, где какой инструмент лучше подойдет.
Что желтельно знать?
Кроме очевидного ASP.NET Core, JS, какой-то фронтенд фреймворк.
Сам последние 5 лет работал десктоп разрабом.
Насколько этот опыт имеет значение?
Бэкенд - это сразу базовый SQL, EntityFramework или еще какие-то ORM. Обязательно надо знать что из себя представляет SSL, да и сертификаты вообще. Докер надо знать. На хитрые вопросы по гиту отвечать.
> На хитрые вопросы по гиту отвечать.
Можно пример
А то я сам работаю с гитом через студию и ничего кроме создания веток, мерджа веток, пуша, пулла, коммита, стейджа и очень редко чери пика не приходилось исползовать
До этого довольно долго работал вообще через свн.
Должно хватить: joins / group by + having / умение строить и читать планы запросов
>>1980964
Достаточно будет заботать вот такое: https://www.edureka.co/blog/interview-questions/git-interview-questions
>erasure
хотели сахарка? Хавайте
>занимает свое место под солнцем
Где то рядом с крестами и пыхой по спросу. До Java, как до луны
>>1980929
>нет extension method
да, это солидный козырь в рукаве, хз почему они еще не запилили в джавку
>Лично я на джаве писать не люблю
каждому свое, но хотелка не всегда кормит желудок. Вот TS я думаю взлетит, хотя типизация все еще слабая, как для компилируемого языка. И будут все .NET-тчики фулстека. Скоро завезут какой ни будь мелкософтовский деплоймент контейнер и будете мастер на все руки. Сам себе фронт, сам себе бэк, опа -архитектуру под БД выкатил, опа - деплой по пайплайну пошел.
.NET dev - Человек аркестр
>>1980937
>Сам последние 5 лет работал десктоп разрабом
Ты сразу на мидла хочешь прыгнуть? Если да, то учи Core, response-required pipeline, middleware и как я писал выше - смотри в сторону TS
Какой-то метод расширения. С тупым неговорящим названием.
Соорудить свой локал сторедж на диске или в базе
Хранить данные там по признаку
Считывать эти данные на открытии окна
Это у тебя блок кода в ифе маленький, а теперь представь если у тебя в ифе было бы 50 строк
Явно выйти одной строкой из метода лучше выглядит.
И следующие 50 строк будут на уровне основного кода в методе, а не вложены в иф.
>instead of assigning access rights to launch a nuclear strike to Donald Trump (a
user), you would assign access rights to launch a nuclear strike to the President of the United States (a role) and then add Donald Trump as the sole member of that role. Then, in January 2021, you do not need to change any access rights for the POTUS role, you can just replace the
Donald Trump user with the Joe Biden user. Or not. ;-)
Это из linqpad вроде
А что еще остается чтобы восстановить состояние интерфейса после перезапуска программы?
Например у грида есть возможность показывать/скрывать колонки, после перезапуска программы в гриде должны быть те же колонки включены как и в последний раз.
Остается только хранить его где-то в каком-то виде.
А значение статика пропадет после перезапуска.
select UserDomainName from dbo.[User]
выдается вся моя таблица, состоящая из UserDomainName.
Но при
select UserDomainMain from dbo.[User]
where UserDomainMain = 'Vasiliy.Pupkin' или даже 'V%'
выдается таблица без значений, Почему такое может быть?
(Vasiliy.Pupkin в таблице есть офк)
(алсо БД не моя и когда я копирую из нее значение Vasiliy.Pupkin в конце появляется два пробела, мб это как-то влияет? (но почему % тогда не работает непонятно)
public int x;
static void Main()
{
Program test1 = new Program();
test1.x = 3;
Console.WriteLine(test1.x);
Program test2 = new Program();
test2.x = 5;
Console.WriteLine(test1.x);
Console.ReadKey();
//Output: 3 3
}
Я ожидал увидеть в выводе "3 5", так как test2.x ссылается на ячейку в памяти, уже занятую test1.x.
"x" ведь представляет ссылочный тип, значит, если поменяется значение у какого-то объекта, то у всех объектов оно должно поменяться, разве не так?
public int x;
static void Main()
{
Program test1 = new Program();
test1.x = 3;
Console.WriteLine(test1.x);
Program test2 = new Program();
test2.x = 5;
Console.WriteLine(test1.x);
Console.ReadKey();
//Output: 3 3
}
Я ожидал увидеть в выводе "3 5", так как test2.x ссылается на ячейку в памяти, уже занятую test1.x.
"x" ведь представляет ссылочный тип, значит, если поменяется значение у какого-то объекта, то у всех объектов оно должно поменяться, разве не так?
Нет, x это int
Int это тип значение, а не ссылочный тип
Но так как поле x является членом класса Program, то его значение находится в куче по тому же адресу где находится объект test 1 или объект test2.
Заметь я говорю именно значение, если бы у тебя полем класса был другой ссылочный тип, то это было уже другая ссылка, которая указывает на другое место в памяти.
И в твоем примере ты вообще меняшь значение разных экземпляров класса типа Program, поэтому такой и результат.
> Program test1 = new Program();
Создаем новый объект типа програм, записываем адрес в переменную тест1
> Program test2 = new Program();
Создаем новый объект типа програм, записываем адрес в переменную тест2
тест1 и тест2 ссылаются на разные объекты.
Чтобы правильно затестить сделай так:
Program test1 = new Program();
test1.x = 1;
Program test2 = test1; //тупа копируем адрес, значит и тест1 и тест2 будут ссылаться на один и тот же объект
test2.x = 2;
Console.WriteLine($"{test1.x} {test2.x}")
Работает! Спасибо
В общем. Задача.
Дано. Некое множество чисел(допустим дни недели). Дана упорядаченная последовательность этих вот чисел(допустим понедельник, вторник, пятница, суббота, воскресенье). Нужно - вычислить количество дней от произвольного элемента последовательности, которое необходимо прибавить чтобы получить произвольный элемент этой же последовательности.
Ну, чтоб было понятно, вот есть дни недели, 1 2 3 4 5 6 7, допустим у меня есть последоваетнльность 1,2,5,6,7. Допустим я хочу найти расстояние от 2(вторник) до 5(пятница). Все просто. Я посчитаю разницу. Но вот я нахожусь в 7(воскресенье), мне нужно найти количество дней до понедельника(один) и я не понимаю как это без ветвления сделать. Т.е. с ветвлением-то я прото поняв что разница отрицательна - добавл 7 и получу как раз 1. А вот как сделать решение в котором бы не нужно было бы использовать ветвление?
Программирование отупляет. Я в коде это тупо циклом сделал и меня это триггерит.
Я поясню зачем оно надо. Вот я хочу сделать расписание запуска каких-то задач на сервере, допустим - каждое воскресенье или каждый первый день месяца - нужно составить какой-то сводный отчет и промежуточный данные за неделю/месяц в нем посчитать и почистить. Вот. Я сделал структурку для работы по расписанию в формате cron, у расписания есть метка времени когда последний раз оно запускалось. Ну, и вот допустим, если я решу составить расписание вида: каждое воскресенье, которое является первым января - я буду проходить по циклу много шагов(больше чем оно заслуживает), чтобы поставить метку времени следующего ожидаемого запуска. Это не так критично на самом деле, но просто блин, я чувствую себя тупым из-за того что вот так вот хуячу, вместо того чтобы красивенько посчитать число месяцев, дней,часов, минут относительно прошлого запуска, которые необходимо добавить чтобы оказаться в следующей точке.
Да не перезапуска программы, а окна условных настроек которое вызывается как ShowDialog().
Тебе в любом случае в определенный момент придется хранить где-то настройки.
Лучше сделать это как человек и сразу использовать одно решение для всего. Это будет либо JSON-файл, либо какой-нибудь SQLite.
Если тебе именно статика не нравится. Делай свои класс Options, которые будут прокидываться к нужному окну. Чтобы менеджить их - синглтон OptionManager из которого нужную опцию можно получить либо явно запросив либо по событию OptionChanged<TOption>. Но это все сложнее и требует больше кода, чем просто взять и в нужном месте дергнуть контекст SQLite и считать.
Debug/Options/General/Just My Code не стоит флажок, часом?
var weekDay1 = DayOfWeek.Thursday;
var weeekDay2 = DayOfWeek.Monday;
var daysDiff = (7 + (weeekDay2 - weekDay1)) % 7;
https://stackoverflow.com/questions/9219083/get-difference-in-days-between-two-weekdays
Спасибо за ответ, тогда уж лучше статик костыль. Я думал можно возвращать значение закрывающегося окна кроме булевого.
Подожди, а почему статик? Твое окно наследник Window же. Делаешь на нем просто пропертю с результатом, никакую не статическую. Типа так:
public class Window2 : Window
{
public MyResultType Foo {get; private set;}
...
}
public class Window1 : Window
{
...
private void btnPromptFoo_Click(object sender, RoutedEventArgs e)
{
var w = new Window2();
if (w.ShowDialog())
{
var foo = w.Foo;
}
}
}
Поясните, сколько времени понадобится для изучения сабжа если последний раз погроммировал на бейсике в 92 году? Пары месяцев хватит, чтобы написать приложение для коммуникации с вызывной панелью hikvision и используя их SDK?
> if (w.ShowDialog())
> {
> var foo = w.Foo;
> }
А, нихуя себе, у меня ума не хватило до такого додуматся, я просто делал статик переменную в первом окне и во втором менял ее.
45. Не осилю думаешь?
Возмжно ли слелать сайт с базой данных SQLite? Если да, то где найти примеры подобных сайтов?
Сделать то можно, но работать то оно хз как будет
Потому что SQLite на записи в базу лочит весь файл базы целиком.
Ну если использовать SQLite только для персистенса данных, а так все в памяти держать, то можно. Но тут возникают другие проблемы )) Судя по самому вопросу о возможности использования SQLite на бэкенде, юному падавану лучше посмотреть в сторону каких-то других компактных баз данных.
Можно же и так через Type все поля получить и сохранить, никакой аттрибут тут вообще роли не играет. Или это просто скорее как гарантия другим разработчикам, что если они видят класс, который помечен как [Serializable] - значит его автор гарантирует, что его можно сериализировать/десериализировать и будет все норм работать(ну и все эти форматтеры для большей безопасности не пропустят класс без такой гарантии)?
И еще, нахуя BinaryFormatter сохраняет кучу метаданных? Ну ладно, это может пригодиться, но есть же задачи где это нахуй не нужно, почему нету стандартного класса какого-нибудь DumbFormatter, которы бы тупа сохранял поля без дополнительного мусора? Конечно можно и самому сделать, но странно, что его нету. Вот содержит класс два инта - значит 8 байт на всё, а не 100, как это происходит с бинариформаттером.
Как пример
Я работал на проекте в котором мы общались с сервером через .NET Remoting
Так вот если не пометить класс как Serializable объекты этого типа не были доступны по сети и валился эксепшон
А ремотинг с первой верси .NET доступен, как минимум для совместимости нужен
>Сделать то можно, но работать то оно хз как будет
>Потому что SQLite на записи в базу лочит весь файл базы целиком.
Бля. А при чтении не лочится? Можно читать через много потоков?
Да-да, я читал что-то подобное, мол можно использовать очередь,
писать данные очереди куда-то в кэш, и читать оттуда,
а потом из кэша сливать данные по принципу стэка FIFO.
Первая запись вошла в кэш, первой и пишется в базу, типа, и так для каждой каждая.
А что если в памяти базу данных развернуть (пикрил)?
Тоже будет лочится целиком, при записи?
>>1982608
Какие базы предлагаешь рассмореть? Из реляционных.
Чтобы были опен-сорц полный.
Именно из-за опенсорцности я смотрю в сторону сиквелайта.
Но это не клиент серверная СУБД.
А клиент-серверные СУБД - хуйня проприетарная, в большинстве своём, ещё и платные.
Видел вроде MariaDB опенсорцная, но я не тыкал её ещё.
Вообще не хотелось бы выносить базу данных на какой-либо сервер. Хотелось бы в виде файла сделать базу, и к нему уже коннектится из приложухи-сервера, на шарпе.
Чтобы читать и писать прямо туда, по мере необходимости,
и чтобы всё можно было на флешке таскать, а не коннектить хуй знает куда, на какой-то ёба-сервер, который может ещё и упасть.
>Бля. А при чтении не лочится? Можно читать через много потоко
Одновременное чтение разрешено
Но пишущая транзакция залочит всех читателей пока не закончит свою работу.
> А клиент-серверные СУБД - хуйня проприетарная, в большинстве своём, ещё и платные.
Чем какой-то Postgre или MySQL не устраивает?
Я сам с ними не работал, но они бесплатные.
> Вообще не хотелось бы выносить базу данных на какой-либо сервер. Хотелось бы в виде файла сделать базу, и к нему уже коннектится из приложухи-сервера, на шарпе.
Что-то я не понял
А сайт на флешке чтоли тоже будет хоститься?
>Вообще не хотелось бы выносить базу данных на какой-либо сервер. Хотелось бы в виде файла сделать базу, и к нему уже коннектится из приложухи-сервера, на шарпе.
Гугли что такое Docker. Делаешь образ с нормальной базой и твоим приложением и не паришься с деплоями - все в одном контейнере, такое как один раз настроил при разработке.
В сишарп нету стеков, векторов и прочих структур данных как в СТЛ с++ что ли? Я гуглю а мне либов ыдаёт с++, либо сишарп, но реализацию, а не готовый класс из стандартной билиотеки. Втф
Спасибо. анон. А то я как-то не так гуглил и зациклился.
> В сишарп нету стеков,
Stack
>векторов
List
>и прочих структур данных как в СТЛ с++ что ли?
Да вроде почти все есть.
>Я гуглю а мне либов ыдаёт с++, либо сишарп, но реализацию, а не готовый класс из стандартной билиотеки. Втф
Пикрил
Наверное, не совсем понял вопроса.
Нажатие кнопок внутри страниц, которые отображаются в браузере?
Ну, пишешь свою хтмл страниуцу, джаваскрипт отображаешь это все дело в браузере.
Только учти что за браузер та версия Internet Explorer, которая есть на компе.
>>1983702
Ну какбы патерны используют по мере их необходимости, исходя из конкретной задачи.
А не по приколу, чтобы просто было.
Что-то вроде такого?
Это если джаваскрипт твой
https://www.codeproject.com/Tips/130267/Call-a-C-Method-From-JavaScript-Hosted-in-a-WebBro
Если не твой, похоже вот это
https://stackoverflow.com/questions/15901997/c-sharp-reach-click-button-in-webbrowser
Ничего не использую. Нахуй не надо.
Пришел к мысли, что нужно просто писать чистый процедурный код в функциональном стиле. Все. Код стал декларативным, пропала хуйня с тем что думаешь о том, чтобы прокинуть какую-то зависимость через залупу, все пишется просто, модифицируется легко, а т.к. сейчас - микросервисы которые максимум в 10к строк на сервис выходят еще проще. Еще бы сам .net не был завязан на эти ебучие классы - было бы вообще заебись.
Фанат контента для вкатунов, почему я не удивлен?
>>1983704
>Ну какбы
про SOLID что ни будь слышал? Или у тебя на первом спринте в контроллерах DbSet-ы, а потом переписываете на репозитории, когда из щелей копипаст методов лезет, я правильно тебя понял?
>>1983712
откуда ты такое животное тут появилось? С Core 3.0 встроенный DI, а оно все функциональном стиле пишет. Надеюсь одного дня тебя кинут на сапорт такого же говна, которым ты сейчас срешь, чтобы ты понял, какого это писать функциональщиной в ООП языке
> я правильно тебя понял?
Наверное, нет
Я имел ввиду буквально, что я написал
Применять патерны просто так, чтобы просто их опробовать, не понимая для каких сценариев они уместны для каких нет.
>не понимая для каких сценариев они уместны
ты повторил фразу, которой обычно кормят вкатышей пытающихся абузить GOF где только можно. Ты видимо не работал на проектах и не знаешь, что у каждого архитектора есть свой подход структурирования и стилизации кода. Ты же блять не будешь WPF писать без MVVM? Или razor без MVC? Это тоже паттерны, но их функция так же очевидна, как и репозиторий, UOF или фабрика
Блэт, базы может немного и отличаются друг от друга, но поля у них должны называться одинаково
Да пусть называются одинаково, отдельный контекст создай, ентити воспринимает все имена в одном контексте как в один неймспейс, а вот если тебе надо что бы ентити работал с двуяма базами в одном контексте с двумя базами с одинаковыми названиями тогда ты в жопке
Вот например. Когда достаешь из MySQL (и в помело, и в оракле, одна хуйня!!) модель объекта, внутри которого должна быть модель другого объекта тебя фреймворк шлет нахуй и вместо второй модели отдает нулл. Но!!! Если перед этим достать таблицу с такими же объектами и сделать ToList(), эта хуета блядская все таки изволит корректно отдать обе модели. пиздец как бесит, ибо каждый раз доставать по три огромных таблицы, ясен хуй это минус производительность
Я помочь хотел, думал ты няша, а ты тут троллить начал..., работает с еф и о каком контексте не знает он, ясно, ясно, запишем запомним
> ты повторил фразу, которой обычно кормят вкатышей пытающихся абузить GOF где только можно.
Ну, я говорил скорее всего со вкатышем выше, если это не был ты сам
Ок, чем кормить вкатышей тогда посоветуешь?
Перечислить весь список паттернов и сказать используй ВСЕ
Это будет ему на пользу, он вкатился в тред с постом в духе
>Я в полнейшем ахуе
>без стороннего говна
>боссаный, обосраный, никчёмный блядский ef6
>Какое твоё, блять, собачье дело
>Хули ты доебался, пидор?
А потом оказывается что он даже документацию не читал и в принципе не понимает как это работает, так что токсик тут не я, искреннее хотел помочь, но понял что с его уровнем понимания его лучше просто послать нахуй отправить читать документацию
Я твою мать ебал.
Я понял, что за контекст ты имел ввиду. Они разные для всех моделей, разумеется
Нет, не текст, а 3D шутеры и подобное им (как на https://www.youtube.com/watch?v=tR30963rDig), а также геометрические объекты в консоли
Бака, ты где-то облажался, я специально проверял, когда создаешь отдельный контекст никакой такой проблемы нет! честно-честно!
один и тот же класс записался и отчитался с 3 разных дб с одинаковым названиями таблиц, поэтому очевидно что ты явно делаешь что-то не так, в любом случае дело в тебе, а не в еф, так что вместо мата и истерики читай документацию
Чел, делать то, что делаешь ты, я тоже могу, но вот если пытаться делать linq запрос, например, то вылазит эта ошибка. Я далеко не один такой, сотни людей с похожей проблемой есть, у которых в проектах использовались модели с одинаковым названием таблиц и полей.
>System.Data.Entity.Core.MetadataException: "Schema specified is not valid. Errors:
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type
И дальше идёт длинный список полей и их копий, которые нашлись
юзаю райдер для разработки на аспнеткоре. К проекту прицеплена куча зависимостей с нугета и огромная wwwdata.
Когда юзаю publish на впс, каждый файлик перезаливается, что делает процесс долгим и нецелесообразным.
Вместо этого просто собираю в релиз и через fz перекидываю dll приложения
Как нибудь можно заставить его не перекидывать все эти лишние файлы? Добавлять исключения пробовал, райдер при публише на них хуй клал.
Аноны, а какие есть по сишарп/дотнет конференции или выступления по аналогии с cppCon или c++ userGroup?
Они не подсвечиваются, я breakPoint поставил, никогда не дебажил что ли?
User FindUser(User user)
Как лучше возвращать результат, если User Not Found?
throw null
А если серьезно - практика говорит что нужно null возвращать. Просто указываешь в комментариях, что если не найден - null. Так во всех нормальных апи сделано, это чет нынешние смузихлебы обленились, им видите ли сложно проверку на null сделать и вообще они золотые рыбки.
if (decimal.Compare(new decimal(this.ConvertToInteger(0x2c, 4)), 4M) >= 0)
Если я верно понял, то здесь почему то пытаются вместо чтения определенного свойства класса напрямую обратиться к одному из байтов его побайтового представления.
Я правильно понимаю что это некий хак?
Сильно не бейте, я новичок в шарпе
Сами свойства класса перечислены ниже
private byte[] db_bytes;
private ulong encoding;
private string[] field_names;
private sqlite_master_entry[] master_table_entries;
private ushort page_size;
private byte[] SQLDataTypeSize = new byte[] { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0 };
private table_entry[] table_entries;
Алло, ты сигнатуру смотрел? Я должен вернуть User
>или что у вас там.
>Не троль тупостью.
нахуй ты отвечаешь на посты, если даже не знаешь базовых конструкций языка?
дополню свой пост - я обычно возвращаю new User, но это же блять костыль и для него мне нужна еще одна проверка на Null, не кошерно выглядит. Может кто знает, как это лучше делать?
чтобы ты/коллега через неделю/месяц/год открыл проект и понял, что там написанно. Зачем нужны ангуляры/vue/react/хуяк, если все равно сбилдит все в одну строчку?
Ну пиши. А еще можно писать императивный код без процедур. А еще можно писать сразу на ассемблере.
Вот у меня есть коллега на работе, который пишет в процендурном стиле, на все вопросы хули он не использует ооп, он говорит что ему так ПРОЩЕ, а я все усложняю, делать классы это пиздец ка СЛОЖНО для него говорит.
В итоге его код это куча методов на 200-500 строк кода с кучей ифов в котором в полной мере разбирается только он.
Зато он незаменим на проекте, вот и польза от процедруного стиля.
Еблан совсем? У тебя юзер - ссылка? Ссылка. null - ссылка? Ссылка. Следовательно - null - это такой же юзер. Нигде, блядь, сигнатура не нарушена.
Пиздец ты тупой. Я думал ты троллишь, а вон оно что. Пиздец. Может быть ты и передаваемые аргументы проверять не будешь?
Давай, тебе, еблану, пример приведу. Вот тебе сигнатура:
int GetUserAge(DateTime birth). Вот как ты думаешь, что тут должно произойти, если я передам дату больше чем сегодня. Да, мы получим отрицательное значение. Должны ли мы дальше идти, если получим отрицательное значение в вызывающем коде? Нет, вызываеющий этот метод код - должен проверить и сказать - стопе, хуйня какая-то, нельзя отрицательный возраст иметь, мы это как-то сейчас обработаем. Может быть ты думаешь что будет лучше кидать тут исключение? Да нихуя, это как раз будет неправильно, потому что с точки зрения логики - все верно. Возвращать какое-то специальное значение? Еботека и все равно нужно проверять, потому это нахуй не упало.
Так вот. Возвращая null - все ясно. Это валидное значение. Проверка вида:
User user = null;
if(user == null)
Даст true, если ты не еблан что лезет все переопределять. А значит вернув null - ты вернул валидное значение которое никак, блядь, не противоречит сигнатуре и если клиент кода - еблан и не ждет что ссылка может быть равна null - пусть страдает, потому что он еблан. А если ты - идешь на поводу у таких ебланов, то ты еще больший еблан.
Я все сказал.
>world of eblan
ты видимо на грабли NullReferenceException в своей жизни мало наступал, раз думаешь, что возвращать просто null это ок. Но на данный момент я и альтернативы не вижу - вернуть new User - хуета полнейшая, нет никого юзера, выстрелить exception - нахуй нужно, через фильтр не словит, приложение упадет. Поэтому по сути и вариантов больше нет.
1. #:
- Боксинг-анбоксинг, как, зачем, что если апкаст делать из одного типа, а даункаст в другой;
- Enumerable, Querable - отличие, применение
- Паралельное, асинхронное исполнение. I/O bound - что такое, как работает своими словами
- Extenction методы - зачем, как, какие использовал на практике;
- Отложенное выполнение;
- Ранее, позднее связывание;
- Аксессоры, доступность;
- Иерархия типов, почему Valuetype class?
- Что такое Using, foreach, IEnumerable? Разобрать до дочернего уровня;
- Блок Try-Catch, когда, в какой последовательности, какая специфика Exceptions;
- Value, reference types - различие, специфика. Стэк, хип;
- GC - поколения, малая, большая куча, индекс блока синхронизации, процесс выделения, отчистки, эфимерные объекты
- Рефлексия - как, зачем, где?
- Мьютексы и семофоры;
2. ООП
- 4 принципа ООП на одном примере;
- Модификаторы доступа;
- Sealed, abstract, static, struct, class - что общего и какие различия. Полезли в залупу - что же такое static модификатор (смотри ILDasm)
3. Паттерны
Non-GoF: Репозиторий, спецификация, ouf, MVC, MVVM, MVP, какие еще знаю?
GOF: Стратегия, фабрика, синглтон. Что жизненные циклы реквестов в ASP.NET? Различие Scope, transparent, singleton
4. ASP.NET
- Фильтры, атрибуты, контроллеры (а ты знаешь чем отличается BaseController от Controller?)
- Пайплайн прохождения реквеста туда-обратно;
- Зачем нужен scaffolding и что это такое;
- Какие сервисы использовал и зачем (CORS, DI, Swagger и т.д.)
5. EF и Linq
- LazyLoading (proxy реализация, Lazy type реализация), Eager loading;
- Seeds, map, builder;
- Linq методы - около 10 штук спросили, еще затронули тему обобщенных делегатов (предикат, Action/Func)
- Как написать свой LINQ с блекджеком и отложенным выполнением?
6. SQL
- Построение архитектуры;
- Связи - как отразить;
- View, Алиасы, процедуры;
- Различия JOIN-s;
- Индексы, ключи, деревья, бинатный поиск
7. JS, HTML, CSS:
- map, reduce - отличия, преимущества;
- поиск объекта, какие есть способы;
- DOM;
- CSS, SCSS, LESS, SASS - зачем нужны, что такое;
- Селекторы
- Много чего спрашивали - я практически не отвечал на эти вопросы и мало запомнил, т.к. в JS и верстке - я не силен
8. Общие вопросы
- Какие ДБ использовал? А non-relative?
- Какие ORM использовал? ADO/Dapper?
- Клиет на браузере получает ответ от сервера слишком долго. В чем причина? Как определить?
Вроде все, может что то забыл, т.к. мурыжили долго. По # я +- нормально отвечал, под конец с версткой, sql и ОРМ я уже поплыл, т.к. вопросы шли один за одним и без времени на подумать.
Итог - таки дали офер, но на испыталку и с ЗП $250. Я конечно же отверг, т.к. деньги смешные, а судя по тому, чем я буду заниматся - это легаси, еще и фул стэк с версткой.
Честно говоря, окончательно потерял мотивацию дальше заниматься C#, т.к. требования растут с каждым днем, нормальные компании не берут джунов, а в средних и помойках - хотят джуна за мидла продавать. Год назад я мог с базовыми знаения синтаксиса вкатиться в RoR, но подумал, что язык не востребованный. Такие дела, товарисчи.
1. #:
- Боксинг-анбоксинг, как, зачем, что если апкаст делать из одного типа, а даункаст в другой;
- Enumerable, Querable - отличие, применение
- Паралельное, асинхронное исполнение. I/O bound - что такое, как работает своими словами
- Extenction методы - зачем, как, какие использовал на практике;
- Отложенное выполнение;
- Ранее, позднее связывание;
- Аксессоры, доступность;
- Иерархия типов, почему Valuetype class?
- Что такое Using, foreach, IEnumerable? Разобрать до дочернего уровня;
- Блок Try-Catch, когда, в какой последовательности, какая специфика Exceptions;
- Value, reference types - различие, специфика. Стэк, хип;
- GC - поколения, малая, большая куча, индекс блока синхронизации, процесс выделения, отчистки, эфимерные объекты
- Рефлексия - как, зачем, где?
- Мьютексы и семофоры;
2. ООП
- 4 принципа ООП на одном примере;
- Модификаторы доступа;
- Sealed, abstract, static, struct, class - что общего и какие различия. Полезли в залупу - что же такое static модификатор (смотри ILDasm)
3. Паттерны
Non-GoF: Репозиторий, спецификация, ouf, MVC, MVVM, MVP, какие еще знаю?
GOF: Стратегия, фабрика, синглтон. Что жизненные циклы реквестов в ASP.NET? Различие Scope, transparent, singleton
4. ASP.NET
- Фильтры, атрибуты, контроллеры (а ты знаешь чем отличается BaseController от Controller?)
- Пайплайн прохождения реквеста туда-обратно;
- Зачем нужен scaffolding и что это такое;
- Какие сервисы использовал и зачем (CORS, DI, Swagger и т.д.)
5. EF и Linq
- LazyLoading (proxy реализация, Lazy type реализация), Eager loading;
- Seeds, map, builder;
- Linq методы - около 10 штук спросили, еще затронули тему обобщенных делегатов (предикат, Action/Func)
- Как написать свой LINQ с блекджеком и отложенным выполнением?
6. SQL
- Построение архитектуры;
- Связи - как отразить;
- View, Алиасы, процедуры;
- Различия JOIN-s;
- Индексы, ключи, деревья, бинатный поиск
7. JS, HTML, CSS:
- map, reduce - отличия, преимущества;
- поиск объекта, какие есть способы;
- DOM;
- CSS, SCSS, LESS, SASS - зачем нужны, что такое;
- Селекторы
- Много чего спрашивали - я практически не отвечал на эти вопросы и мало запомнил, т.к. в JS и верстке - я не силен
8. Общие вопросы
- Какие ДБ использовал? А non-relative?
- Какие ORM использовал? ADO/Dapper?
- Клиет на браузере получает ответ от сервера слишком долго. В чем причина? Как определить?
Вроде все, может что то забыл, т.к. мурыжили долго. По # я +- нормально отвечал, под конец с версткой, sql и ОРМ я уже поплыл, т.к. вопросы шли один за одним и без времени на подумать.
Итог - таки дали офер, но на испыталку и с ЗП $250. Я конечно же отверг, т.к. деньги смешные, а судя по тому, чем я буду заниматся - это легаси, еще и фул стэк с версткой.
Честно говоря, окончательно потерял мотивацию дальше заниматься C#, т.к. требования растут с каждым днем, нормальные компании не берут джунов, а в средних и помойках - хотят джуна за мидла продавать. Год назад я мог с базовыми знаения синтаксиса вкатиться в RoR, но подумал, что язык не востребованный. Такие дела, товарисчи.
Ну да ладно. Ты можешь поменять сигнатуру. В чем сложность-то? Что-то типа первых двух прикриплейдов. И на null свой не напоришься и всем понятно более-менее.
Если тебе принципиально чтобы не нулл был и так же сигнатура - делаешь примерно как на последних 2 прикриплейдах.
Я бы все равно null возвращал, потому что это и меньше кода и никому вникать не нужно. и знать про то что есть какой-то там EmptyUser. Конечно, проверку на EmptyUser можно впихнуть в твой класс User, но это такое себе.
Нихуя себе
Меня на первую работу взяли с зп в 400$
Задали в целом вопроса 3
Но у меня был диплом по специальности, возможно меня поэтому не пытали так сильно, хрен знает.
Ты на какую-то ебанутую контору наткнулся. Серьезно.
Я тебе опишу как у меня собес проходил:
- Привет. А ты точно программист, не похож чет)))
- ^___^
- Короче, вот смотри, код. Что он сделает.
- Вот что.
- Хм да)))
- )))
- А ты знаешь что такое список?
- Знаю. Как массив, только нефиксированного размера
- )))
- А дай посмотреть гитхаб
- Там лабы одни, ну да ладно, смотрите
- Хм, ты мы смотрим 500$ просишь. Это нам подходит
- Ну ок, вы ведь повысите потом?
- У нас повышение через полгода работы)))
- Ну ладно, пойдет, когда выходить?
- Со следующей недели, вот список бумаг что нужно принести в отдел кадров и бухгалтерию
И так примерно все проходили, что на джуна, что потом на мидла. И это было-то всего 2,5 года назад. Ну, где-то спрашивал: С EF работал? Или - а не боишься чужого кода? А в остальном - не пытались какой-то там экзамен устроить. Ну, т.е. да, я бы ответил на это все, но только само отношение же довольно неприятное. Есть гитхаб, можете дать тестовое, а эти экзамены я в вузе напроходил.
такого формата уже 3ий собес у меня. Первый был по телефону, когда интервьер был Джун Фронтендер (потом нашел его на Linkedin) - читал вопросы с листика и ждал ответов, которые написанны рядом с вопросом. Зато по Jquery мурыжил, хотя я изначально предупредил, что мои познания во фронте - это Material ui компоненты, которые подключаю к проекту. Знакомый пыхер начал учить позже меня и уже мидл. Зато я почитал паблички в ВК, где писали, что пыха умирающий язык.
Ты даун? Сам же спросил что лучше возвращать в случае такой сигнатуры, я отвечаю, в случае ТАКОЙ СИГНАТУРЫ нужно возвращать исключение, а то где ловить и как ловить это уже не твое дело, нормальный программист когда увидит название, поймет что нулл в этом методе возвращаться НЕ ДОЛЖЕН и если твой метод какого то хуй возвращает нулл то это исключительный случай и ты должен дать об этом знать, если хочешь делать метод который МОЖЕТ возвращать нулл и ты хочешь что бы другой программист это понимал что он МОЖЕТ получить нул метод должен называться "TryFind" это все описано в литературе
блять, ну и пиздец, какое же новое поколение программеров дегенеративное пиздец, нул он будет дропать, вместо двача литературу бы почитал
Советчик хуев, ты посмотри сначала на стандартную библиотеку. До появления Nullable reference types какой-нибудь List<T>.Find - возвращал нулл если в списке не было значения и сигнатура была: T Find(Predicate<T>). Он не кидал исключение или что-то еще.
И вообще, с какого хуя-то не нахождение элемента где-то - исключительная ситуация-то? Это вполне штатная и обвешивать это дело try-catch'ами - долбоебизм. С какого хуя-то пользователь должен получать проседания производительности из-за того что еблан не прочитал комментарий и заставляет нормального человека вместо null - кидать исключение? Охуеть, блядь. С твоей логикой - пользователь ввел неправильное значение - мы вместо того чтобы сделать валидацию - и не выполняться дальше пока не введет корректно - будем хуячить try-catch. Охуенно придумал. Метод же должен принять цифру, пользователь ввел не цифру - ИСКЛЮЧИТЕЛЬНАЯ СИТУАЦИЯ, АЛЯРМ, ПИЗДЕЦ.
Исключительная ситуация - это база упала, клиент на другой стороне разорвал соединение, ОС заблокировала файл и ты не можешь писать в него, ненахождение элемента в коллекции или БД - это ожидаемое поведение.
Я вангую, ты как раз из тех ебланов, что из цикла выходят кидая эксепшн, хули, блядь, исклюичительная ситуация, я сделал больше итераций, чем ожидал, и похуй что этот цикл выполняется 900 раз в секунду и каждый перехват исключения - дорогая операция и просто выходи ты нормально, пользоваль бы не страдал, а ресурсы железа использовались бы нормально.
>До появления Nullable reference types какой-нибудь List<T>.Find - возвращал нулл если в списке не было значения и сигнатура была: T Find(Predicate<T>).
а до появления ООП весь код вообще в одной куче мешаляся, реально почему перестали ? Может потому что подход к программированию изменился? может потому что совеременные проекты стали большими сложными и легкость в обслуживании сейчас мета? Может потому что так тупо удобнее?
>С твоей логикой - пользователь ввел неправильное значение - мы вместо того чтобы сделать валидацию
чего?
>Исключительная ситуация - это база упала, клиент на другой стороне разорвал соединение, ОС заблокировала файл и ты не можешь писать в него, ненахождение элемента в коллекции или БД - это ожидаемое поведение.
Ты так сказал? Исключительность ситуации зависит от контекста, определяется по потребности!
>Я вангую, ты как раз из тех ебланов, что из цикла выходят кидая эксепшн, хули, блядь, исклюичительная ситуация, я сделал больше итераций, чем ожидал, и похуй что этот цикл выполняется 900 раз в секунду и каждый перехват исключения - дорогая операция и просто выходи ты нормально, пользоваль бы не страдал, а ресурсы железа использовались бы нормально.
Доношу до твоего ведома что попытка поймать исключение нужна именно что бы такой хуйни не происходило, что бы не было так что цикл работает 100500 раз и после прогона все идет в пизду потому что в самом начале прогона мы получили данные которые не ожидали, но не остановили цикл и он в холстую отрабатывал что бы поток упал вконце, или что еще хуже. Что бы поток упал в какой-то важной части программы которая полностью ее ложит, именно поэтому важно ловить исключения сразу, кроме того такой подход упрощает дебаг и обслуживание, потому что если продолжать программу при исключениях и они будут вылезать где нибудь потом в другом месте и в другом контексте можно ебнуться пока ищешь в чем проблема
Ну и лалка ты. Я за 650 устроился в контору с кучей микросервисов, фшарпом, хайлоадом, cqrs и без фронтенда. Спрашивали только голый шарп, опыта работы никакого не требовали.
> Я за 650
Я что-то не понял, а где зарплаты по 300000000кк/сек у программистов? Я за вахту 15/15 получаю 1500, нахуя вы геморрой зарабатываете за 650? Лел.
Потому что объективно это проще, есть перспективы, а главное - многим таки нравится кодить.
Ну это моя первая работа, сижу дома на удаленке паралельно с универом который тоже на удаленке и получаю выше средней зп по городу.
А вахта 15/15 это когда на 15 дней куда-то пиздуешь? Ну пиздос, завидовать нечему. Года через два, при выпуске с универа, буду так же удаленно 1500 зарабатывать.
>буду так же
Не так же. Ты будешь красноглазить 16/7/365, а я, отработав 5 дней, буду две недели отдыхать и саморазвиваться, изучая, к примеру, С#
DataTemplate
че негативный такой?
Ну блин, а как по твоему при условии что ItemCollection - хранит тупо object и ListItem в свойстве контент - хранит object - доставать предложишь?
Ты не сможешь без еботеки там линку использовать. Без if is ты не можешь быть уверен что тебе что-то другое не подсунули. Это довольно простой способ, при этом он понятный. Конечно можно эти два if объединить в один, то тогда читаемость, на мой взгляд, просядет.
Это конечно не идеальный способ, потому что т.к. там контент - это может быть и какой-то более сложный объект, например другой контролл, но уже приведя к IEnumerable<T> можно дальше линку юзать и достать что тебе нужно.
ОНО!
Так пусть там не лежит
Пусть лежит в обычном списке и прибиндено
Зы: да перекатите тред епрст. С мобилы адово сидеть
Третий год работаю фуллстеком и не смог бы ответить и на 20% этих вопросов без предварительной подготовки.
> Зы: да перекатите тред епрст. С мобилы адово сидеть
Не создавайте, мобило-зумеры должны страдать.
Третий год работаю бэком, и могу сказать, что половина гребцов отсюда половину слов не знает, про вторую слышали.
Я вообще всегда охуевал от сложностей собесов, ты там и деревья покрути и расскажи как .NET внутри устроен и подрочи троим сразу, а потом будешь дальше джейсоны перекладывать.
Коллега, которого считали самым безалаберным и слабым программистом, который бы не прошел ни одно собеседование, посмотрел на Udemy курс за 20 баксов и сварганил на коленке проект и ему уже капают с него деньги. Да, он не знает разницу между классом и структурой, никогда не пользовался абстрактными классами, методами расширения и не ебет что такое апкаст, боксинги.
>>1986343
>>1986354
Самый большой провал в том, что я иду точь в точь по Roadmap изучения .NET - исписал с 10+ проектов от консоли, десктопа на WPF заканчивая 3-4 проектами на веб стэке - ASP.NET MVC5, Core. Потратил на это уже около 3 лет своего времени до/после работы. По итогу - оффер с $250. Я это воспринял, как насмешку. Это по сути минималка блять. Дворник или уборщица столько же зарабатывает. И кстати мне раньше вообще предлогали за бесплатно несколько месяцев поработать, такое ощущение, что они дают золотой билет в жизнь, за что я им должен быть безмерно благодарен.
Я не омежка, обычный нормис, но какие то додики, так плюют в лицо спрашивая за семофоры, мьютексы и реализацию GC. Чего блять? Это же низший уровень абстрации. А про ILDasm зачем спрашивать? Я из за своей упорости уже выдрочил тему сборки мусора и выделения памяти, так что следующего пидараса, который спросит что то про реализацию и процессы GC я так выдрочу, что у него кефир из жопы пойдет. Мне уже похуй на этот C# стэк. Помойка ебаная. Я скорее пыху за месяц выучу и пойду копейку зарабатывать, чем продолжу пытаться устроиться на .NET (еще и футстэк, ага, привет). Единственное жаль - это потерянного времени. На изучение #, на написание петов, на выдрачивания вопросов из quiz, которые на практике не встречаются от слова совсем.
Лол
У нас всяк компания сидит на комьюнити студии :D
При этом на офисный пакет майрософт(office 365) деньги не зажали
Жиза, буду иметь ввиду анон, спасибо что отписался сюда
Ну у меня здоровенная галера, да и в проекте лютый энтерпрайз для гигантской корпорации.
Правда.
Я из-за того что студия начала подбешивать тем что считает себя умнее меня - пересел на вим. Божественная хуйня на самом деле. Базарю. Когда разберешься - писать там код - одно удовольствие.
Ну это совсем какой-то пиздец.
Я потратил на вход в .net пару месяцев на курсах, потом пошел на стажером за 600 usd, через три месяца джун за 900.
Но вообще вкатываться проще всего через тырпрайзы со стажировками/курсами, и. т.д. у них есть всегда процесс обучения и бабос плотят.
Сам где-то полгода искал джуном работу и были одни стартапы в духе мы тебя оформим через три месяца работы
Та я и так с вим модом что на студии, что в райдере сижу. Но чет студия подлагивает пиздец, да и вим мод в нкй кривой какой-то.
Но вообще, писать на виме когда есть иде - извращение. Зачем позбавлять себя дебагера, автокомплита, рефакторинов?
>Я из-за того что студия начала подбешивать тем что считает себя умнее меня
Так ей всегда можна заткнуть ебало или сказать что она не права и должна делать вот так, а не так.
Нужно не по родмапам ходить было и пилить петпроекты - а по собесам бегать.
Меня на первую работу взяли всего с одним вопросом: что делает модификатор out. Все, блядь. Какие еще нахуй сборки мусора? Какие нахуй блядь выделения памяти? Вы че? Я слов таких не знаю.
А сейчас, спустя 2 года таких вот беганий по собесам и смен работы - закидывают предложениями, я правда отказываюсь, потому что почти везде хотят фуллстек, а попробовав фуллстеком работать - я понял что ненавижу JS и все что связано с фронтендом. При этом я даже ни одной вашей шарповской книги не прочитал, кек, я плосовиком так-то собирался быть и просто пробежался глазами по метаниту, когда понял что с плюсами только на завод либо за бугор.
Чет не вериться. Или у тебя охуенные софт-скиллы такие...
У нас на работе сеньор проводит собеседование и берет каждого, кто знает что такое distinct в SQL.
Потому что капитализм-с,
За одну и ту же работу можно выживать за МРОТ, а можно получать 2к баксов.
В целом, мне кажется, это одна из основных причин, почему работодатели так старательно стараются спрятать ЗП вилки за стеной: "Каждому по способностям", "Достойная ЗП" и прочего.
И самое смешное, что в рамках одной должности могут быть совершенно разные ЗП.
У нас до смешного доходило, что чувак, который стал 3-летним инженегром получал денег меньше, чем его официальная вилка была.
Ну так рыночек тогда как-то не правильно решает, потому что очевидно что если есть зарплата выше тогда программеры будут идти туда, а если на место будет большая конкуренция то там зарплата будет падать, вилка должна уменьшаться, это работает везде кроме программеров почему-то, у них вилка неадекватно большая
>потому что очевидно что если есть зарплата выше тогда программеры будут идти туда
Ну, тут вижу бешеное комбо общей инфантильности ИТ-шников (типа мне и так норм, не хочу выходить из зоны комфорта и проч-проч-проч) и машины по промыванию мозгов в корпах. Те же крупные тырпрайзы активно используют всякий разный стафф типа тимбилдингов, бесплатной газировки и дмс-ки, что бы удерживать среднестатистических гребцов на ЗП ниже рынка найма.
Плюс синдром самозванца.
Плюс действительно хороших программистов нихуя нет, в целом это видно, по тому, что на НОРМАЛЬНЫЕ должности найм может идти годами, а на баунти за привод друга на них можно вполне купить какой-нибудь рено логан.
Зато дохуя даунов, которые надрочили литкод и пиццот фреймворков, но при этом не могут три строчки кода прочитать
Ну в общем согласен со всем, добавлю еще только что программеры обычно не очень общительные и не любят смену компании потому что для них это очень болезненно происходит, к тому же даже нижняя планка выше чем у большинства профессий и этого достаточно что бы жить не хуже других
Подвтерждаю, у меня 5 лет опыта, работаю за зп сильного джуна.
Сижу гуглю уже ебаный час и НИХУЯ, как будто никто и не знает про эту функцию. Может тут кто-то знает?
Я одну штуку еще давно понял, денег дают столько сколько просишь. Сам в коммерческой разработке уже 15 лет, сменил 6 работодателей. Если бы не менял работу, так и сидел бы где-нить за $500 хуярил.
когда вызываю с клиента клиенты есть
когда вызываю как на первом пикриле клиенты уже нулл, какого хера?
На ум приходит datagridview только ,но как тогда сделать, чтобы через нее что-то записывалось? лучше пример покажите
Недельное расписание с понедельника по пятницу например
Все очень просто.
Не готовишься, проходишь 100500 собеседований.
Получаешь работу рано или поздно.
Еще спроси какого цвета у нас обои в квартире и на рабочем столе.
Ну вот и разгребай теперь хуле, посмотрим как 100500 собесов помогут тебе проект сдать
Да, хоспаде, спизди букально любой пример из интернетов по какому-нибудь MVVM и радуйся жизни
Человек WinForms просит же, а не WPF
Это проблемы не только жабаскрипта но и многих других языков которые поддерживают арифметику для чисел с плавающей точкой, вина конкретно жабаскрипта и некоторых других в том что не сигналят исключения и не дают задавать режим округления
Читать раздел IEEE Routines
https://northstar-www.dartmouth.edu/doc/solaris-forte/manuals/fortran/prog_guide/6_floating.html
Впрочем, причина такого упрощения очевидна - зачем вебмакакам вообще знать что это такое, смузи сам себя не выпьет а очередной говнофреймворк сам себя не выучит
Не отменяет остальных претензий к языку
мимо проходил
Потому что никто не подключился)))))
> лучше пример покажите
Как говорил Альберт Айнштайн: Дай человеку рыбу, и ты накормишь его на один день, научи его рыбачить, и он будет сыт всю жизнь.
https://docs.microsoft.com/ru-ru/dotnet/desktop/winforms/controls/datagridview-control-windows-forms?view=netframeworkdesktop-4.8
>мужик впахивает за 250 бачей
я писал выше, что отклонил такое предложение, т.к. посчитал это насмешкой. Я сейчас работаю (не буду вдаваться в подробности кем) зарабатываю $800, работая по 2-3 часа в день. Решил свичнутся еще 3 года назад, когда зарплата была в 2 раза меньше. Я знакомому деву описал ситуацию с собесом и такими насмешливыми предложениями, так вот он сказал, что на одно место трейни/джуна в .NET стэке по 30+ кандидатов. Резюме с пометкой Junior/Trainee/Beginner - даже не рассматривают. И некоторые вполе готовы работать за бесплатно (да, да, приходят выжигать глаза за $0.00), просто чтобы набраться опыта и съебать в роли мидлов в нормальные конторы. IT 2к21
> одно место трейни/джуна в .NET стэке по 30+ кандидатов
За год к нам на завод пришел только 1 человек(((
Платят со старта трицатку. ХЗ, может быть это тоже "насмешка" для современных смузихлебов, но в нашем регионе это в 1,5 раза больше средней ЗП, а через год, если не совсем дебил, поднимают до 50к, я собственно так и зарабатываю сейчас. Челы что давно тут работают 200к получают, что опять же по меркам региона - охуенные суммы, двушка в центре стоит 2 ляма, считай за 2 года спокойно заработать можно.
Но нет никого. Наши менеджеры по подбору персонала уже с ума сошли и засылают тонной спама про: Приведи чела и получи ништячки.
нет же, сказал что когда тригерю с клиента клиенты есть, а когда хочю с сервера затригерить себя уже налл
Это работает только если человек не тупой или не ленивая скотина
Это выбор каждого - верить или нет словам на борде.
>на завод
кстати я такие места даже не рассматривал, только аутстафные галеры. Все, что связанно с бугром - это деньги. Да и с английским проблем нет. Но это уже лирика.
На текущей работе у меня - наоборот, я в основном беком занимаюсь и там всякие системы сбора и анализа данных, а фронт - ну нахуячил я быстро чтобы не в сваггере клацать, потом наш фронтендер чутка привел это в более-менее презентабельный вид.
Так вот. Это просто мне не везет или все дело в том, что я еще и среди тегов таки добавил фреймворки которыми пользуюсь для разработки фронта? Я-то их знаю постольку поскольку, ну, типа да на - отрисовать пару формочек, послать туды-сюды запросы да в хранилище сохранить результат. В общем - хуета. Но ЗП предлагают от 100-150к, что считай x2-x3. И как-то даже начал задумываться о том, чтобы более подробно в изучение фронта погрузиться. Но я не люблю фронт и не хочу особо им заниматься, мне нравится бек. Может быть если я уберу все что связано про фронт - больше будут завать именно на бекендера? Или это просто специфика шарпа такая, что тут либо фуллстек - либо пиздуй в юнити?
Лол, ну тогда все понятно
Сейчас бы работал уже на вожделенной галере, если бы полгода-год где-то поскромнее набил экспу.
Так десктоп и ксамарин это тоже фронт, не? Просто вместо штмла хмл, а вместо джса шарп.
Про десктоп не совсем так
Там и бэк и фронт
Десктопные приложения тоже могут быть клиент-серверные, внезапно.
В том смысле что ты сервер сам пишешь, где сервер это виндовая служба, которая доступна по локальной сети.
Ну и на фронте реализовывать больше всего нужно, так как нету браузера, который много чего за тебя делает.
Также десктопыне приложения могут работать вполне себе автономно(толстый клиент), иметь свою отдельную базу, сливая время от времени какую-то инфу через веб сервисы.
То есть нету такого как в вебе, где фронт вообще не работоспособный без сервера.
Ну вообще-то если писать виндовый UI по нормальному, то там тоже будет четкое разделение на model-view-presenter (controller) или вообще MVVM в случае WPF.
Кстати я тоже заметил уже года два такую фишку, вот раньше, нужно было сделать микросерис, искали на фуллстак бека который может что-то сварганить и на фронте, ну что там программеру научиться этого фотопеинта, денек два покликал и уже что-то можно настряпать, подключить бутстрап, библиотеки всякие и ок. так раньше бы было, брали бека платили 100% за бека ну и долпчивали за фуллстак как еще часть от ставки фронта, примерно 20-30%
А сейчас на микро сервисы берут на фулстак как бы как ДИЗАЙНЕРА ну и говорят мол, ну апи ты себе допишешь, понаподключаешь себе библиотек там, идентити всяких, сгенеришь базу, разберешься как-нибудь, и платят соответственно 100% за дизайнера и доплачивают за фулстак как 20-30% ставки от бека, та же самая работа по сути и зарплата получается меньше раза в два,
охуеть тенденции, чую что надо быстро накапливать кубышку и самому становиться жидокапиталистом потому что у программистов малины все меньше...
Так вот, это нормально я нахуевертил или лучше использовать просто строку и не ебаться или еще чего-нибудь?
Ты че, ебанулся? Зачем плодить сущности и абстракции, чем тебя просто строка не устраивает?
Алсо, что за переменная word(в которую оно читает)?
word - это char[3].
Я просто всякое подумал, что надо на каждый пук свой класс. Вдруг там мы захотим не в виде строки хранить а еще как-то, или хуй знает.
> Вдруг там мы захотим
А чё за задание-то? Нахуй ты наперёд думаешь чё там, а чё не там? Делай что в задании сформулировано и всё.
>просто всякое подумал, что надо на каждый пук свой класс. Вдруг
вот вдруг и сделаешь, нахуя заниматься таким вот дрочением я хз, это не ооп и солид, это маразм какой-то, в крайнем случае хранил бы тогда в виде битов, и уже оттуда преобразовывал куда там в будущем надо, зачем нужен лишний посредник?
Вопрос - как добавить скроллбар в листбокс? Пробовал прописывать в scrollviewer - scrollbarvisibility, cancontentscroll и добавлять scrollviewer.
Все знают, что у вас просто тонны сахара. Такой вопрос - можно ли в шарпе создать такой класс, объект которого можно напрямую инициализировать литералом? Например, так, очевидно, можно:
string someStr = "этот вопрос полная хуита";
А есть ли способ сделать так, что было можно:
myStringWrapper someStr = "не такая и хуита уж";
эмм
констурктор уже капец как громоздко чтли?
myStringWrapper someStr = new myStringWrapper ( "не такая и хуита уж")
Ну, можно еще оператор = переопределить для твоего типа
Привет, аноны. Помогите, пожалуйста, советом.
В общем сел делать курсач, результатом выполнения которого должна быть десктопная прога(для виндоус), в которой пользователь вводит в поля параметры некоторые, затем исходя из этих параметров сишарп скрипт задаёт поведение 2д-анимации на юнити, которая проигрывается в окошке этой десктопной программы.
Какой тип проекта мне для этого нужен? ВинФормс и всё? Я не могу вкурить, в чем такая принципиальная разница между этими винформс, uwp и wpf
Я бы делал как-то так, Гы)))
Пиздце. Я вот сейчас отказался идти на собес с вилкой 100к-150к, потому что мне недавно на текущем месте до 30к подняли ЗП. Я уебок, кек.
Да, от волнения обосрался в решении. Там нужно как на прикриплейд.
Еще и жопой читаю. Пиздец.Короче, не первое слово, а 10 первых нужно будет взять. Пиздец я даун. Хорошо наверное что не согласился идти на собес.
Это где такие зарплаты?
Собственно, мне через 2 месяца сдавать курсовую РАБоту по шарпу. Пока что остановился на читалке, но не знаю (не понимаю) алгоритма, да и какую технологию вдобавок использовать.
Анон, может знаешь, подскажи, буду признателен.
Ну там однна технология под названием Xamarin, не заблудишься.
А как текст разных форматов извлекать: найти опенсорс проект который это делает, например
https://github.com/topics/ebook-reader?l=c#
Из всего, что нагуглил, есть только возможность запустить уже собранное юнити-приложение внутри винформс.
А мне нужно, чтобы была возможность из самого винформ-приложения в поля вписать параметры, затем запустить анимацию с этими новыми параметрами.
Пока не нагуглил, как это сделать, но, возможно, я не теми словами всё это время гуглил, у меня несколько раз бывало, что я так не мог найти инфу, которая лежит на поверхности.
Мобилки - замарин.
Алгоритм: два пути. Добро и зло.
Добро - берешь и читаешь спеки нужного формата - делаешь все по спекам ручками, получаешь криво-косо поддержку форматов. Препод будет доволен - ты получишь опыт.
Зло - открываешь нугет и ищешь нужные тебе пакеты. Можешь обернуть это адаптерами, чтоб типа солид, вся хуйня. Собственно - все. Препод будет недоволен, но никуда не денется и курсач зачтет.
Как-бы вуз такое место где предпочтительнее как раз добро. Зла ты наделаешь когда работать пойдешь.
>>1989267
А почему бы юнити юи не использовать? Че у тебя за задание на курсач такое? Потому что звучит как-то дико.
Вообще ты можешь сделать очевидную вещь - сохранить параметры в файл и запустить юнити программу которая его считает. Может быть в юнити еще можно как-то прочитать аргументы командной строки, погугли
Я вот нашёл, как запустить стэндэлон юнити экзешник изнутри винформс.
Сейчас разбираюсь, как делается общение двух программ через IO.Pipes.
>А почему бы юнити юи не использовать? Че у тебя за задание на курсач такое? Потому что звучит как-то дико.
Мне для управления объектами анимации затем нужно будет еще ML прикрутить, лол. Насколько я успел понять, сделать это изнутри самого юнити-приложения не представляется возможным. (может я ошибаюсь, хз).
>Вообще ты можешь сделать очевидную вещь - сохранить параметры в файл и запустить юнити программу которая его считает
Мне тоже это в первую очередь приходит в голову, когда дело касается неких параметров, их задания, сохранения и чтения, первая мысль - json файл. или типа того. Но тут ещё будут кнопки, которые, например, генерят новый объект по ходу выполнения анимированной сцены. И вообще сцена запущена в течение всего выполнения программы, у меня будут глоабльные параметры, которые возвращают объкты восвояси, останавливают все телодвижения и так далее. Так что файл с параметрами не подходит.
>Че у тебя за задание на курсач такое? Потому что звучит как-то дико.
Задания, как такового, ещё нет, есть только тема и примерно обговорённый конечный результат практической части. Вообще это не курсач, а ВКРБ, просто быстрее было написать курсач.
В годоте делай, глупец. В годоте хоть RPC есть.
> Мне для управления объектами анимации затем нужно будет еще ML прикрутить, лол. Насколько я успел понять, сделать это изнутри самого юнити-приложения не представляется возможным. (может я ошибаюсь, хз).
Я уверен, что можно, погугли в этом направлении. В юнити же весь твой код - это обычная ассембли, которая может делать то же самое что и любая другая ассембли, хоть ссылаться на любые другие ассембли, хоть любые стандартные библиотеки дергать, да хоть с++ либу.
Ну, это просто в порядке интереса, а не для практики. Чтобы сделать например полный аналог строк, но со своими фичами, например перегрузить конкатенацию чем-нибудь другим, определить инфиксное умножение через оператор * и прочее такое дерьмо. Весело же было бы.
переопределить. мегабыстрофикс
Правильный ответ потому что я закомментировал validationScript в jqueryValidationPartial
Всем привет. Есть аноны Новосибирцы? Скоро буду к вам перекатываться, посмотрел на вакансии джуна. Нашёл пару штук и все. Как быть? Реально такая жопа с c#? академ городок не рассматривал.
Пофиксил, спасибо
Во, прикольно. Благодарю. Зачем столько всего в шарп этот нахуевертили, пиздец. Как вы вообще в нем разбираетесь только.
inb4: richtextbox.
2 года.
Ну да пофиг же. Я как-бы действительно не за ЗП шел, мне нравится код писать и кроме этого я еще и ничего не умею. Короче, мне норм. Просто заебывают родственники, которые думают что я вру насчет ЗП, заебывают знакомые, которые насмотрелись реклам курсов и думают что я просто ебанутый, раз второй год в одних кросовках и джинсах хожу, при том что мне с моей ЗП нужно 16к за квартиру отдавать, заебывают рекрутеры, которые зовут на стек, который мне не интересен и в котором у меня мало опыта. Хочу, блядь, писать бекенд и ничего другого не делать. Тут - к моему счастью - так и происходит - ТЗ спустили - сказали делать, дали срок, сделал - заебись, вот следущее ТЗ, никаких обсуждений, никаких взаимодействий с другими людьми, просто пиши код - получай свои деньги.
Почему оно в случае передачи параметра в дженерик тип, неявно конвертирует к интерфейсу
Method( b );
А внутри метода нужна явная конвертация?
Method<int>();
Ведь и то и другое это апкаст.
Смотрите, есть либа в которой реализовано общение с устройствами по UDP. Но в этой либе все запросы - синхронные. Так вот, интерфейс для всех таких либ имеет вид:
Task Send(byte[] data, CancellationToken ct);
Task<byte[]> Receive(byte[] data, CancellationToken ct);
Так вот. Нормально ли просто вызовы этих методов обернуть в Task.Run? Просто я не совсем понимаю как сделать адаптер для синхронного кода, который в соответствии с интерфейсом должен был бы возвращать таску.
Не понять мне таких, я вот открыл профиль, хожу по собесам, мидол три года, рожа кирпичом в резюме 170к+, посмотрим что получится.
Есть у евреев золотое правило, если умеешь что-то делать не делай это бесплатно, хотя бы из солидарности к своим братьям программистам, пахать за еду дело в кативальщиков, а ты своими действиями просто дискредитируешь программистов и демпингуешь цены, не хорошо так...
нахуя перекатываться в жопу мира? наоборот все стараются выбраться отсюда
Мне этой конторе приятно. Тут сидят челы сиплюсплсеры, которые 200к+ получают(еще и недовольны, в регионе - 20к средняя ЗП, а они хотят больше того что им плотют) и им не хочется об шарповский код руки марать, с другой стороны - руководит мной бывший пехапешник, который на деле - не шарит особо(ну как, общее понимание у него в разы выше моего, потому что опыт и все такое, но конкретно шарп довольно слабый) и потому у меня полная свобода, ну а с третьей - фронтендер - бывшая джавистка, которая не знает что такое CSS. Чела, что действительно шарил за шарп более-менее - поставили руководить отделом отельным. Я тут полностью себе предоставлен, на деле - любую хуйню могу протолкнуть только потому что никто не знает нихуя. Взял - и предложил интересную мне хуету, пояснил чем полезно, и т.к. никто не может кроме меня ее реализовать нормально - дали мне, я сижу, читаю книжки, статьи, делаю каты и потихоньку пилю, говорю что сложно, хотя мог бы за неделю нахуячить. Чел что мной верховодит думает, что я просто из-за того что нет опыта достаточно такой медленный(среди коллег у всех 10+ лет опыта). А на фоне тех людей, что таки приходят - я действительно неплох, потому что за время что я работаю пришло 10 челов и они даже строчки кода за время испытательного срока не смогли написать.
Короче, я уже сказал. Мне как-бы норм, а вы-то сами и не пошли бы в такую контору, где зазывают сеньеров ЗП в 80к(там повышают за выслугу лет в основном, те плюсовики - 20 лет опыта и 200к+, но новичок что придет на их позицию будет стартовать с 80к).
Это же не галера какая-то или стартап, это, блин, контора, что в своей области - лидер по рынку и считай уникальный продукт делает. Я вангую что вы даже название не знаете, но продукция ее у вас есть. Блин, чуть нда не разгласил, алкоголь дело плохое.
В общем - мне норм. Мне все нравится.
> тут полностью себе предоставлен, на деле - любую хуйню могу протолкнуть
Вот двачую
Уже почти 5 лет на одном месте так тоже работаю, в продуктовой компании.
Потому что думаю, если на галеру перейду, там будут всякие митинги, контроль продуктивности и прочая поебень.
А тут простор открыт.
что нужно знать по алгоритмам, чтобы претендовать хотябы на 30к рублей в месяц ? Нужно ли придумывать новые сложные алгоритмы, или задачи решаются встроенными методами, и очень простыми самописными скриптами как например в олимпиадном программировании есть задачки на комбинаторику, и в некоторых случаях нужно применять расчёт чисел каталана ?
>Нужно ли придумывать новые сложные алгоритмы
Пример сложности - задачки E и F на codeforces раундах
В БД создается запись но она пустая.
Вроже же все по примеру сделал.
Пикрил1 представление
пикрил2 модель
пикрил3 метод контролера.
Бля потому что не сработала миграция.
Тогда вопрос второй почему она не сработала?
А сейчас повторно выдает ошибку.
Пикрил первая миграция но без полей найм и эйдж, а только ИД. Вопрос какова хуя не все поля добавились ?
>>1991602
Вопрос закрыт. Хуйня какаета была непонятная.
Но вот еще вопрос.
Я так понимаю к представлению можно привязать одну модель?
Вот к примеру есть форма с добавлением с предыдущего скрина к этому представлению привязана модель @model Test3.Models.User
И я как бы хочу что бы ниже формы у меня выводило все записи с бд код примерно таков должен быть
@foreach (var u in User)
{
<tr>
<td>u.Name</td>
<td>u.Age</td>
</tr>
Я передаю в контролере в типе метода [HttpGet] лист с записями в бд return View(db.Users.ToList()); но что бы его вывести мне нужна подключить модель @model IEnumerable<Test3.Models.User> . Правильно ли я понял что нельзя 2 модели использовать?
И мне надо использовать для этого частичное представление?
Сорян за шитпостинг)
Мне сильно помогает когда я сначала пишу вопрос а потом мне как то легче самому его решить.
Через вьюБаг передаю.
Но когда добавляю новую запись вылетает эксепшн Object reference not set to an instance of an object. Я так понимаю что из за того что нужно вывести записи из бд а во вью бег пусто так как в ГЕТ запросе я не передаю ничего
Когда я начинал учить шарп и думал, что выбрать для интерфейса десктопных приложух, то увидев код WPF, я подумал, что это веб-параша и стал учить формы. И формы мне кажется сделаны очень круто и очень продумано.
Но все, даже сами MS, почему-то их ругают и хвалят WPF. Обоснуйте почему.
Ругают, в основном, за то что на формах довольно сложно разделить представление от логики. В ВПФ - тебя вынуждают писать более-менее нормально и разбранится с MVVM. Ты будешь плеваться, ты будешь считать это лишним усложнением, но в конечном итоге ты получишь какую-никакую но структуру и сможешь переиспользовать код в других проектах. А это как-бы то чего хочет безнес. Никто не хочет платить 100 раз за одну и ту же работу.
Ко всему - простота модификации визуального представления в ВПФ оч сильно помогает. Вот сколько тебе придется кода нахуячить чтобы сделать, скажем, кнопочку внутри которой есть чекбокс и картинка на формах? В ВПФ ты делаешь это в замл разметке и все, охуенно.
Да, на формах тоже можно писать нормально и тоже можно добиться того поведения, что есть в ВПФ, но это делается через жопу и нет каких-то прям стандартов, а сам редактор форм не будет тебе отображать что ты там нахуевертил. В ВПФ - за тебя решили - тебе просто нужно делать как сказали и будет ОК, оно будет отображаться в редакторе и вообще.
В впф намного проще создавать свои контролы и изменять внешний вид и структуру уже существующих контролов, расширять поведение уже существующих контролов с помощью атачед пропертис, которые потом можно использовать по всему проекту.
В винформах обычно с этим не парятся и покупают уже готовые контролы.
Как мне из вот этого примера https://metanit.com/sharp/aspnet5/15.2.php показывает пикрил1?
Метод контролера
[Authorize]
public IActionResult Index()
{
return Content(User.Identity.Name); // ЭТО ШО ВАЩЕ ТАКОЕ?
}
Ну возвращаем строку, а строку берет из пикрил2? Тогда почему там ничего нету про path а только User и Name?
Корочи магия блять.
Можно как то отлаживать аспНетКоре по шагам как консольное приложение? Что бы я видел как происходит обработка запросов когда я захожу на сайт.
Сиди на VSCode и не выебывайся. Райдер только в комплекте с хуетой для отладки нужен, писать в нем код неудобно, эти, блядь, аннотации с типом - пиздец нахуй. Короче, буть мужиком и юзай VSCode Для кода, райдер/студию для отладки. Так все ровные пацаны делают.
Бамп вопросу.
Читаю и не могу понять как ваще работает .
[Authorize] - запрещает доступ к методу контролера неавторизированому юзеру, ну а куда он тогда попадает и какой контролер и метод обрабатывает его запрос то?
Ты пытался сам хоть раз написать веб-сервер?
Если бы пытался - было бы очевидно куда. В дотнете это делается "мидлваром". Если более обще говорить - у тебя есть цепочка ответственности. Получив запрос и распарсив его - он передается какой-то сущности, которая уже внутри себя решает что делать с контекстом подключения: тут мы проверили заголовки - все вроде норм, тут мы проверили путь к ресурсу - ага, такой есть - передали дальше, тут мы видим что ресурс требует авторизации, мы смотрим есть ли токен/кука или что-то еще, ага, нету - до свиданья - 401.
Возьми обычный сокет, напиши парсер http и попробуй сам, блин, сделать веб-сервер, пусть и простой. Все станет понятно и такие вопросы не будут возникать.
Лол, помогло. Спасибо огромное!
Там и не обязано быть 401. Я просто пытался тебе объяснить как примерно цепочка ответственности работает. Можно хоть файлом с черным властелином отвечать, если так хочется, можно - рвать соединение, можно перенаправлять на страницу с авторизацией.
Суть. Под капотом есть класс примерно как на прикриплейд. В контексте дотнет кора ты такие классы сконфигурировал в Startup в методе Configure. Все эти app.UseHttpsRedirection, app.UseRouting и т.д. это как раз примерно такие вот классы, с логикой, что делать с запросом, какие-то просто берут оттуда данные и подставляют другие, какие-то - проверяют пускать ли дальше, какие-то перекидывают запрос на другой маршрут и т.д.
2 скрин не тот, вот правильный
Потому что Attributes - IEnumerable. Что неясного? Там даже из названия понятно это.
Соответственно тебе нужно сделать что-то типа: b.Arrtibutes("цена_книги").Where(x=>double.TryParse(x.Value,out _)).Select(x=>double.Parse(x.Value)).Where(x=>x<600)
Вот примерно как на пикриле что бы было
В энтерпрайз как раз трейни и берут. Нихуя не требуют, платят относительно дохуя, так еще и учат. Но хз нужна ли вышка, я прост сказал что учусь.
Вышка нужна что бы заказчику сказать что она у тебя есть.
Если нет то работодателю скажи прямо что нет, а он тебя потом попросит заказчику сказать что есть.
С первой зп просто купишь корку какого нибудь аграрного универа и все, один хуй ни кто даже и не подумает у тебя показать эту корку. Можно в принципе и не покупать но так ты просто совесть успокоишь, что мол ты же не соврал у тебя рили есть корка.
Хахалева людей судила без диплома и все похуй было, а ты тут паришся за свою корку.
int[,] arrayInt = new int[2, 2];
for (int i = 0; i < arrayInt.GetLength(0); i++)
{
var massiv = myNextLine.Split(' ');
for (int j = 0; j < arrayInt.GetLength(1); j++)
arrayInt[i, j] = int.Parse(massiv[j]);
Console.Write(arrayInt[i, j] + " ");
}
пишет Имя "j" не существует в текущем контексте. ??? :( На выводе в консоль
В цикле выполняется только это.
> arrayInt[i, j] = int.Parse(massiv[j]);
Строка ниже - нет.
> Console.Write(arrayInt[i, j] + " ");
Добавь фигурные скобки
for (int j = 0; j < arrayInt.GetLength(1); j++)
{
arrayInt[i, j] = int.Parse(massiv[j]);
Console.Write(arrayInt[i, j] + " ");
}
спасимбо!
В армий служил, военник есть, прописки нет (бомж). Это повлияет на возможность трудоустройства?
Работадателю - похуй. Я вот вообще в деревне прописан, ибо деревенский. И хули? Поехал учиться, нашел работу и работаю.
Что ты имеешь в виду под интерпрайз компаниями?
Есть продуктовые компании, которые выпускают свой продукт и продают его(гугл, амазон, майкрософт) Их тоже наверное можно назвать интерпрайз компаниями.
Есть галеры, на которые берут гребцов за сухие галеты с чаем. К таким компания обращается бизнес для разработки и поддержки приложений, ну например почта россии или волмарт. Тоже интерпрайз.
Ну как ты уже понял отношение к сотрудникам и к работе в таких компаниях очень разное. На галере тебя будут ебсти и в хвост и в гриву так как они деньги получили и им нужен результат. В продуктовых компаниях немножко по мягче все, но хуй пинать тоже ни кто не даст.
ИТ компании это не завод где смотрят бумажки и твои школьные дипломы с соревнований за 6 класс. Показываешь скилл - получаешь офер.
Как по мне самое лучшее место для вкатывальщика это стартап который нашел инвестора и только начинает разработку. Тебе не надо разбираться в старом коде. Если дело выгорает то через год берут еще прогеров, а так как ты проект уже хорошо знаешь то можно и деньжат так хорошо запросить. Ну а если деньги все спиздили то можно в резюме написать мол работал на инновационном проект то чет как то не удалось.
В впц только разметка норм, мввм это говноище редкостное.
По сему у меня вопрос, нахуя вообще нужны такие "апдейты" если они только урезают функционал и замедляют производительность?
Литература в шапке актуальна? Попрыгал по туториалам разным, пописал калькуляторы, а в итоге каша в голове. Хочется структуризировать познания, по полочкам раскласть. До сих пор не ебу как вставлять SOLID-принципы в код, все что из меня выдавливается это классы с приватными полями и кучей функций без интерфейсов и прочего.
Если у тебя нет ни одной интересной темы которую тебе бы самому было интересно решать программирование не твоё, помню для меня в вышке было проблемой как оправдать все интересующие темы в один диплом, я разрывался от возможных идей и фич которые мне хотелось реализовать, если у тебя таких идей нет программирование не твое
Был... пилил нейронки для проверки качества лопастей турбин под микроскопом, потратил все собранные за года полимеры на это... и только все начало срастаться охуенно, ебнула эта ебучая корона, после этого авиапроизводителям стало не до нейронок, поэтому отложил этот стартап так сказать до лучших времен...
>ибо есть всего месяц и полностью вкатываться в шарп нет времени
Чем ты занимался все время обучения? У вас что курс шарпа начинается за месяц до диплома по нему?
мы изучали плюса, я подошёл к дипломному руководителю, а она грит типа на шарпе хуярь
Какой стартап, ебанько? Щас на каждом втором заводе нейронки натаскивают на общедоступных библитеках. или ты дебил думаешь один такой умный чужие исходники с гитхаба скачать, лул?
Сейчас бы проггеру с 200к\сек оправдываться перед тупым студентом которые "учил" с++ но подлые учтиля заставляют на шарпе писать, и написать то же самое на шарпе ему невмоготу, иди нахуй отсюда петух, тут таких не любят
Такие прогеры тут не сидят т.к. тратить время на эту помойку себя не уважат, так что мимо.
Что такое талант, не верю в талант. Только, в упорство. Приложи усилия, и всё получится, рано или поздно.
Зачем заморачиватся с MySQL ? Делай выгрузку из текстового документа и запись в него
Конечно, как и вообще в программировании нужны математические способности с уклоном в комбинаторику.
Process.Start(pathToExe, user, password, domain);
нихуя не работает
Если запускать службу под SYSTEM, то вылетает исключение access denied.
Если запускать службу из под текущей учетки или учетки админа домена, то ошибок не выдает но и ничего не запускает.
UseShellExecute стоит false
UAC отключал, не помогло.
Из обычного консольного приложения работает, а из службы никак
Что ему не так, блядь?
препод просто хочет реализацию через фреймворк, чтобы само всё делалось, как она сказала. Суть диплома в создании базы данных склада, для этого нужно будет по идее реализовать запросы, осталось продумать и изучить как именно.
я единственный выбрал диплом по программированию, остальные либо по технической части компов, либо технические дипломы (создание различных устройств).
В общем. Сегодня на обеде от нехуй делать сделал пока пил кофе песочек на шарпе. Взял СФМЛ. Алгоритм был следующий: клацаешь по экрану - сыпется песочек, потом он падает. Да. Простенько, по сути физика ненастоящая. Но не суть. А суть вот в чем. При ражрешении 800x800 это говно шло в слоумо. Вроде всего-то 640000 объектиков, чому в слоумо-то? А вот. Сейчас быстро эту же хуйню накидаю на плюсах. Вброшу в тред результаты.
>asp Identity не работает с code-first
с чего ты взял? Еще месяц назад пилил, у меня все работало
>>1993577
>Через EF и DbContext?
Везде поразному, но большей части - да. Есть еще Dapper и ADO.NET - но это легаси
>достичь красного ранга на codeforces
это какой дан? До 4 дошел и забросил, задачи с оптимизациями дрочат мозги
>>1993717
на # я бы не сказал
>>1993867
>препод
>она
охуенная шарага, земля пухом
Как можно показать PNG или BMP картинку - в консоли?
Не в виде разноцветных символов - на винде никак, на лине сторонние зависимости нужны
Ну например для таблицы нужно два ключа, при попытке реализовать что-то подобное в code first получаю ошибку компиляции при том что в sql можно создать таблицу с двумя ключами
>>препод
>>она
>охуенная шарага, земля пухом
Сексист ебаный. Хоть умных девушек немного, но они есть, и бывают намного умнее средних мужчин
https://pastebin.com/UbvyfNM1
Проблема в том что он иногда неправильно принимает сообщения, они как бы обрываются
Передающая сторона уверяет что у них все нормально, и это на моей стороне неожиданно закрывается соединение
В случаях когда такое происходит у них выходят такие эксепшены
https://pastebin.com/H738Nmtx
У меня эксепшены не выходят, просто в стрим попадает только начальный кусок сообщения
С сетью точно все в порядке
Что я делаю не так?
Тогда какого хуя на собеседовании на позицию джуна спрашивают солид, паттерны проектирования, историю развития дотнет, сколько кораблей на тихоокеанском театре военных действий и дизассемблер неба и господа нашего иисуса христа?
Потому что хотят что бы ты на каждый вопрос отвечал "не знаю зато я буду работать за еду" а когда джун так не отвечает тогда джун их расстраивает
Для начала поставь таймаут больше, не знаю точно что за сообщения передаются, но вдруг они по полтора символа капают и 5 сек слишком мало
а вообще нужно бы глянуть в каком именно месте у них там ексепшон, по одном сообщении сложно что-то понять но в любом случае надо копать в сторону ексепшона и отталкиваться дальше от него, иначе это будет выглядеть как попытка поймать невидимую иголку в реке
Самая правильная стратегия это показать исходники с кучей проектов и сказать мол "Я это сделал за термос с чаем, представьте сколько полимеров я буду клепать за печеньки к чаю"
Причём не свои проекты.
тупой ебанат, спок
Потому что хуле ты еще спросишь у джуна?
Вот пришел такой хуй и говорит, я тут знацца выучил хуелогритмы, опыта тырпрайза у меня нет, проектов нет, а еще я хочу 1000 USD.
Зато есть корочка универа/каких-нибудь из миллиарда курсов-хуерсов.
Все что от тебя на собесе реально ждут -- что бы ты не был дауном и понравился, но так как это хуй прочекаешь, то и начинаются все вот эти дизасемблеры и паттерны.
без шуток если в шараге баба преподает программирование тогда это зашкваренная шарага, у нас вообще только один предмет вела баба, и то эо была около канцелярская хуйня типа форда и ексельки, конечно есть умные бабы, но ни одна баба не будет умнее чем умный мужик
Когда вот я джуном был и смотрел как у нас проводят собеседования не понимал, какого хрена у откровенно дебилов спрашивают вещи которые у нормальных чуваков не спрашивают вообще, вот помню пришел поц ему буквально парочку простеньких вопросов задали, он на них грамотно ответил, а потом они начали базарить по душам, чей сам, кем будешь, где живешь,как город что будет делать превратись в муху, вкусный ли чаек, и тп,
после него приходит чувак, его спрашивают ну простенькие вещи самую базу которую только дегенерат может не знать типа особенности и различия в CORE CLR и фреймворком, И КАК ТОЛЬКО ОН НАЧИНАЕТ ЕРЗАТЬ, любая не уверенность, расплывчатый ответ и сразу летят более сложные и каверзные вопросы, когда был джуном думал что так делают просто для того что бы легитимно отшить, сейчас понимаю в чем на самом деле ббыло дело
Не неси хуйню. У нас вот сишечку вела тетка лет за 50, так по сравнению с хуями что потом нам жаву с гаражом и плюсами давали - он была на голову выше. Никакой хуйни с : потому что так принято, это хороший тон и т.д. четко и нормально могла за все пояснить. Знания - выше крыши. Заставляла дрочить в присядку на древнем железе чтобы понимали нахуя перформанс и как с памятью обращаться. Это не жавапидор, у которого все тормозит и он начинает пиздеть что просто в универе компы слабые, вот бы сервак для лаб дали, тогда... Короче, я вот не заметил чтобы наличке яиц в трусах как-то на уровне кодерских способностей сказывалось.
Тьюринг, Возняк, Гейтс, Линус, Кармак, и куча других легендарных программистов, а теперь назови хотя бы 3 всемирно известных программистов-женщин
Женщины из-за стереотипов не идут в точные науки, если бы небыло гендерных стереотипов, то имён великих женщин было бы столько же, сколько и мужчин
Ада Лавлейс
Хеди Ламарр
Мэри ли Вудс
Элен Хенкок
Марисса Майер
Адель Голдберг
Катарина Фейк
Все эти женщины вызывают чувство гордости и могут служить невероятной мотивацией для всех нас. Многие из них трудились во времена, когда программирование не терпело женщин, да и мировые взгляды на женский труд были совсем другими. И тем не менее, они добились успехом. Сейчас тысячи девушек-программистов доказывают, что это не только мужская профессия. Остается только брать их себе в пример.
C точки зрения малолетнего долбоёба - безусловно.
В шахматы не играют тоже потому что хуеносцы по рукам бьют?
А вообще какие нахуй стереотипы? еще 10 лет назад этот аргумент со скрипом но можно было бы назвать валидным, но сейчас с этими квотам, с рад фемом и толерастией, на западе уже давно если у тебя половина компании не с вагинами то такой компании по закону штрафы выписывают, вводят квоты на бесплатные обучения, ништяки за женщин в компаниях и сейчас их внедрили уже море но что-то они не проявляют себя, а если и проявляют то "перлами" вроде масс аффекта со всратими лицевыми анимациями, это тоже злые хуеносцы мешают?
Очевидно лучшие представительницы своего рода, и одни из лучших представителей человечества, но не всемирно известные и даже близко не равные улучшим представителям мужчин, о чем я сказал, грамотные бабы есть но грамотный мужчина всегда будет лучше
Первая известна только тем что отсасывала математику Бэббиджу и делала грязную работу по дому пока он теоремы доказывал, остальные вообще рандомные хуи с горы. Хотя нет, про марийку майер слышал. Она даже не программист а просто удачно затеасалась в среду основателей гугла, лотерея один на миллион. Кстати, когда она в яху сдриснула с гугла нихуя я нее не получилось вытащить контору из жопу, т.е. и как управленец она говно без задач.
Двачую. Как ни крути а это факт, и в среднем бабы тупее мужика, и отдельные гениальные мужики выше классом на несколько порядков отдельных гениальных баб. Пиздёшь якобы их не пускали это хуета полнейшая. Среди мужиков в бедных странах тоже стояли непреодолимые социально сословные стены, тем не менее Ломносовы/Рамунджаны пробивались через них.
Это скорее говорит о твоём низком уровне раз ты восхищаешься пенсионеркой которая даже не из индустрии. Ну тот факт что какие-то аспирантики хуже нее преподавали вообще ничего не доказывает. В мухосранских вузах это обычное явление.
смерть козлам членоголовым! Настоящие мужчины выродились, а те, кто существует сейчас - жалкие примитивные твари с яйцами вместо мозгов.
Я не сексист, в отличие от например тех же мусульманов которые считают женщин за животных я так не думаю, и не отрицаю важной роли женщины в обществе, того что женщина может делать определённые вещи лучше мужчин, потому что существуют объективные различия, и это нужно понимать
По данным ЮНЕСКО, из-за стереотипов и дискриминации женщин-учёных в мире почти в 3 раза меньше, чем мужчин.
Я отрицаю. ИМХО вреда от них больше чем пользы, взять хотя бы такое распространённое явление как "наташки".
бесполезный спермобак, спок
Ну этот вопрос действительно дискутабельный, например упомянутое явление действительно, но применим он не ко всем женщинам, а только к женщинам определённой национальности. В той же японии например такое явление так массово не встречается. В любом случае не хочу вступать в дискурс по этому поводу, тред не про это, да и такое мнение что вреда больше тоже имеет право быть, я же только хотел сказать что анон выше был прав когда говорил что для вышки женщина препод программирование это плохой знак, это элементарно значит что преподов они набирают по остаточному принципу и что все хорошие преподают где-то в другом месте, только это я хотел донести
диван по имени инкаминг.
Да роль препода вообще сомнительна. Его задача грамотно пересказать учебник а большего от него и не требуется.
Наверное Mock самый нейтральный вариант, подходящий для кода.
>что так делают просто для того что бы легитимно отшить, сейчас понимаю в чем на самом деле ббыло дело
И в чём же?
Да пофиксил уже. Да был точно скачан сдк. Пофиксилось полным сносом дотнета и вижуал студио.
>Женщины из-за стереотипов не идут в точные науки
То есть разницу интересов и целей мужчин и женщин ты вообще во внимание не берёшь, сис?
Если шарп с оптимизацией и С++ - без разница почти не ощущается. НО, ебашим сборку под конкретное железо, добавляем векторизацию и т.д. и это просто небо и земля. Один и тот же код - разница в сукорости - 12 раз. Это без всяких попыток оптимизации песочка, без хиторостей по поводу оптимизации алгоритма, всяких карт и прочего - простая хуйня: 800x800 поле, песочек падает пока не найдет под собой другой блок который твердый, потом проверяем справа-слева, если пусто - прверяем снизу и если снизу пусто - "скатываемся". 12 раз прирост перформанса просто за счет того что взяли С++ и нужные флаги компиляции поставили.
После такого - кажется что шарп - калечный.
Да. Но это просто выставлением флагов и выбором другого языка. При этом написание кода заняло одно и то же время. Я больше ебался с тем чтобы вспомнить как там библиотеки в С++ залинковать. Да и мой уровень плюсов несравнимо ниже шарповского, думаю чел что знает плюсы лучше и немного оптимизаторством болеет - получил бы прирост намного больший.
В реальном мире твое байтоебство мало кому нужно.
Это конечно отлично совет, но куда меня возьмут с дефолтным знанием шарпа, когда мой максимум вывести в консоль список? В плане, я не работал ни с одним фреймворком.
никуда. это может любой школьник который интересуется программированием. Тебе нужен очень мощное алгоритмическое мышление, чтобы уметь создавать эффективные алгоритмы для задач. С этим навыком ты будешь очень востребован, и будешь получать в хорошие зарплаты
Изначальный вопрос был как вкатиться в веб, поэтому я и не понял к чему мне про работу написали, учитывая что я только недавно разобрался в шарпе и ооп.
Ну так вот. Мое решение - сделать третье приложение, которое должно как-то узнать об апи этих приложений, сохранить пути и параметры что нужно передать и в зависимости от настройки - будет слать запрос на старт задачи.
Насколько это хуевое решение для такой задачи? Просто сейчас настройка переодичности выполнения всяких штук у этих приложений отдельная, ну, соответственно админ должен и там и тут настроить. Хочется дать админу возможность настроить это все в одном месте, допустим, одно приложение должно периодически удалять старые данные, другое - должно разослать уведомление о том что срок подписки заканчивается. Хотим делать это первого числа в час ночи. Логично же вроде получается: вот отдельное приложение-планировщик.
Проблема возникает если задуматься о том что может появиться еще несколько таких вот приложений. Каждый раз лезть в исходники чтобы добавить возможности которые есть у приложения в этот вот планировщик задач - ну такое. Возникает мысль о том, чтобы уже приложения - представились в этом, сохранился в базе апи, но тут непонятно что делать если тип составной какой-то. Можно конечно договориться о ДТО заранее, чтобы апи не был слишком сложным, но тут же хуй знает как дальше будет.
В общем. Я же не думаю, что только у меня возникали такие вот проблемы. Какие есть бест практис на этот счет и вообще, может быть я тут велосипед придумываю, а есть какое-то стандартное решение для того чтобы дать пользователю с правами возможность создания каких-то переодических заданий для микросервисов.
ну у тебя и проблемы конечно. Гугли ошибку, находи решение. Скорее всего обосрался с объявлениями типов
>Ну так вот. Мое решение - сделать третье приложение, которое должно как-то узнать об апи этих приложений, сохранить пути и параметры что нужно передать и в зависимости от настройки - будет слать запрос на старт задачи.
Видел что-то подобное в проде, работает.
В целом, если есть что-то типа нугета/dll/еще чо-то, где будут лежать контракты и проч, то и затаскивать новое не так геморно.
А вообще я бы не ебался и ради двух хуевин хоть все захрадкодил, ибо с нихуевым шансом этих хуевин так и останется две
https://www.hangfire.io/ как планировщик задач. Делаешь задачу, он её сохраняет в свою БД и потом выполняет по заданному расписанию.
gRPC с его прото контрактами могут помочь избежать внезапного изменения АПИ. Контракты пихаются в отдельный репо и реферянсятся поставщиком АПИ и его потребителями.
Можно просто DTO в отдельный репо запихать, если с gRPC возиться не хочется.
Без шуток: надо учить историю чтобы избегать таких вот мыслей. Они не только токсичны, но и опасны для общества в целом.
Ксенофобия в любом виде - зло.
https://en.wikipedia.org/wiki/Libcaca
https://en.wikipedia.org/wiki/AAlib
Ищи биндинги или делай сам вот под это.
Бля, хотел каптчу в консоли вывести, лан пох.
Нет, тупая ты пизда, надо хоть раз включить свой высохший от чтения нихель пихель мозг и понять простую вещь: у мужчин и женщин изначальные разные интересы и целеполагание. Гениальных женщин и правда не меньше, чем гениальных мужчин, только их гениальность в другое русло направлена: как пизду теплее пристроить, как зачать от одного, а доить другого, как на работе всеми манипулировать и т.д.
При каких объявлениях типов? Мне четко по белым по черному пишут,
компилятор : "модель может иметь только один персистент кей"
коддер : А ЕСЛИ МНЕ НУЖНО ДВА?
компилятор : ой все
охуеть права? пиздец полезный этот код фирст, говно полное, или например внешние ключи, в скл это все просто делается, зашел в таблицу, покликал туда-сюда, даже первоклашка справиться, в код фирст это все через жопу делается особенно если задача хоть чуточку не тривиальная как например внешний ключ к индексированному представлению
Других преподов у меня для вас нет.
А тут уже развели какой-то мутный спор про место женщин в программирвоании
Совсем делать нехуй?
Двачую эту естественную нейросеть в мозгу самки примата вида хомо сапиенс. У Разума нет пола. Разум или есть (и он зарабатывает кодингом) или его нет, и неразумный хомосапиенс зарабатывает пиздой, хуем, жопой, ртом или руками-ногами.
Как бы да, как нейросеть натренировать так она и будет работать, но это не значит что нейронка будет одинаково хорошо работать в серверах гугл и на ноутбуке студента, устройство на котором работает нейронка влияет на ее работу, с этим никто не спорит, никто в здравом смысле не станет спорить и стем что мыслительные процессы женщины несколько отличаются от мужских в силу объективных особенностей не только воспитания но и физиологии мозга и организма в целом.
Тем ценнее нейронки женщин - им приходится на более нестабильном "железе" работать.
Люблю их за это
А ты умеешь мотивировать!
Из рашки тоже надо периодически выехжать, и не во всякие турции, чтобы не нести ватнический бред.
Конечно можно. Берешь хендлер окна и вилкой в ансейф полез.
Куда хош. MVC говорит тебе как сущности должны между собой общаться ничего более.
А насчет enym - не нужон. Расширать - неудобно, если логика появится - придется ебстись. Делай сразу класс и забудь про эту хуйню. Константы выноси в отдельный статический класс. Если нужно проходиться по константам - сделай коллекцию вместо enym. Логика все равно в определенный момент появится, как бы ты не надеялся, что вот ну это же так удобно enym'ом делать, всегда выходит так, что приходится добавить логику. И чтобы у тебя она не была размазана по всему приложениею с миллионом свичей, хучией ифов-хуифов - делй сразу, блядь, класс. Спасибо скажешь потом.
Я просто хз как ваще правильно сделать.
У меня есть поле которое должно хранить настройку.
Ну собственно 1 или 2 или 3.
Подумал что enym подойдет, хотя подойдет и просто byte но я хочу правильно сделать, проект в гит добавлю и буду показывать в резюме, и вот хочется что бы не сильно ахуевали с этого говнокода.
Вообще просто byte и число мне бы больше подошло так как ебни меньше. Отдельный класс создавать на каждый пункт а потом просто присвоить полю обьект и потом в логике смотреть обьект какова класса лежит?
Типо
public class Setting
{
}
public class Setting1: Setting
{
}
public class Setting2: Setting
{
}
public class Setting3: Setting
{
}
pubblic class Host
{
public Setting s1_OR_s2_OR_s3;
}
И потом когда контролер будет обрабатывать объект просто смотреть проверять какому из классов принадлежит s1_OR_s2_OR_s3 ?
Вроде норм но пздц как тупо, хз пытаюсь сделать просто по уму так сказать.
Я просто хз как ваще правильно сделать.
У меня есть поле которое должно хранить настройку.
Ну собственно 1 или 2 или 3.
Подумал что enym подойдет, хотя подойдет и просто byte но я хочу правильно сделать, проект в гит добавлю и буду показывать в резюме, и вот хочется что бы не сильно ахуевали с этого говнокода.
Вообще просто byte и число мне бы больше подошло так как ебни меньше. Отдельный класс создавать на каждый пункт а потом просто присвоить полю обьект и потом в логике смотреть обьект какова класса лежит?
Типо
public class Setting
{
}
public class Setting1: Setting
{
}
public class Setting2: Setting
{
}
public class Setting3: Setting
{
}
pubblic class Host
{
public Setting s1_OR_s2_OR_s3;
}
И потом когда контролер будет обрабатывать объект просто смотреть проверять какому из классов принадлежит s1_OR_s2_OR_s3 ?
Вроде норм но пздц как тупо, хз пытаюсь сделать просто по уму так сказать.
В плане? JS твои данные в json формате обычно получает. Это уже автоматом за тебя происходит всякими сериализаторами. Если вопрос в том, сколько знаков после запятой хранить, то гугли именно это. Например https://stackoverflow.com/questions/12283070/serializing-a-decimal-to-json-how-to-round-off
Это чистой воды субъектевизм. Если вы, батенька, не научились нормально работать с перечислениями (enum), то не думайте что у всех также.
Я научился. Не используй их и будет все заебись.
Тут дело в чем. Ты не можешь предсказать, что должно быть перечислением, а что - нет и в отличии от джавы ты не сможешь удобно добавить логику в перечисление. Нет - ты либо будешь вынужден выкорчевывать их, либо хуячить экстеншин методы, а это самой концепции перечислений в шарпе противоречит.
Ну серьезно. Вот банально в майки и ко - захардкодили протокол сервера перечислением. Я хочу кестрел использовать не как веб сервер, а чтобы, допустим DLMS/COSEM, вот, блин, вся инфраструктура под боком, просто сделай новый протокол, укажи серверу что нужно не HTTP использовать, а DLMS/COSEM, а вот хуй тебе за щеку, жди бедрока в .net6, либо делай финты ушами, потому что на базовом уровне хуйнули перечислением протокол, ведь, блядь, никому код не понадобится, никто не захочет его расширить, да, блядь, так ООП и работает же, охуенно, нахуй. И ты вынужден форкать кестрел и выкорчевывать из него это говно. А как бы было охуенно как в жаве с ее Netty - просто добавил что надо и пользуйся, охуенно, блядь. Нет, у нас свой путь.
Перечисления хорошо, когда нужно что-то ну совсем маленькое и внутренние делать. Во внутреннем - хуй с ним, иногда действительно удобно что IDE тебе варианты предлагает и можно сгенерировать код на его основе, но если эта срань попадает в публичный апи, еще и не какой-то совсем стандартизованный, типа ошибок сокетов - это не должно попадать в основную ветку.
Ну, что такое правильно? С точки зрения обычной практики - настройку бы нужно в отельную сущность в БД вынести.
Что-то типа:
public class Setting
{
public int Id {get;set;}
public string Name {get;set;}
public string Description{get;set;}
...
}
public class Host
{
public int Id{get;set;}
public int SettingId{get;set;}
public Setting Setting{get;set;}
...
}
Таким вот макаром - ты можешь доп информацию хранить это раз. В случае добавления новых настроек - ты просто в одном месте(при засеивании базы/при создании модели) добавишь и если делал по уму - тебе просто нужно будет добавить новую логику, не трогая страй код. Это два. Если ты удалишь настройку, переименуешь ее и т.д. - ничего не изменится в коде программы, ты просто будешь проверять - наличие настройки и если ее нет - ты просто никогда не выполнишь код который должен был обрабатывать логику что была там. Ну и главное, если ты не хочешь лезть каждый раз в базу - ты можешь это дело просто закешировать и все будет так же работать, но при этом у тебя не будет enum'а, который накладывает дополнительные проблемы с будущим расширением кода.
В контроллере - по хорошему, ты вообще не должен был бы делать логики какой-то особой - нужно передать полученный объект сервису, который знает как обработать запрос. Типичная картина: инжектишь сервисы в конструкторе, при получении запроса - просто передаешь им в них уже логика какая-то происходит, контроллер просто служит точкой входа. Можно делать не так а использовать паттерн команда и получая запрос - создавать команду ее отдавать обработчику команды и по завершению - возвращать результат. Тут как тебе больше нравится.
Да, это если говорить о том как принято. С точки зрения личного использования - делай как кайф. Если ты на джуна претендуешь - от тебя ждут что ты не совсем распиздяем выглядишь и будешь делать что тебе говорят.
Ну вот не много ли будет класса для простой настройки?
Там же ничего не будет.
В логике придется чекать Name но я точно так же могу сделать стринговое поле Setting в основном классе и проверять его.
> С точки зрения личного использования - делай как кайф.
Я просто пояснил как оно делается уже в реальных условиях. Сегодня ты посчитал что обойдешься перечислением, завтра что нет смысла разбивать простню на методы, послезавтра - что проще копипастнуть код из одного места в другое. А через месяц ты не можешь понять что где и как добавить чекбокс чтобы все не сломалось к хуям.
Ко всему, подумай о том, как ты будешь тестировать этот кода .
Заполняю его вот так как на пикче. Всегда на первом клике по нему зависает на примерно 2 секунды. А дальше все нормально работает.
Как будто ощущение что оно в момент первого клика загружает данные из массива nameStreets... Но это же хуйня, разве Loaded не должен срабатываеть во время InitializeComponent()?
И как исправить? Проблема 100% на любом коде где есть большие комбобоксы (больше 100 штук)
Нахуй иди со своими быдлотестами, говнокодер ёбаный.
По факту что то можешь ответить в защиту говенного кодфирста или просто пукнешь в лужу?
Посмотри что там под капотом, мб там ответ
https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/ComboBox.cs,2ba9dd6838416d6a
в диалоге со мной ты уже столько раз напукал по себя, что уже не лужа, а маленькое озеро. Зачем ты пытаешься спорить, если ты азов не понимаешь - где и как и главное какие вешать ключи, чтобы были связи? Нормально бы отвечал, без выебосов, уже бы скинул ответ, а так, сиди дальше в говне
пук-среньк
Какие связи? я тебе ясно сказал хочу сделать два индексируемых ключа как в sql, в code-first ключ добавляется атрибутом [key] но когда я добавляю атрибут ДВУМ переменным я получаю ошибку компилляцию потому-то эта херота пишет что может быть только 1 индексируемый ключ, а ты вместо написать что-то по факту просто слился, хочешь что-то пизденькнуть тогда дай мне пример нескольких индексируемых ключей в кодфирст! Не можешь? Так и пиздуй нахуй тогда обосрамус
Да ничем, это говно не может даже в многопоточность, о чем тут говорить вообще
Это как?
Сука, ты больной? Жопаскрип здесь каким боком?
1. Оно еще проще чем шарп в плане синтаксиса. Да - многословно выходит, но в отличии от кучи других языков тебе просто сам язык не позволит совсем нечитаемую хуету сделать. В шарпе с его стремлением быть модным-молодежным сейчас в этом плане довольно невесело и приходится дрочить кодстайлы, потому что дай свободу кодерам - все в пиздец превратится и хуй потом кто разберет.
2. Огромная. Нет, блядь, ОГРОМНАЯ кодовая база на все случаи жизни. Всё, блин, есть и после того как ты посидел годик на джаве, когда ты в шарпе пытаешься что-то найти - ты будто из огромного торгового центра в сельпо попал - бери что есть и если надо допиливай, готовых решений крайне мало, по сравнению с джавой еще и зачастую те что годные - по закрытой лицензии и с прайсом от 1к бачей, не так много, но ты же даже еще не уверен что будешь использовать в проде.
3. Тупо работы больше.
Это самое основное. В мелочах - более логичная структура всего, плюс это все еще единственная хуета где ты просто пилишь кода и он везде где есть JVM запускается без всяких НО, в отличии от шарпов, где: Ну, это у нас кроссплатформенно, а это не, а вот это будет если там вот покрутить; ну или уж по хардкору - С++, где чтобы добиться кроссплатформенности - ты такие финты с кодом делаешь, что его лучше больше никогда не трогать.
Спасибо за такой подробный ответ, анон. Добра тебе!
Я нашел про это тут
https://blog.jetbrains.com/dotnet/2014/09/04/fighting-common-wpf-memory-leaks-with-dotmemory/
Но так как статья за 2014
Пошарил в других местах и нашел, что все это старая инфа и сейчас привязка создает слабую сслыку, которую со временем гарбеджколлектор сам и освободит и можно уже не парится по этому поводу
Решил попробовать проверить это сам на практике
Такой сетап
Есть главное окно через которое вызывается новое окно и в этом новом окне идет привязка текстблока к свойству объекта класс которого не реализует INotifyPropertyChnaged
Что я получаю
Первый раз открыл-закрыл дочернее окно объект к которому идет привязка не освобождается
Повторяю второй раз то же самое делаю, освобождается объект Item только тот который был создан в прошлый раз
И т. д.
То есть освобождение происходит но с лагом на одно закрытие
Когда реализую INotifyPropertyChnaged освобождается объект, но надо подождать секунд 20
Код на скринах
> два индексируемых ключа
>индексируемых
>ключа
Вы блять только посмотрите на это уебище. Вы только блять посмотрите, какой мусор тут сидит и вайнит на инструмент создания таблиц в Sql. Этот биомусор, даже не умеет в гугл, чтобы правильно сформулировать свою проблему. 3 раза этому чучелу пишу, "гугли блять, чмошник". И все, что я получаю в ответ, это
>по факту просто слился
>Так и пиздуй нахуй тогда обосрамус
пиздец парень, лучше бы твой отец кончил на простыню. Даже не вижу дальше смысла тебе что то отвечать, можешь кукарекать что хочешь
Ну и доп вопрос вдогонку. В перспективе к основному языку платформы хочу ещё изучить функциональный язык когда-нибудь. Собственно на JVM это Scala или Clojure, а на .Net это F#. Со скалой в целом всё неоднозначно, язык как будто и умирает, но при этом экосистема там охуеть огромная и какая-то жизнь таки теплится. Плюс всякий бигдата завязан на Spark и всё такое. Кложа ощущается также, но тоже что-то происходит. А вот с F# чёт пока не могу оценить. Есть какие-то мифические финтех конторы которые платят больше всех по рынку, есть какие-то проекты но всё очень непопулярное и недоделанное. Кто-то вообще пилит на F#?
Уже месяц ломаю голову куда вкатываться. Помоги мудрыми советами, двач или накидай хуёв. Заряжаю пост на высокие рейты и безбедную жизнь.
Ну и доп вопрос вдогонку. В перспективе к основному языку платформы хочу ещё изучить функциональный язык когда-нибудь. Собственно на JVM это Scala или Clojure, а на .Net это F#. Со скалой в целом всё неоднозначно, язык как будто и умирает, но при этом экосистема там охуеть огромная и какая-то жизнь таки теплится. Плюс всякий бигдата завязан на Spark и всё такое. Кложа ощущается также, но тоже что-то происходит. А вот с F# чёт пока не могу оценить. Есть какие-то мифические финтех конторы которые платят больше всех по рынку, есть какие-то проекты но всё очень непопулярное и недоделанное. Кто-то вообще пилит на F#?
Уже месяц ломаю голову куда вкатываться. Помоги мудрыми советами, двач или накидай хуёв. Заряжаю пост на высокие рейты и безбедную жизнь.
В чём проблема фронденда ? Работы намного больше, в C# и Java ? Сам овладел основами C#, C++, но понял, что здесь нечего ловить, особенно в моей 140к человек мухосрани, нужно во фронт енд вкатыватся
>Работы намного больше, в C# и Java ?
Работы и рабочих предложений намного больше, чем в C# и Java. ? Быстрофикс
Ебал я в рот этот знак вопроса, ставится автоматом
Не лучше ли боротся с инструментами, но владеть востребованными навыками, чем потом выучить C# или Java, и сидеть сложа руки, потомучто вакансий в разы меньше, чем на фронт енд. В моей мухосрани 140к населения, никому здесь C# и Java не всрался, несколько веб студий есть
> А я тут со своим маком и райдером. Будет ли мне норм?
Если тебе в райдере норм - то будет норм. Тем более что решарпер тот же почти у всех стоит.
Сейчас майки вроде как нашли золотую середину с конфигом проектов(*.csproj) а потому разницы особой нет где настраивать прокет. Просто в студии - есть окошки, но, внезапно, в этих окошках не все опции можно настроить и все равно полезешь в конфиг.
Короче, по этому вопросу. Тут, если райдер куплен и контора не какая-то дюже секретная(в контексте что я вот работал на объекте, где нельзя было свой ноутбук и телефон проносить) - все должно быть нормально. Сиди на маке и пили как кайф.
> Или там не хватит каких-то фич?
Учитывая что студия последние n-лет пиздит фичи из решарпера и райдера, я бы сказал наоборот. Мне вот райдер не нравится исключительно из-за того как у него автокомплит работает и его дефолтный кодстайл.
> Хз, может дебаггер какой-то палёный в райдере или будет вечное проблема коммуникации на тему настройки проекта?
Не будет, если ты понимаешь как сам проект настраивать ручками.
> В целом винда нужна чтобы преуспеть в C#/.Net?
Если не под десктоп - нет. Я вот дома на линуксе сижу и вообще в VS-code хуячу.
> Кто-то вообще пилит на F#?
Именно как разрабы основным языком - нет. По крайней мере я не слышал. Однако для всякой мелкой фигни он нормально себя показывает. Да и когда самому нужно что-то быстро сделать. Ну и это таки полигон для майков - они там опробуют фичи всякие, потом те что удачные уже в C# тянут.
А вообще, >>1999697 анон прав. Лучше смотри какие вакансии вокруг и куда тебе интереснее был бы попасть. В моем вот регионе внезапно шарп много где используют, потому что местный вуз с начала нулевых на него дрочит и соответственно было 3 стула шарап-пхп-1с для человека, что не хочет возиться с фронтом, но и не оч хочет удаленки. У тебя может быть ситуация, где ты с шарпом - хуй найдешь работу, а жавы - завались.
Точно так же, как в дельфи.
Тут короче таблица, из 5 строк. Каждая строка из разных полей заполненных из базы.
Хочу такое сделать на wpf (скрин с аксеса) через тот же datagrid. Но сам слабоват и не знаю куда копать
Погугли кастомные датагрид контролы в devexpress/telerik (вроде), я когда-то видел похожее, правда не помню название самого контрола.
Я бы просто дефолтный ItemsControl набил бы своими контролами
проблема:
при изменении значений в файле ресурса не обновляются данные ТОЛЬКОпри локальном дебаге все работает и обновляется на паблише
дано :
проблема присутствует так же и на других серверах поэтому кеширование почти исключено
вместо актуальных данных в ресурсах показываются более старые которые когда-то были в файле но били заменены
проверка содержимого файлов ресурса показало что там находятся НВОЫЕ ОБНОВЛЕННЫЕ данные не смотря на то на странице все равно отображаются не корректные устаревшие данные
поиск по совпадениям не показало ни одного совпадения где находятся эти призрачные данные которые отображает страница я хз
что я пробовал:
ctrl + f5
удалить существующий билд и опубликовать на чисто
создать новый файл ресурса,
танцевать с бубном
xчистить мусор сутдии
перезапускать иис
честно сказать я в ахуе от этой ситуации
на паблише остаются старые данные
Ну так спизди! Ты что не русский? На рутрекер марш.
Возможно ли такое для .net разраба?
К нему приходят клиенты-гей ради секс услуг разве что с такими деньгами.
А в чем сложность? Алгоритм - эелментарный, гуглится за 2 секунды.
Если ты про интерфейс - форму накидал и вперед.
Ты добавил Ignore к Mvc пайплайну, а сериализуешь руками. При ручной сериализации надо отдельно настройки прописывать.
И вообще, в коре давно свой собственный System.Json есть.
Почему в данном коде используется BaseList, а не IBaseCollection в "void AddRange", ведь в аргументах стоит "this IBaseCollection collection_name"? BaseList же всего-лишь наследник IBaseCollection
Сорян что так по дебильному копирую код, я делаю по видео, а там весь код очень длинный
public class BaseList : IBaseCollection
{
private object[] items;
private int count = 0;
public BaseList(int initialCapacity)
{
items = new object[initialCapacity];
}
public void Add(object obj)
{
item[count] = obj;
count++;
}
public void Add(object obj)
{
item[count] = null;
count--;
}
}
public static class BaseCollectionExtension
{
public static void AddRange(this IBaseCollection collection_name, IEnumerable<object>objects) // IEnumerable нужен для foreach по инстанциям, может быть передана любая коллекция. collection_name от BaseList
{
foreach(var item in objects)
{
collection_name.Add(item);
}
}
}
//Теперь AddRange доступен через объекты класса IBaseCollection:
......
//потом метод
Main(){
IBaseCollection collection = new BaseList(4); //BaseList - класс, наследованный от IBaseCollection
List<object> list = new List<object>() {1, 2, 3};
collection.AddRange(list);
collection.Add(1); //Метод в BaseList
}
Почему в данном коде используется BaseList, а не IBaseCollection в "void AddRange", ведь в аргументах стоит "this IBaseCollection collection_name"? BaseList же всего-лишь наследник IBaseCollection
Сорян что так по дебильному копирую код, я делаю по видео, а там весь код очень длинный
public class BaseList : IBaseCollection
{
private object[] items;
private int count = 0;
public BaseList(int initialCapacity)
{
items = new object[initialCapacity];
}
public void Add(object obj)
{
item[count] = obj;
count++;
}
public void Add(object obj)
{
item[count] = null;
count--;
}
}
public static class BaseCollectionExtension
{
public static void AddRange(this IBaseCollection collection_name, IEnumerable<object>objects) // IEnumerable нужен для foreach по инстанциям, может быть передана любая коллекция. collection_name от BaseList
{
foreach(var item in objects)
{
collection_name.Add(item);
}
}
}
//Теперь AddRange доступен через объекты класса IBaseCollection:
......
//потом метод
Main(){
IBaseCollection collection = new BaseList(4); //BaseList - класс, наследованный от IBaseCollection
List<object> list = new List<object>() {1, 2, 3};
collection.AddRange(list);
collection.Add(1); //Метод в BaseList
}
> Видел что в студии много чего настраивается через всякий UI вместо ковыряния конфигов. В целом винда нужна чтобы преуспеть в C#/.Net? Или можно не разу к винде не притронуться верстая круды на дотнете уже?
Зависит от проекта сильно. В одном месте шлепают легаси на wpf с нет фреймвороком, в другом пилят круды на неткоре. У меня, к примеру, все завязано на повершел скриптах которые поднимают ажур сервисы, которые только под виндой работают. И как бы я не ненавидил студию, она нужна из-за мсскл и сервис фабрика как и винда, которую тоже не очень люблю.
> А вот с F# чёт пока не могу оценить. Есть какие-то мифические финтех конторы которые платят больше всех по рынку, есть какие-то проекты но всё очень непопулярное и недоделанное. Кто-то вообще пилит на F#?
Писал на хаскеле, на работе есть пара сервисов на фшарпе. Кароче фшарп выглядит как другой синтаксис для шарпа, более подходящий для ФП, но не как отдельный язык. Никаких тебе монад, тайпкласов, кажется что после шарпа 10го или 11го в нем вообще никаких фич своих не останется.
И если ты хочешь выучить именно тру фп, то лучше учи скалу/хаскель.
Кароче выбор у тебя такой: всратая джава, к которой есть невсратая скала, нормальная кросплатформенность, и охуенная экосистема, или невсратый шарп, к которому нихуя кроме самого шарпа не идет.
Двачую. Я не устал скроллить эту портянку, готов проскроллить ещё страниц 100.
Есть пока что три типа обработчиков в приложении(возможно в процессе появятся новые). Работают периодически. Пользователь должен иметь возможность создать свой обработчик с нужными ему параметрами из типа что есть, ну и хуйнуть работу, может вырубить.
Так вот, в чем вопрос. Стоит ли эти типы обработчиков в базе хранить? Тип я понимаю, что стоит. Просто меня очень бесит вся эта хурма с тем, что вот у нас обработчик из БД, потом мы эту хурму приводим к обработчику из приложения. А как делать иначе - я не представляю. Разве что объединить их в одну сущность, но это уже вроде нехорошая практика и вообще, но блин.
Просто меня уже бесит: Models.Db.Handler; Dto.Handler, Core.IHandler<Type>, как это делать с одной стороны красиво и чтобы не выходило что 100500 файлов, а с другой чтобы не смешивать логику - я не представляю. Мой код из-за этого на 50% состоит из перегона одних сущностей в другие и обратно. Бред какой-то на самом деле, я думаю что что-то не так делаю.
Это норма в энтерпрайз разработке
https://blog.ploeh.dk/2012/02/09/IsLayeringWorththeMapping/
Бамп
Выскакивает какое-то исключение с какой-то хуитой на это
fileName = @"D:\\ks2020\\work\\mess\\SR_072_4.2021.xls";
Process.Start(fileName);
Файл 100% есть, 100% рабочий
да.
Теперь даже не знаю как решить - в гугле какие-то ебанутые решения уровня говнокодец пахнущий, типа пикчи
(сразу хуйня - что если другая версия офиса стоит, что если другая разрядность офиса стоит. что если пользователь офис поставил вообще в другое место, что если майкрософт решит этот офис ставить куда-то в другое место в очередной винде.
Самому проверять все случаи - это пиздец, нахуй такой велосипед, если в винде есть система ассоциации файлов где все это решено и как мне ею воспользоваться?
Можно, надо гуглить. Там есть тригеры
Я не пишу на коре если что - попробуй поставить в нугете Microsoft.Windows.Compability.
Так вот, покритикуйте структуру того как я вижу эту сущность в таблице:
JsonToken
{
int Id;
int TypeId;
int? ParentId;
string Name;
}
Ну, собственно меня что лично меня смущает - ParentId - нужен исключительно в случае если нужно хранить объект, т.е. его наличие зависит от типа. В случаях если это будет число, строка, булево и т.д. это значение будет всегда null. Но как без этого - я не придумал. Ну и я еще не придумал как, хранить описание массива, разве что каждому типу - хуйнуть дополнительный тип для массива и будет int - intArray, string - stringArray и т.д.
Я не совсем понял что ты узнать хочешь.
Вот накидал вроде то что у тебя написано.
Выдели крассным где непонятно.
Решил что для начала это будет что то не сложное, например вытягивание инфы о железе. Но меня ждал облом в виде https://github.com/dotnet/runtime/issues/22948
Как так, позиционируют себя мультиплатформой, но такой базовой вещи нету. Там что то пиздецовое с реализацией, что аж в .net 5 нету? Там кто то указал свою либу на этот счёт, а нативных вариантов(с мультиплатформой) нет?
Алсо, подкиньте идей на тему какой нить консольной апликухой и обязательно кроссплатформа.
Ну понятно что массив символов и они потом выводятся на консоль.
Вот вопрос мб есть какая библиотека для интерпретации символов в изображение?
Что бы не делать скрин символов в консоли а сразу получать изображение?
Нахуй мне это надо?
Ну так от нехуй делать и для практики написания кода. Вообще щас аспНет изучаю но уже давно понял что надо делать перерыв на неделю и изучать что то другое, если я что то не понимал то потом когда снова возвращаюсь к изучению все становится сразу понятно.
А картинки то зачем?
Хочу обучить нейронку создавать картинки аля матрица, правда еще не совсем понял как. Я с нейронками на Вы и стоя. Не совсем понимаю как она должна выглядеть. На каждый пиксиль по нейрону? А не дохуя ли? Пока вижу дело так: Просто алгоритмом из rgb в символы, и набираем масив для обучения, руками выбираю картинки которые нормально получились, далее гружу их в нейронку и треню, хуйня конечно получится но все же лучше чем по 4 разу перечитывать метанит лол
А что там делать-то? Тебе нужно просто получить насыщенность какого-то куска картинки и заменить ее символом. Самому такую вот библиотеку написать - час работы. Для работы с картинками - берешь Image, просто рассчитываешь размер картинки и размер консоли, так выбираешь размер курсора, проходишься по картиннке курсором, усредняя значение насыщенности, затем заменяешь символом который ближе всего к данной насыщенности.
Да, не насыщенности, а яркости.
Ну как тебе удобнее.
Мне например удобно читать книгу если что то не понятно то смотреть видос по теме, а если нужно что то напомнить то читаю метанит.
Метанит собственно это не сайт с уроками, это как справочник.
Почему в данном коде используется BaseList, а не IBaseCollection в "void AddRange", ведь в аргументах стоит "this IBaseCollection collection_name"? BaseList же всего-лишь наследник IBaseCollection.
Пока что ничего умнее как
Спарсить слово на каретке
@
Посчитать количество таких слов перед выбраным словом
@
Найти слово через n количество слов в сыром htmle и спарсить параметры
Но мне кажется что такое будет подлагивать на больших документах и вообще какая-то костыльная хуита. Как такое реализовано во всяких вордах и т.д.? Мб есть какой-то похожий готовый проект на гитхабе?
Троелсен, норм вариант? Посоветуй книгу с практическими уроками, или ресурс. Если такое есть. Именно практика интересует, если есть. Спасибо заранее.
Тролсен редкое говнище, чувак вообще писать не умеет.
Если знаешь английский, то bart de smet c# unleashed.
Я так подумал, что быстрее всего такое можно будет сделать на шарпе, в Visual Studio всё же формочки клепаются за минуту, а обработка событий вообще за даблклик ЛКМ.
Так вот, такой вопрос, каким инструментом будет лучше и быстрее всего организовать работу с БД? Желательно что-то такое, с чем не надо будет особо разбираться, ну и чтобы у меня всё парсилось в сущность, а не в массив какой-то.
Новые фичи сишарпа после 5 версии потом как семечки будешь щелкать, там серьезные основы заложены, а это главное.
благодарю, попробую
Так вот, я таки вот так и реализовал. Но обнаружился критический косяк - массивы, блядь.
Я теперь не представляю как оно должно выглядеть.
Блин, вот если бы тимлид не был таким вот любителем усложнить задачу, когда осталось 2 недели до дедлайна, а просто как люди - вынесем ДТО и интерфейсы для сервисов в отдельную сборку. Не, это слишком просто, пусть у нас сервисы друг другу представятся по рестапи, каждый сервис сохранит и будет из базы дергать и восстанавливать из этого дела JSON и только потом отправлять. ВЕДЬ: А вдруг забудет кто-то в общую библиотеку добавить изменения, а так представились и заебись.
Ну эт сделал. А как дальше дата сет собрать из этого всего?
Вот я тут задавал вопрос >>2005094 → в
Если кто знает ответьте плыз
То есть я хочу открывать xls таблицы внешним инструментом. У меня .net core 5
Сейчас у меня такое говно для теста. Но как переделать чтобы открывало средствами винды, а не я хардкором в коде?
Во-первых потому что я не знаю какая версия офиса будет у пользователя, какая там будет разрядность и где точно он его ставил
Во-вторых возможно у пользователя вообще нет офиса, а стоит какой-нибудь либр или опенофис который и открывает эти файлы
Вот в нетфреймворке вроде так и было. Но в коре так не работает, надо прямо указывать экзешник
>entity framework же православный.
Я только начал вкатываться, такой вопрос - а в EF можно делать что-то сложнее примитивных таблиц?
Например сразу выдавать без лишних LINQ запросов составные запросы с сложными условиями? Или например форматирование? (например в базе в поле у меня такой полный формат даты, а в программе мне нужно более сокращенную форму выводить)
[STAThread]
static void Main()
{
App app = new App();
MainWindow window = new MainWindow();
app.Run(window);
}
Почему на app.Run может запускаться 2 окна? В конструкторе ничего такого нету.
>(например в базе в поле у меня такой полный формат даты, а в программе мне нужно более сокращенную форму выводить)
А при че тут EF?
Получаешь сраный DateTime и интерпретируешь его как тебе надо
Сейчас хочу срочно вкатиться куда-нибудь джуном (сейчас ебашу на проклятом заводе, убил уже всё здоровье себе). Готов работать за еду, выжигать глаза, ебашить 20 часов в день, лишь бы взяли.
Куда же всё-таки проще вкатиться, в веб или геймдев? Одинаково приятно и то, и другое. Просто нужно определиться, какую платформу дрочить вглубь, чтобы ускорить процесс перекатывания на новое рабочее место.
Геймдев
Проще в QA. Для примера практика нашей конторы - не тянет на джуна но вроде что-то знает - предлагают в QA пиздовать, если есть места.
А так. В геймдеве ты соревнуешься с толпой школотронов, которые МЕЧТУ лололо хотят воплотить, еще не зная что прогер в современном геймдеве сосет хуй. В вебе ты будешь соревноваться с выпускниками вузов в основном и бывшими пхпшниками.
веб
Самоисправил
А всё, понял. Дело в тиках.
foreach (char letter in checkboxString)
{
if (letter.IsNumber);
if (letter.IsLetter);
}
Помоему как-то так.
Я тебе выше уже написал, не тупи.
Нет, я пытаюсь разобраться в новой теме
Вы видите копию треда, сохраненную 10 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.