Обновить
127.68

C# *

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

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

Разработка менеджера тем в UWP-приложении

Время на прочтение13 мин
Количество просмотров5.5K
Приветствую, %username%!

Меня зовут Роман Гладких, я студент третьего курса Сибирского Государственного Университета Телекоммуникаций и Информатики по профилю Супервычисления. Так же являюсь студентом-партнером Майкрософт. Мое давнее хобби – это разработка приложений для Windows Phone и UWP на языке C#.

По умолчанию приложения UWP поддерживают две темы: темную (Dark) и светлую (Light). Так же имеется еще высококонтрастная тема (HighContrast). Такого набора обычно хватает для любого приложения, однако, что делать, если требуется быстро менять тему приложения на лету, причем ограничиваться Light и Dark нет желания?

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

Создание расписания для SCADA системы на основе cron

Время на прочтение5 мин
Количество просмотров5.2K
В продолжение о SCADA системе моего «любимого» торгового центра

Я думаю не мало инженеров в АСУТП сталкивались с требованием заставить «что-то» работать по расписанию. Покажу как реализовал сделал расписание в составе сервера SCADA.
Читать дальше →

Создание простого аудиоредактора

Время на прочтение13 мин
Количество просмотров7.2K
Предлагаем вниманию читателей продолжение статьи от наших партнеров, Music Paradise. В прошлый раз команда представила туториал по извлечению аудиоданных из wav-файлов; сегодня речь пойдет о том, как использовать этот функционал в более широком контексте — при разработке полноценного аудиоредактора со стандартным набором функций.


«В предыдущей статье мы рассмотрели процесс извлечения аудиоданных и даже смогли построить график на их основе. Однако никаких изменений в аудиоданные мы не вносили и, соответственно, необходимости сохранять аудиофайл не возникало. Мы лишь отметили, что процесс сохранения обратен чтению. Поэтому, чтобы не быть голословными, мы решили подкрепить слова делом и рассмотреть полный цикл работы с аудиофайлом. Целесообразность этого начинания подтверждается многочисленными вопросами на эту тему на просторах сети Интернет, причем большинство из них так и остается открытыми.
Читать дальше →

Однолинейные схемы в Revit

Время на прочтение3 мин
Количество просмотров21K
image
Revit — программный комплекс, реализующий принцип информационного моделирования зданий. Изначально программа предназначалась для архитекторов. Теперь все больше компаний при устройстве на работу требуют от инженеров умения работы в Revit. Autodesk Revit предоставляет мощный .NET API, позволяющий разрабатывать собственные приложения для решения различных задач. В данной статье хочу поделиться опытом создания однолинейных схем в Revit.

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

Получаем информацию о рабочем месте пользователя

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

image


0. Предисловие


Все началось с очередного звонка пользователя, который с гордостью сообщил сообщил: — „Всё сломалось“, и с моих „потуг“ удаленно найти PC, на котором работает данный пользователь..


Решение планировало быть простым до безумия и собираться на коленке. Так-как большинство наших сотрудников работают под "виндой" и все рабочие станции входят в домен, был задан вектор поиска решения. Изначально, планировалось написать небольшой скрипт. В его задачу входило собрать базовую информацию о системе и сотруднике, который за этой системой работает. Набор информации минимальный. А именно: логин, название рабочей станции и ее ip. Результат работы сохраняем на сервере, а сам скрипт "вешаем" на пользователя через GPO.


В такой реализации были существенные недостатки в виде:


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

После раздумий пришло решение: использовать бота в Telegram. Прибегнув к небольшой ловкости рук, скрипт был переписан в небольшую программку для отправки информации в чат, за место "скучной" записи в файл на сервере. (+ были добавлены еще некоторые параметры которые оправлялись боту)

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

Mahou обновился до версии 2.0

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


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


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

.Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед

Время на прочтение12 мин
Количество просмотров8.2K
Как известно, в .Net Core, на данный момент, нет AppDomain, а WCF только SOAP клиент .Net Core, WCF и ODATA клиенты.

Конечно, задачу можно решить и через Web Api с WebSockets для вызова событий. Но, я просто предлагаю альтернативное решение на маршалинге по TCP/IP и создание объектов, и вызов методов на стороне сервера с помощью Reflection.

Вот как выглядит удаленный вызов методов и свойств. Пример взят отсюда Основы перегрузки операторов:

   // Выведем сообщение в консоли сервера
   string typeStr = typeof(Console).AssemblyQualifiedName;
   var _Console = wrap.GetType(typeStr);// Получим тип на сервере по имени
   // "Hello from Client" будет выведено в консоле сервера
    _Console.WriteLine("Hello from Client");

   // получим тип по имени класса TestDllForCoreClr.MyArr
   // Из сборки TestDll.dll
   var MyArr = wrap.GetType("TestDllForCoreClr.MyArr", "TestDll");

   // Создадим объекты на стороне сервера
   // и получим ссылки на них
   var Point1 = MyArr._new(1, 12, -4); // new MyArr(1, 12, -4);
   var Point2 = MyArr._new(0, -3, 18); // new MyArr(0, -3, 18);

   // Все операции с объектами PointX происходят на стороне сервера
   Console.WriteLine("Координаты первой точки: "+Point1.x+" "+Point1.y+" "+Point1.z);
   Console.WriteLine("Координаты второй точки: "+Point2.x+" "+Point2.y + " "+ Point2.z);

   var Point3 = Point1 + Point2;
   Console.WriteLine("\nPoint1 + Point2 = " + Point3.x + " " + Point3.y + " " + Point3.z);
   Point3 = Point1 - Point2;
   Console.WriteLine("Point1 - Point2 = "+ Point3.x + " " + Point3.y + " " + Point3.z);
   Point3 = -Point1;
   Console.WriteLine("-Point1 = " + Point3.x + " " + Point3.y + " " + Point3.z);
   Point2++;
   Console.WriteLine("Point2++ = "+ Point2.x + " " + Point2.y + " " + Point2.z);
   Point2--;
   Console.WriteLine("Point2-- = " + Point2.x + " " + Point2.y + " " + Point2.z);
Читать дальше →

EventAggregator — антипаттерн

Время на прочтение6 мин
Количество просмотров18K
Перед прочтением необходимо почитать о шаблоне EventAggregator. EventAggregator обеспечивает взаимодействие компонент и сервисов составного приложения, через слабую связанность.

EventAggregator можно найти во многих WPF-каркасах: Mvvm Light -класс Messenger, Catel – класс MessageMediator. Я познакомился с EventAggregator вместе с WPF каркасом Prism. Использование EventAggregator оказалось простым и гибким. Компоненты системы становятся независимыми друг от друга – изменяя один компонент, я не боюсь сломать другой.

При рассмотрении отдельных компонент все так и есть, но поднявшись на уровень работы компонентов в системе, можно разглядеть серьёзные проблемы:


Делюсь моим взглядом на слишком слабую связанность и не явное взаимодействие между частями системы.
Читать дальше →

Лень, рефлексия, атрибуты, динамические сборки

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

Небольшой опыт, полученный благодаря лени


Года три назад, работал я на одну фирму. Было нас 4 программиста. Один писал бизнес логику приложения. Описывал он ее с помощью интерфейсов (interface). Логические связи, зависимости и т. д. Наша же задача была реализовать эти интерфейсы и связать с GUI. Основной проблемой в этой системе были постоянные изменения структуры связей и параметров. То есть нам приходилось постоянно заниматься правкой и рефакторингом.

Я человек достаточно ленивый. Поэтому пришла мысль — неужели нельзя, как нибудь это автоматизировать. И я сел за книжки.

Шаг первый

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

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

TextBlock с подсветкой текста (WPF)

Время на прочтение13 мин
Количество просмотров13K
Привет Хабр! Я создал контрол на основе TextBlock с возможностью подсветки текста. Для начала приведу пример его использования, затем опишу, как он создавался.

Пример использования контрола
<local:HighlightTextBlock TextWrapping="Wrap">
    <local:HighlightTextBlock.HighlightRules>
        <local:HighlightRule HightlightedText="{Binding Filter, Source={x:Reference thisWindow}}">
            <local:HighlightRule.Highlights>
                <local:HighlightBackgroung Brush="Yellow"/>
                <local:HighlightForeground Brush="Black"/>
            </local:HighlightRule.Highlights>
        </local:HighlightRule>
    </local:HighlightTextBlock.HighlightRules>
    <Run FontWeight="Bold">Property:</Run>
    <Run Text="{Binding Property}"/>
</local:HighlightTextBlock>


Начало разработки


Потребовалось мне подсветить текст в TextBlock, введенный в строку поиска. На первый взгляд задача показалась простой. Пришло в голову разделить текст на 3 элемента Run, которые бы передавали в конвертер весь текст, строку поиска и свое положение (1/2/3). Средний Run имеет Backgroung.

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

Была еще мысль формировать Xaml «на лету», парсить его при помощи XamlReader и кидать в TextBlock. Но эта мысль тоже сразу отвалилась, потому что попахивает.

Следующей (и окончательной) идеей стало создать систему правил подсветки и прикрутить ее к TextBlock. Тут 2 варианта: свой контрол с блэкджеком и девочками на основе TextBlock или AttachedProperty. После недолгих раздумий, я решил, что все таки лучше создать отдельный контрол, потому что функционал подсветки может наложить некоторые ограничения на функциональность самого TextBlock, а разруливать это проще, если от него унаследоваться.
Читать дальше →

Майкл Фезерс на uDev Tech Events: «Micro Refactoring and Macro Refactoring: Strategies and Techniques»

Время на прочтение1 мин
Количество просмотров3.2K
25 октября 2016 года Майкл Фезерс, Director of R7K Research & Conveyance и автор книги «Working Effectively with Legacy Code», выступит на uDev Tech Events с лекцией на тему «Micro Refactoring and Macro Refactoring: Strategies and Techniques».


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

Асинхронное программирование в 1С через .Net Native ВК

Время на прочтение5 мин
Количество просмотров10K
Это продолжение статьи Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II

В .Net сейчас во многих классах есть асинхронные методы. В 1С их можно применять например так

Стр=ъ(Клиент.GetStringAsync(uriSources)).Result;

И напомню про синонимы из предыдущей статьи/ Так добавив синоним

Врап.ДобавитьСиноним(HTTPClient.ПолучитьСсылку(),"ПолучитьСтроку","GetStringAsync");
Врап.ДобавитьСиноним(Task.ПолучитьСсылку(),"Результат","Result");

Я могу использовать все на русском

Стр=ъ(Клиент.ПолучитьСтроку(адрес)).Результат;

Но можно использовать асинхронные методы так.


        Клиент = ъ(Врап.Новый(HttpClient.ПолучитьСсылку(),handler.ПолучитьСсылку()));
	
	лист=ъНовый("System.Collections.Generic.List`1[System.Threading.Tasks.Task]");
	Для каждого стр из ПолучитьСписокURL() Цикл
		Задача=ъ(Клиент.GetStringAsync(стр));
		лист.Add(задача.ПолучитьСсылку()); 
	КонецЦикла;
	
	Task=ъТип("System.Threading.Tasks.Task");
	
	Пока лист.Count>0 Цикл
		массив=ъ(лист.ToArray());	
		индекс = Task.WaitAny(массив.ПолучитьСсылку());
		Сообщить(индекс);
		результат = ъ(лист.get_Item(индекс)).Result;
		Сообщить(СтрДлина(результат));
		лист.RemoveAt(индекс);
	КонецЦикла;

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

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

Проектирование идентичных форм в WPF с применением абстрактных классов

Время на прочтение13 мин
Количество просмотров8.5K
Недавно столкнулся с весьма интересной задачей, которая довольно-таки часто может встречаться при проектировании пользовательских интерфейсов. Вопрос, конечно, сравнительно тривиальный, однако полноценной и развёрнутой информации по нему я не нашёл, потому решил поделиться собственным опытом. Статья может оказаться полезной для Junior-разработчиков, а также людей, только начинающих изучать ООП и не имеющих серьёзного практического опыта в программировании.
Читать дальше →

Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux

Время на прочтение13 мин
Количество просмотров8.2K
Будучи программистом 1С, мне часто приходится использовать классы .Net через различные прослойки.

Использование сборок .Net через обертку реализующую IReflect
Для подключения .NET сборок используется «CLR Hosting API»
1C.Net: Предприятие – пример коммерческого успеха .Net-решений в России
Как вызвать метод из C# в 1С?

Но все они используют в той или иной степени COM. С появлением .Net Core стало возможным использование сборок .Net и на любой оси отличной от Windows.

На просторах интернета было найдено решение: Hosting .NET Core Clr in your own process и simpleCoreCLRHost и
initializeCoreCLR createDelegate и
unixinterface

Суть подключения заключается в загрузке библиотеки coreclr.dll, получения нужных интерфейсов и запуск CLR Runtime Host.
Читать дальше →

Перепиливаем JDBC DB2 под .NET

Время на прочтение7 мин
Количество просмотров4.5K
В очень странное время мы живем .NET становится кроссплатформенным, JAVA становится слаще. Но пока мы вместе движемся в общее светлое будущее есть много унаследованных решений которые необходимо поддерживать. И пока это удается с помощью лобзика и напильника…
Читать дальше →

Альтернативный Sound Manager для мелких и средних проектов на Unity3D

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

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

NW+Edge.js+Fiddler или сказ о стыкуемости нестыкуемого

Время на прочтение4 мин
Количество просмотров4.9K
Привет всем.
Не так давно прочел статью Что нам стоит сайт распарсить. Основы webdriver API и вспомнил, что давно собирался довести хотя бы до относительно рабочего состояния одну забавную задумку. Руки все-таки дошли, а значит пора поведать, что же получилось.
Есть такая замечательная программа — Fiddler, позволяющая перехватывать и модифицировать http/https запросы. Есть замечательная штука под названием NW.js, она же node-webkit, позволяющая тыр… парсить разнообразные сайты в том числе. Вы красивы, я прекрасен — почему бы нам не подружиться?
Собственно, затея вот в чем: можно было бы, конечно, отдельно поднять Fiddler, написать в нем логику и гонять через него трафик с node-webkit-но это не так интересно. А значит, будем совмещать все под одной крышей, благо у Fiddler есть библиотека на C# — FiddlerCore.
Под ноду есть отличный модуль — Edge.js. Это такая хитрая штука, которая позволяет исполнять код C# (и не только). Есть под ноду? Замечательно, можно завести и под nw.js, благо даже мануал есть — да вот же он!

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

Пишем Лабиринт на XNA 4.0 C#

Время на прочтение6 мин
Количество просмотров15K
image
Сегодня я поделюсь своей наработкой игры «Maze». В этой игре реализован алгоритм DFS. На днях мне поручили сделать курсовую работу по Алгоритмам, а именно по DFS в лабиринтах. Отказываться было нельзя. Пришел домой, выпил чашечку крепкого кофе и начал творить.
Читать дальше →

Нужна ли нормализация в числах с плавающей точкой?

Время на прочтение4 мин
Количество просмотров16K
В прошлом топике (1 ) мы говорили о числах с плавающей точкой/запятой, нормализованных в соответствии со стандартом IEEE754. Там же были рассмотрены денормализованные числа, искусственное введение которых в стандарте привело к чудовищным программно-аппаратным затратам, тормозящим процессы компьютерной обработки чисел в десятки и сотни раз. Но, так уж ли нужна эта самая нормализация и тем более оправдано ли введение экзотического класса денормализованных чисел в компьютерную арифметику? Попробуем разобраться с этим вопросом.
Читать дальше →

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