Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Топ прошлой недели

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Dotnet

С этим тегом используют

Программирование Csharp Все
33 поста сначала свежее
2
Вопрос из ленты «Эксперты»
user10830363
2 часа назад
Спроси Пикабу

Посоветуйте качественные курсы C# и .NET⁠⁠

Я хотела бы начать двигаться в направлении C#-разработки. Но курсов очень много, отзывы не очень.

Пересмотрела кучу платформ, остановилась на: SkillFactory, OTUS, ITVDN, Специалист — рейтинг хороший, но отзывы вызывают сомнение. Кто сталкивался с ними? Поделитесь мнением о них.

Если знаете другие топовые курсы — пишите названия, буду благодарна!

Также вопрос к бывшим менеджерам по продажам курсов (или тем, кто в теме): Как можно выбить максимальную скидку? Слышала что нужно отказать в цене 2-3 раза, правда ли это? Может знаете реальные рабочие лайфхаки?

Буду рада помощи! Заранее спасибо за ответ.

Программирование Программист IT Онлайн-курсы Курсы программирования Курсы Менеджер по продажам Лайфхак Скидки Обучение Дистанционное обучение Учебные курсы Csharp Dotnet Вопрос Спроси Пикабу Текст
7
2
raynemar
3 месяца назад

Visual Studio Code Extensions⁠⁠

Привет всем.
Есть ли среди вас те, кто пишут на VS Code .Net приложения?
Поделитесь, пожалуйста, какие расширения вы используете и какие считаете наиболее полезными.

[моё] IT Dotnet Visual studio Code Текст
3
cbagpipe
cbagpipe
6 месяцев назад
Лига программистов
Серия Прога мониторинга игровых ковров Artisan

Обновление проги мониторинга ковров Artisan. Практически 2.0⁠⁠

Продолжаю программировать)

Ссылка на первую часть: https://pikabu.ru/story/monitoring_dostupnosti_geymerskikh_kovrikov_artisan_11613910

Переписал своего бота мониторинга ковров практически с нуля.

Если раньше это была обычная программа, которую раз в полчаса запускал планировщик, то теперь это служба, которая работает круглосуточно, мониторит ковры нонстоп, а также отвечает на команды подписчиков в телеге.

Новые функции:

- Команды телеграм-бота. То есть они в принципе появились и ими можно пользоваться.

- Команда /get. Основное нововведение. Если вам не нужно постоянно получать уведомления о том какие ковры появились, а какие закончились, можно отписаться от уведомлений через /stop, но при этом по команде /get получать все доступные на данный момент ковры или только интересные вам.

То есть "/get 99" вернёт только ковры у которых в коде продукта есть 99, а "/get 99 xxl" - только те у которых в коде есть и 99 и xxl.

Обновление проги мониторинга ковров Artisan. Практически 2.0 Linux, Программа, Приложение, Microsoft, Программирование, Csharp, Dotnet

Кстати, сегодня вышел новый ковёр (キ83) . На сайте появился, а больше нигде никаких анонсов пока нет.

- Индивидуальные фильтры уведомлений. Если лично вам не нужны уведомления о том, что в продаже появились классические ковры размера S - это можно организовать. Пока фильтр настраивается только с моей стороны.

Обновление проги мониторинга ковров Artisan. Практически 2.0 Linux, Программа, Приложение, Microsoft, Программирование, Csharp, Dotnet

из переписки с пользователем бота

Немного технической информации для любителей программирования:

- Это всё ещё приложение на NET8.
- Пишу и собираю всё в линуксе в VS Code.
- Для основы сервиса использовал шаблон Worker, но так как кода не особо много и он не сложный, дополнительно на микросервисы внутри ихней HostedService инфраструктуры не стал дробить. Просто в пределах одного воркера на функциональные классы поделил и всё.
- Конфиги и данные храню в JSON. Сериализую периодически в файл встроенным сериализатором (System.Text.Json.JsonSerializer)

Прочая обвязка

- Для телеграм-бота использую `Telegram.Bot`
- Для логгирования `log4net`
- Для прикручивания к линуксовому диспетчеру служб Systemd - `Microsoft.Extensions.Hosting.Systemd`
- Для отображения таблички у себя на сайте использую `DataTables` (офигенная штука). И снова планировщик cron, который с бэкенда во фронтенд копирует периодически файлик с данными.
- Для персональных фильтров изпользовал `Dynamic.Linq` - тоже классная вещь, не надо самому мутить свой контракт и парсер для него.

Вроде всё... Программа простая, но так приятно смотреть как оно всё само работает)

Показать полностью 2
[моё] Linux Программа Приложение Microsoft Программирование Csharp Dotnet
0
cbagpipe
cbagpipe
10 месяцев назад
Серия Прога мониторинга игровых ковров Artisan

Мониторинг доступности геймерских ковриков Artisan⁠⁠

Может кому пригодится.

По просьбе одного хорошего человека написал программу и сделал удобную табличку с информацией о японских геймерских ковриках для мыши от компании Artisan.

Информация тянется с официального японского сайта (https://www.artisan-jp.com/) каждые полчаса. Есть возможность слать уведомления в телеграм.

https://cbagpipe.ru/artisan/

Табличка выглядит так:

Мониторинг доступности геймерских ковриков Artisan Программирование, Csharp, Dotnet, Геймеры, Коврик, Компьютер, Киберспорт, Товары, Япония

Уведомления — так:

Мониторинг доступности геймерских ковриков Artisan Программирование, Csharp, Dotnet, Геймеры, Коврик, Компьютер, Киберспорт, Товары, Япония

UPD:

Писал полностью в Linux. В качестве IDE использовал VS Code. Фреймворк — Net8.

Если интересны подробности, пишите в комментах - добавлю немного кода.

Затем закинул программу себе на сервер и добавил её периодическое выполнение в cron.

Из недостатков — для отправки уведомлений в Telegram использовал самый популярный пакет — Telegram.Bot. Так вот, в текущей версии этот пакет не поддерживает тримминг. Соответственно, собранное приложение вместо ~18МБ весит почти 100!

На сервере места достаточно, так что это не проблема. Но… 100МБ на очень скромное по функциям приложение! У моего внутреннего программиста-перфекциониска глаз дёргается от этого.

Показать полностью 2
[моё] Программирование Csharp Dotnet Геймеры Коврик Компьютер Киберспорт Товары Япония
0
aks2dio
aks2dio
11 месяцев назад

Приветственный стартовый пост⁠⁠

Приветственный стартовый пост Unity, Gamedev, Разработка, Dotnet, Менеджмент, Образование, Тимлид, Обучение, Блог

Возрождаю свой уголок для само-выражения и фиксации опыта.

С 2017 г. разрабатываю, лидую, преподаю, менторю и консультирую.

Был в найме, стартапах, фрилансе, инди, мобилках, десктопах, вебе, XR.

Про это и могу рассказать. И про новые вехи в своей карьере.

Какой контент можно ждать:

- 🗒 Точно будут небольшие посты с какими-нибудь заметками, инсайтами, бенчмарками и технологиями.

- 📅 Анонсы публичных выступлений, где будет возможность пообщаться лично.

- 📢 Рекомендации: видео-ролики, статьи, пакеты и всё, что покажется любопытным и захочется отложить.

- 📽 Буду учиться делать Клипы и Видео про что-нибудь полезное.

- 📝 Буду практиковаться в написании статей. Уже готовлю первую пробу.

- 📶 Возможно будут стримы. Есть идеи на проекты — думаю над тем, чтобы работать над ними онлайн.

- ❓Если будет востребован Q&A, то будет и это.

Как часто: жизнь покажет, но пока думаю, что не часто :)

1. Это всё больше для меня: что-то обдумать, обработать, зафиксировать, чтобы к этому можно было позже вернуться.

2. Буду делиться своим приобретаемым опытом и будет здорово, если он окажется полезен.

3. Буду рад опытом не просто делиться, но и обмениваться. Уверен, что у тебя, читатель, найдутся интересные комментарии, дополнения или темы для обсуждения.

Первый камень заложен. До новых постов 👋

Показать полностью
[моё] Unity Gamedev Разработка Dotnet Менеджмент Образование Тимлид Обучение Блог
3
8
cherkalexander
cherkalexander
1 год назад
Лига программистов

Как тестировать internal методы и классы в C# — InternalsVisibleToAttribute⁠⁠

Как тестировать internal методы и классы в C# — InternalsVisibleToAttribute Кросспостинг, Pikabu Publish Bot, Dotnet, Текст, Тестирование, Csharp

[assembly: InternalsVisibleToAttribute("YourProject.UnitTests")]

Представьте, что вы разрабатываете библиотеку, которой будут пользоваться тысячи людей 😮. Чтобы убедиться в стабильности — нужно всё хорошенько покрыть тестами. Все мы любим инкапсуляцию, верно (я надеюсь)? Поэтому мы не разрешаем использовать всё подряд из нашей сборки, а с умом используем модификаторы доступа и позволяем использовать только public классы и методы.

В C#, есть 7 модификаторов доступа, основные:

- private — доступ только внутри текущего класса
- protected — доступ внутри текущего и дочерних классов
- public — классы и методы доступны где угодно, также из сборок, использующих текущую
- internal — публичный API, внутри текущей сборки. Как public, но нет доступа из сборок использующих текущую
- остальные можно посмотреть тут

Но, C# — не JavaScript, и для тестов создаётся отдельная сборка, а internal методы в ней не доступны.

Чтобы тестировать internal функциональность, нужно использовать атрибут InternalsVisibleToAttribute, и в качестве параметра указать имя тестовой сборки. Тогда все internal методы и классы будут доступны для тестирования.

[assembly: InternalsVisibleToAttribute("YourProject.UnitTests")]

https://t.me/cherkashindev/127

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Dotnet Текст Тестирование Csharp
0
24
cherkalexander
cherkalexander
1 год назад
Лига программистов

Сборщик мусора в .NET⁠⁠

Сборщик мусора в .NET Кросспостинг, Pikabu Publish Bot, Csharp, Dotnet, Interview, Текст, Длиннопост

Одним из самых популярных на собеседованиях C# разработчиков является вопрос о работе сборщика мусора в .NET. Мне также приходилось рассказывать о нём интервьюерам на моих собесах. Сегодня я хотел бы кратко рассказать о сборщике мусора, заодно и сам вспомню.

🔍 Зачем нужен сборщик мусора?
Сборщик мусора автоматически обеспечивает освобождение памяти, занятой объектами, которые больше не используются. Такой подход предотвращает утечки памяти и снимает с разработчика бремя ручного освобождения памяти (привет С++), что позволяет сосредотачиваться на более важных аспектах программирования.

⏰ Когда вызывается сборщик мусора?
Сборщик мусора активируется автоматически, например, когда одно из поколений заполнено (о поколениях позже). Если вам требуется инициировать сборку мусора вручную, используйте GC.Collect().

🔗 Как определяется, какие объекты больше не используются?
Сборщик мусора опирается на концепцию "GC Roots" (корни сборки мусора):

1. Локальные переменные: Объекты, на которые существуют ссылки в локальных переменных.
2. Статические переменные: Объекты, на которые ссылаются статические переменные классов. Эти корни живут в течение всего времени выполнения приложения.
3. Активные элементы стека: Если во время выполнения функции происходит сборка мусора, то локальная переменная внутри данной функции не будет удалена сборщиком мусора. Такая переменная считается активным корнем, до тех пор пока кадр стека метода не будет разрушен.

Сборщик мусора создаёт граф (фаза маркировки), который содержит все объекты, достижимые из GC Roots. Объекты, на которые нет ссылок из GC Roots, считаются недостижимыми и готовыми для удаления.

🔄 Как работает сборщик мусора?
Сборщик мусора использует концепцию поколений (поколения 0, 1 и 2) для эффективной работы с объектами различной "старости".

- При создании объекты помещаются в поколение 0. Если объект слишком большой (по умолчанию объекты размером больше 85 000 байт), то он будет помещён в Large Object Heap (очищается вместе с поколением 2).
- Когда поколение 0 заполнено — запускается сборка мусора. Неиспользуемые объекты удаляются (недостижимые из GC Roots), оставшиеся перемещаются в поколение 1.
- Аналогично происходит сборка мусора, когда заполнено поколение 1. Все выжившие объекты перемещаются в поколение 2. Затем происходит сборка мусора в поколении 0.
- Когда заполнено поколение 2, происходит полная сборка мусора. Сперва очищается поколение 2, а затем 1 и 0. Если после этого недостаточно места для новых объектов — происходит исключение OutOfMemory.
- В самом конце происходит фаза сжатия, в которой сборщик мусора перемещает живые объекты так, чтобы они располагались в памяти непосредственно друг за другом.

🔄 Для чего нужно разделение на несколько поколений?
- Сборка мусора поколения 0 выполняется чаще и занимается удалением объектов, которые быстро выходят из области видимости.
- С увеличением поколения редкость запуска сборки позволяет более эффективно использовать ресурсы. Поколение 0 очищается чаще всего, поколение 2 очищается реже всего.

🌐 Ещё по теме:
- .NET Memory Management Concepts — очень кратко об основных концепциях сборщика мусора
- Поколения объектов — одна из очень подробного цикла статей о сборщике мусора

https://t.me/cherkashindev/117

Показать полностью 1
[моё] Кросспостинг Pikabu Publish Bot Csharp Dotnet Interview Текст Длиннопост
0
29
ruitunion
ruitunion
2 года назад
Лига программистов
Серия Технические статьи

Создание CLI-приложений при помощи System.CommandLine в .NET⁠⁠

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

В .NET уже несколько лет существует библиотека System.CommandLine, позволяющая быстро создавать CLI-приложения. Несмотря на то, что библиотека ещё в стадии beta, её активно используют и сами разработчики Microsoft, например, в утилите dotnet из пакета .NET SDK.

Преимущества этой библиотеки в том, что она позволяет сосредоточиться на разработке полезного функционала приложения и не тратить время на создание парсера команд, опций и аргументов, а также имеет широкие возможности для кастомизации.

Реализация простого CLI-приложения

Библиотека поддерживает следующие виды токенов:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Опции и аргументы определяются совместно через обобщённый тип Option<T>:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Полностью исходный код можно найти в нашем GitLab-репозитории.

Subcommand и command отличаются тем, что subcommand определяет группу команд, а command определяет непосредственно действие, выполняемое командой.

Определим для начала команду sum:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Разделение на команды и группы команд очень условное, т.к. с точки зрения C# оба вида определяются через класс Command. Также нам ничто не мешает определить действие и для группы команд:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Помимо примитивных типов, библиотека также поддерживает массивы, списки, FileInfo, DirectoryInfo и другие. Полный список можно узнать, заглянув в документацию. Если есть необходимость привязать опции к кастомному типу, то можно воспользоваться встроенным механизмом привязки через тип BinderBase<T>. Определим операцию вычитания, используя этот способ:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Тогда определение хендлера для команды вычитания будет выглядеть следующим образом:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Осталось определить Root command через одноимённый класс RootCommand :

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Теперь можно собрать приложение и проверить работу:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Внедрение зависимостей

Жизненный цикл CLI-приложения выглядит следующим образом:

  1. Вызывается некоторая команда.

  2. Запускается процесс.

  3. Происходит обработка данных, возвращается результат.

  4. Процесс завершается.

Классические контейнеры зависимостей не рекомендуется использовать, поскольку зависимости одной команды могут быть совершенно не нужны для другой команды, а инициализация всех зависимостей может увеличить время запуска CLI-приложения. Вместо этого можно воспользоваться механизмом внедрения зависимостей для конкретного обработчика. Для этого снова понадобится класс BinderBase<T>. Определим новый класс ResultWriter, который будет записывать результат математической операции в файл:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Теперь создадим класс ResultWriterBinder. Этот класс инкапсулирует экземпляр ResultWriter:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

=> _resultWriter;

Теперь определим операцию умножения и внедрим туда экземпляр ResultWriter:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Такой подход позволяет внедрять зависимости в обработчики команд независимо друг от друга.

Кастомизация вывода

Справка генерируется автоматически из описаний, которые использовались при инициализации опций и команд. Например, команда cli-app math sum -h отобразит следующее:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

При желании можно заменить любой раздел справки, например, Description или создать новый. Добавим новую строку с текстом «This is a new section» в начало справки:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Тогда вывод станет следующим:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Если требуется улучшить внешний вид вывода данных в целом, то сделать это можно, например, написав кастомный способ отображения при помощи методов и свойств класса Console, таких как SetCursorPosition, ForegroundColor, BackgroundColor и т.д. Либо воспользоваться 3rd-party библиотеками:

1. ShellProgressBar. Простая библиотека для отображения прогресса в командном окне.

2. Spectre.Console. Мощная библиотека для создания красивых консольных приложений, которая имеет множество компонентов, упрощающих создание интерфейса. Кстати, обложка для статьи была сделана с помощью этой библиотеки.

3. ConsoleGUI. Позволяет создавать полноценный GUI на основе консоли. Судя по всему, автор вдохновлялся WPF, так как в ней содержатся привычные для этого фреймворка компоненты: TextBox, CheckBox, DataGrid, DockPanel и другие.

Заключение

Библиотека System.CommandLine является полезным инструментом для создания CLI-приложений. Она даёт разработчикам гибкий инструментарий для работы командами и опциями, что позволяет сократить время разработки и создать удобный и функциональный пользовательский интерфейс.

Показать полностью 14
[моё] Гайд IT Dotnet Программирование Гифка Длиннопост
0
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии