Обновить
130.77

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Период
Уровень сложности

Бот нам поможет

Время на прочтение6 мин
Количество просмотров2.5K
image

Год назад наш любимый HR отдел обратился с просьбой: написать чат бота, который поможет в адаптации новичков в компании.

Оговоримся, что мы не разрабатываем собственных продуктов, но клиентам оказываем полный спектр услуг по разработке. Рассказ пойдет о нашем внутреннем проекте, для которого заказчиком является не сторонняя компания, а наш собственный HR. И главная задача при ограниченной доступности людей, ресурсов, времени выполнить проект в срок и выпустить продукт.
Читать дальше →

Универсально храним настройки приложения через IConfiguration

Время на прочтение7 мин
Количество просмотров5.7K
image

В рамках разработки продукта Docs Security Suit мы столкнулись с задачей хранения множества разнотипных настроек приложения как в БД, так и в конфигах. Да и еще так, чтобы их можно было удобно читать-писать. Здесь нам поможет интерфейс IConfiguration, тем более, что он универсальный и удобный для использования, что позволит хранить всевозможные настройки в одном месте
Читать дальше →

System.Console, Mono и NCurses

Время на прочтение2 мин
Количество просмотров5.2K
Всем привет, в своей работе (а ранее и в учебе) я часто использую C# и этот язык стал мне, что называется, привычным. Решив немного потренироваться в программировании, я написал консольный текстовый редактор для Linux. Вкратце опишу полученный опыт.

В Mono класс System.Console поддерживается не полностью, но Mono замечателен тем, что также как и в .NET можно использовать P/Invoke, для вызова методов нативных C/C++ Linux библиотек.

В моем случае это была библиотека ncurses. Выглядит это так:
Читать дальше →

Как просто подключить и начать печатать через портативный Bluetooth принтер EPS/POS в приложении Xamarin Android

Время на прочтение2 мин
Количество просмотров4.2K
С чего же мы начнём?

Добавим в проект Nuget пакет для работы с EPS/POS командами. Для этого откройте Package Manager Console и добавьте Zebra.Printer.SDK командой

Install-Package Zebra.Printer.SDK

По сути, не имеет значения какую модель принтера вы используете и кто производитель. Вам нужно убедиться в том, что принтер поддерживает работу с EPS/POS командами (их большинство). В этом случае библиотека сможет работать с ним без проблем.

Все дальнейшие действия описаны с предположением того, что вы зашли в настройки Android устройства и подключились к принтеру.

В первую очередь добавим разрешения в файл AndroidManifest.xml:

<manifest ....>
...
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
...
</manifest>
Читать дальше →

Облака слов из ВК на колене

Время на прочтение2 мин
Количество просмотров3.2K
Недавно мне резко захотелось узнать, как часто слово «кофе» встречается в паблике моей знакомой, а так же построить красивое облако слов, опираясь на частоту их появления в постах.
Если вас заинтересовало, как это сделать буквально на колене, используя C#, то прошу под кат.
Читать дальше →

Unity & Vive: Tutorial

Время на прочтение12 мин
Количество просмотров28K

Решил в отпуске изучить разработку под Vive в Unity3D. Погуглил парочку примеров и начал пробовать, но почему то не работало. Начав подробней разбираться и обнаружил, что Valve выкатили недавно обновление плагина для Unity3D — новая, сильно переделанная версия. В ней появилось парочка принципиальных новшеств, которые сделали старые tutorial'ы не актуальными. Решил написать новый


Открытый вебинар «Игра «2048»

Время на прочтение1 мин
Количество просмотров3.7K
Всем привет!

Мы открыли новый курс — «Разработчик игр на C#» (который, в целом, больше, чем только разработка игр), а создатель и преподаватель курс Евгений Волосатов уже провёл первый открытый урок. На нём он показал на примере создания игры «2048» весь жизненный цикл создания программы: планирование, создание модуля логики игры, интерфейса пользователя, подбор музыкальных эффектов, перенос игры на Android или iPhone.



Как всегда ждём вопросы и комментарии тут или их можно задать Евгению, зайдя на день открытых дверей.

Использование Reflection.Emit для предварительной компиляции выражений в MSIL

Время на прочтение6 мин
Количество просмотров9K
Привет, Хабр! Представляю вашему вниманию перевод статьи "Using Reflection.Emit to Precompile Expressions to MSIL" автора Steve Marsh.

Введение


Классы в этом проекте позволяют анализировать текстовые выражения, введенные пользователем, и компилировать их на сборку .NET. Эта сборка может выполняться «на лету» или сохраняться в DLL. Предварительная компиляция выражений позволяет обеспечить высокий уровень переносимости и позволяет очень эффективно оценивать введенную пользователем логику. Кроме того, мы можем использовать средство ildasm.exe от Microsoft для открытия и проверки создаваемого базового кода MSIL. Есть много интересных функций, которые поставляются с платформой .NET, на мой взгляд пространство имен Reflection.Emit предлагает куда больше, чем вы сможете найти. Пространство имен Reflection.Emit позволяет создавать собственный код .NET во время выполнения, динамически создавая типы .NET и вставляя инструкции MSIL в тело. MSIL — промежуточный язык Microsoft для платформы .NET. IL — это то, во что ваш код C # и VB.NET компилируется и отправляется в JIT-компилятор при запуске .NET-программ. MSIL — очень низкоуровневый язык, который очень быстрый, и работа с ним дает вам исключительный контроль над вашими программами. Я не буду вдаваться в подробности о MSIL в этой статье, но есть несколько других ресурсов, доступных в Интернете, и если вам интересно узнать побольше, я включил некоторые ссылки в конце этой статьи.
Читать дальше →

Заметки по соответствию требованиям платформ VR

Время на прочтение11 мин
Количество просмотров3.3K


В этой статье я бы хотел поделится с вами небольшими решениями которые, я применял в разработке развлекательного приложения для нескольких VR – платформ. Само приложение представляет из себя проигрыватель видео (360/4K, FullHD/2D, 2K/3-Screen, стриминг видеопотока, закачка в файл для offline-воспроизведения). Меню приложения выполнено в стилизированных 3D сценах под конкретный фильм. 3-Screen — это Barco Escape формат, где видео состоит из трех экранов.

Мне необходимо было разработать приложения для платформ:

  • Oculus Rift
  • Oculus/Samsung GearVR
  • Steam HTC Vive
  • Google Daydream
  • iOS Cardboard
  • Viveport HTC Vive
Читать дальше →

Работаем с долгими API в ASP.NET Core правильно или тонкости переезда на новую платформу

Время на прочтение9 мин
Количество просмотров20K
Microsoft очень постарался, создавая новую платформу для веб-разработки. Новый ASP.NET Core похож на старенький ASP.NET MVC только, быть может, самой MVC-архитектурой. Ушли сложности и привычные вещи из старой платформы, появился встроенный DI и легковесные view-компоненты, HTTP модули и хэндлеры уступили место middleware и т.д. Вкупе с кроссплатформенностью и хорошей производительностью всё это делает платформу очень привлекательной для выбора. В этой статье я расскажу, как мне удалось решить специфическую задачу логирования длительных запросов к сторонним API для повышения удобства анализа инцидентов.
Читать дальше →

В поисках быстрого локального хранилища

Время на прочтение7 мин
Количество просмотров25K
Текст этой статьи также доступен на английском.

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

Читать дальше →

Помощники на каждый день

Время на прочтение6 мин
Количество просмотров6.3K
Некоторые задачи встречаются при написании кода так часто, что инструменты для их решения должны быть особенно удобны. И если стандартные инструменты языка/платформы разработки кажутся неудовлетворительными, то программист пишет свои решения, которые, в силу частоты использования, становятся его любимыми велосипедами. Поэтому первое, что он делает при смене языка/платформы, это ищет местные аналоги своих решений, либо возможности их воспроизвести.

Представляю свою коллекцию помощников для решения рутинных задач, сложившуюся после миграции с C++ Builder на C#, WPF.
Читать дальше →

Удобное создание Composition Root с помощью Autofac

Время на прочтение8 мин
Количество просмотров11K

Проекты, разработкой и сопровождением которых я занимаюсь, довольно велики по объему. По этой причине в них активно используется паттерн Dependency Injection.


Важнейшей частью его реализации является Composition Root — точка сборки, обычно выполняемая по паттерну Register-Resolve-Release. Для хорошо читаемого, компактного и выразительного описания Composition Root обычно используется такой инструмент как DI-контейнер, при наличии выбора я предпочитаю использовать Autofac.


Несмотря на то, что данный контейнер заслуженно считается лидером по удобству, у разработчиков встречается немало вопросов и даже претензий. Для наиболее частых проблем из собственной практики я опишу способы, которые могут помочь смягчить или полностью убрать практически все трудности, связанные с использованием Autofac как инструмента конфигурации Composition Root.

Читать дальше →

Ближайшие события

Растянуть Canvas и элементы внутри него по всей клиентской области

Время на прочтение4 мин
Количество просмотров6K
Во время работы над нашим десктопным приложением столкнулся с такой задачей: имеется элемент-график с некоторыми настройками для отображения (реализован в виде ControlTemplate подключаемого через привязку в ContentControl), к имеющимся настройкам нужно было добавить группу дополнительных. Чтобы не засорять уже имеющийся интерфейс, я решил поместить список этих настроек в элемент Expander, который, при необходимости, можно было бы развернуть, а в остальное время график занимал бы максимально возможное полезное пространство.

Один из способов размещения элементов — под катом.
Подробности

История персонажа: менеджеры звука, рекламы и языка в Unity3D

Время на прочтение15 мин
Количество просмотров6.2K
Меня зовут Элай и я… червь.

Да-да, Вы не ослышались. Самый обычный кольчатый червь, который сейчас скачет по клавиатуре и переставляет грузики, чтобы Вы, мой дорогой читатель, могли насладиться знаками препинания и заглавными буквами. Однажды я издам книгу «Быстрая печать на клавиатуре для кольчатых червей и их зомби-половинок за 23 года». Возможно, до конца этой книги не доживет ни один червь, но должен же быть какой-то изъян в совершенно безукоризненной книге.

В любом случае, это уж точно будет раньше, чем Создатели самостоятельно разродятся написать статью обо мне и моих аппетитных внутренностях. А писать есть о чем!
Читать дальше →

Используем DataGrid в WPF

Время на прочтение4 мин
Количество просмотров121K
Не так давно мне потребовалось использовать таблицу в приложении на C#. По наивности я подумал, что буду использовать всё самое свежее и выбрал для проекта WPF вместо WinForm и, конечно, взял самый свежий .net framework 4.5. Тут-то и начались проблемы. Как всегда, я решил, что в Яндексе найдётся всё, но не тут то было — в интернете (вернее в РУнете) вообще ничего о DataGrid нет. Постоянно, как бы хитро не изменял запросы, я попадал на DataGridView из WinForm. Самое интересное в том, что платформа WPF полностью переработана и многое из того, что работало в WinForm в WPF не работает вообще никак.

Интересно также и то, что WPF должен быть как бы легче в использовании, ведь в Microsoft отделили дизайнеров от программистов, добавили векторную систему визуализации, язык XAML и прочее.

После продолжительного негодования я открыл большую и толстую книгу по WPF. И вот, чудо! Там было всё, как изменить размер, переименовать и перекрасить что угодно и как угодно, но о том, как элементарно достать запись из DataGrid не было и слова.

Отчаявшись, я решил было перейти на WinForm, но вспомнив старую добрую пословицу «если программа не работает, то проблема не в коде, а в программисте», решил разобраться в проблеме и (правда не помню на каком сайте) нашёл решение (это был сайт на английском языке в самых чёрных глубинах интернета). Название сайта вспомнил, ссылка в конце документа.
Читать дальше →

Генерация LINQ to SQL кода для SQLite в .NET (C#)

Время на прочтение3 мин
Количество просмотров17K
На C# я пишу редко, и в основном все наши приложения и сервисы подключаются к источнику данных, используя MSSQL сервер или службы баз данных. И вот настало время написать приложение, используя не сервер, а локальную БД. Немного погуглив, я внезапно выбрал SQLite.

Предисловие


У всех наших заказчиков были требования к коду:
  • установленное именование переменных;
  • группировка кода (конструкторы, переменные, методы, события...);
  • табы и форматирование (каралось смертной казнью);
  • за самописные SQL запросы разработчик удалялся из команды.

Исходя из вышеперечисленного, для баз данных конечно же были использованы классы LINQ to SQL, связанные с реляционными объектами.
Читать дальше →

AccountLogic 2.0: доведенная до ума, но не до окончания

Время на прочтение11 мин
Количество просмотров3.1K
Предысторию создания данного «продукта» можно проследить по постам на Хабре (последний, посвященный выпуску версии 1.0, находится здесь).

В версию 2.0 добавлены функции, позволяющие говорить о некотором, пускай не окончательном, приближении к потолку методологических возможностей.

На сегодняшний день «ЭкаунтоЛогика» (новое обрусевшее название «Учетная Логика») позволяет – по крайней мере, должна позволять согласно спецификации – достаточно многое.

Возможности Учетной Логики
√ Создавать и редактировать учетные объекты в соответствии с их вещной природой.
√ Отслеживать не только их прошлые, но и будущие изменения (обязательства) с точностью до секунды.
√ Оценивать учетные объекты по произвольному числу измерителей.
√ Интегрировать в объекты и действия готовые справочники.
√ Согласованно передавать объекты между пользовательскими базами.
√ Автоматически выполнять повторяющиеся действия.
√ Отслеживать материальные связи между объектами.
√ Привязывать файлы к отдельным объектам, действиям или папкам.
√ Вести плановые, параллельные основным, базы данных.
√ Составлять иерархические отчеты (отчетные папки), в том числе с учетом курсовых разниц и сравнительно с плановыми данными.
√ Просматривать данные в табличном режиме и в режиме иконок.


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

Читать дальше →

Урок 1.1 — Акторы и ActorSystem

Время на прочтение4 мин
Количество просмотров25K
image

И вот мы здесь! Добро пожаловать на первый урок.

В этом уроке вы создадите ваши первые акторы и будете введены в основы Akka.NET.

Основные понятия / предпосылки




В этом первом уроке вы узнаете основы создания консольного приложения с вашей первой системой акторов и простыми акторами внутри. Мы создадим два актора, один для чтения с консоли, и один для записи после некоторой простой обработки.
Читать дальше →

Optical Character Recognition силами .NET

Время на прочтение4 мин
Количество просмотров9.4K
Для примера я создал на популярной площадке, которая отображает номера в виде картинок, объявление.

Читать дальше →

Вклад авторов