Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

Как электронные акты выполненных работ повышают эффективность. Лучшие практики для выездного сервиса (FSM)

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

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

Читать далее
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

10 лет практики. Часть 1: построение программы

Время на прочтение6 мин
Количество просмотров22K
Десять лет я пишу на С++. Первые пять лет моей задачей было писать эффективный код для компьютерных игр, потом основным требованием была стабильность, так как речь шла об автоматизации промышленных объектов. Я бы хотел поделиться своим личным опытом и практическими наработками, которые помогут создавать эффективные и в то же время стабильно работающие программы.
image

Материал разбит на части, от самых общих практических правил, интересных начинающим, до конкретных вопросов, актуальных опытным программистам.
В первой части я на практике дам свой ответ на самые базовые вопросы. Как вообще писать программу, в особенности — сложную программу? Что следует сделать в самом начале, чтобы потом не переделывать с нуля? Как создать оптимальную структуру программы?
Читать дальше →
Всего голосов 152: ↑125 и ↓27+98
Комментарии195

A* pathfinding на C#: двоичные кучи и борьба с аллокациями

Время на прочтение20 мин
Количество просмотров15K
Сегодня мы разбираем один из популярнейших алгоритмов поиска пути. Работать будем с двумерным массивом целочисленных координат.

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

Я был изумлен, когда поверхностный поиск не выдал мне ни одной качественной реализации алгоритма A* на C# без использования сторонних библиотек (это не значит, что их нет). А значит самое время размять пальцы!

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

Приступим!
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии15

Функциональная безопасность – старшая сестра информационной безопасности, Часть 1 из 7

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

Безопасности на хабре посвящен целый хаб, и, пожалуй, никто особенно не задумывается, что именно вкладывается в понятие «безопасность», и так все ясно: информационная безопасность (security). Однако, есть еще и другая сторона безопасности, safety, связанная с рисками для здоровья и жизни людей, а также окружающей среды. Поскольку информационные технологии сами по себе опасности не представляют, то обычно говорят о функциональной составляющей, то есть о безопасности, связанной с правильным функционированием компьютерной системы. Если информационная безопасность стала критична с появлением интернета, то функциональная безопасность рассматривалась и до появления цифрового управления, ведь аварии происходили всегда.

Данная статья начинает серию публикаций на тему функциональной безопасности.

Информационной безопасности АСУ ТП посвящено немало статей на хабре. Функциональной безопасности авторы тоже касались, как в хабе по SCADA, так и в хабе по промышленному программированию АСУ ТП, но, как мне показалось, несколько вскользь. Поэтому я предлагаю короткую информацию об этом важном свойстве, от которого напрямую зависит, получит ли SkyNET контроль над человечеством.
В статье сделаны некоторые обобщения для АСУ ТП, а также для встроенных и кибер-физических систем.
Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии4

Основы нейросетей в 100 строках кода (часть 1)

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

В трёх частях этой статьи мы:


  • Напишем нейросеть с нуля на Python и обучим её алгоритмом градиентного спуска.
  • Применим её к датасету The Wisconsin Cancer Data-set и предскажем по 9 различным признакам, является ли опухоль доброкачественной или злокачественной.
  • Подробнее исследуем, как работает градиентный спуск и метод обратного распространения ошибки.
  • Рассмотрим основы и изучим более сложные идеи. В части 1 мы разберёмся с архитектурой нашей нейросети, в части 2 напишем её на Python и глубже посмотрим на обратное распространение и градиентный спуск, а в части 3 применим её к The Wisconsin Cancer Data-set.


Всего голосов 7: ↑7 и ↓0+7
Комментарии8

Нейросеть — обучение без учителя. Метод Policy Gradient

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

Доброго времени суток, Хабр


Настоящей статьей открываю цикл статей о том, как обучать нейронные сети без учителя.
(Reinforcement Learning for Neuron Networks)

В цикле планирую сделать три статьи по теории и реализации в коде трех алгоритмов обучения нейронных сетей без учителя. Первая статья будет по Policy Gradient, вторая по Q-learning, третья статья заключительная будет по методу Actor-Critic.

Приятного чтения.

Статья Первая — Обучение без учителя методом Policy Gradient
(Policy Gradient for Reinforcement Learning)


Введение


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

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

Алгоритму обучающемуся без учителя достаточно только давать обратный отклик на его действия или решения — хороши они были или нет.
Читать дальше →
Всего голосов 9: ↑8 и ↓1+10
Комментарии17

.NET Core: Взаимодействие микросервисов через Web api

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

Введение


Практически все, кто имел дело с микросервисами в .NET Core, наверняка знают книгу Кристиана Хорсдала “Микросервисы на платформе .NET”. Здесь прекрасно описаны подходы к построению приложения на основе микросервисов, подробно рассмотрены вопросы мониторинга, журналирования, управления доступом. Единственное, чего не хватает — это инструмента автоматизации взаимодействия между микросервисами.

При обычном подходе при разработке микросервиса параллельно разрабатывается web-клиент для него. И каждый раз, когда меняется web-интерфейс микросервиса, приходится затрачивать дополнительные усилия для соответствующих изменений web-клиента. Идея генерировать пару web-api/web-клиент с использованием OpenApi тоже достаточно трудоемка, хотелось бы чего-то более прозрачного для разработчика.

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

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

Web-клиент для микросервиса должен генерироваться автоматически на основе интерфейса и предоставляться через Dependency Injection.

Должен быть механизм организации редиректов на конечные точки микросервисов из главного приложения, взаимодействующего с пользовательским интерфейсом.
Читать дальше →
Всего голосов 6: ↑4 и ↓2+2
Комментарии24

IOptions и его друзья

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров25K

Во время разработки часто возникает потребность для вынесения параметров в конфигурационные файлы. Да и вообще — хранить разные конфигурационный константы в коде является признаком дурного тона. Один из вариантов хранения настроек — использования конфигурационных файлов. .Net Core из коробки умеет работать с такими форматами как: json, ini, xml и другие. Так же есть возможность писать свои провайдеры конфигураций. (Кстати говоря за работу с конфигурациями отвечает сервис IConfiguration и IConfigurationProvider — для доступа к конфигурациям определенного формата и для написания своих провайдеров)


image


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

Читать дальше →
Всего голосов 11: ↑9 и ↓2+14
Комментарии19

Управление шаговыми двигателями с помощью Simatic S7-1200 с ограниченным количеством импульсных выходов

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

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

Раннее было принято решение построить систему автоматизации на базе одноплатного микрокомпьютера Orange pi plus 2e и микроконтроллера Arduino Nano. Для этих плат нашлось применения для другого подобного проекта, но это уже другая история. Но в последствии, после обсуждений всех преимуществ и недостатков остановились на PLC CPU 1214C DC/DC/DC с каталожным номером 6ES7 214-1AG40-0XB0 у которого на борту можно сконфигурировать до четырех импульсных выводов управления и модуль дискретных выходов SM 1222 DQ16 x 24VDC с каталожным номером 6ES7 222-1BH32-0XB0. Шаговые двигатели были выбраны из серии KRS56, управляемые драйверами TB6560 V2.


Читать дальше →
Всего голосов 2: ↑2 и ↓0+2
Комментарии11

Введение в теорию автоматического управления. Основные понятия теории управления техническим системами

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

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


Лекции по курсу «Управление Техническими Системами», читает Козлов Олег Степанович на кафедре «Ядерные реакторы и энергетические установки», факультета «Энергомашиностроения» МГТУ им. Н.Э. Баумана. За что ему огромная благодарность.


Данные лекции только готовятся к публикации в виде книги, а поскольку здесь есть специалисты по ТАУ, студенты и просто интересующиеся предметом, то любая критика привествуется.


Читать дальше →
Всего голосов 25: ↑23 и ↓2+33
Комментарии116

Окончательно разбираемся со скоростью передачи по Modbus

Время на прочтение3 мин
Количество просмотров24K
Скорость обновления данных по Modbus зависит от нескольких неочевидных параметров. На стадии проектирования возникает проблема, как оценить скорость будущей интерфейсной линии. В этой статье рассмотрим факторы, влияющие на скорость обновления данных по Modbus RTU, сделаем несколько типовых расчётов, а в конце статьи будет ссылка на web калькулятор скорости работы Modbus RTU линии.

Читать дальше →
Всего голосов 1: ↑1 и ↓0+1
Комментарии18

Как научиться разработке на Python: новый видеокурс Яндекса

Время на прочтение6 мин
Количество просмотров247K
Осенью прошлого года в московском офисе Яндекса прошла первая Школа бэкенд-разработки. Мы сняли занятия на видео и сегодня рады поделиться на Хабре полным видеокурсом Школы. Он позволит вам научиться промышленной разработке на Python. Авторы лекций — опытные разработчики в Яндексе. К каждому видео приложены ссылки на примеры и полезные материалы.

Для изучения курса нужно знать основы Python и понимать, как приложения развёртываются на серверах. Мы ждём, что вы умеете делать запросы к базам данных и знаете, как создаются веб‑приложения, — хотя бы на начальном уровне.
Читать дальше →
Всего голосов 70: ↑70 и ↓0+70
Комментарии41

Резистор в цепи затвора или как делать правильно

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


Всем доброго времени суток!

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

Любому из этих случаев я буду очень рад.
Читать дальше →
Всего голосов 51: ↑48 и ↓3+45
Комментарии70

Знакомство с XNA и написание первой музыкальной игры

Время на прочтение13 мин
Количество просмотров47K
Привет всем начинающим геймдевелоперам и просто хорошим людям. Сегодня, я хочу познакомить вас с замечательным фреймворком XNA (набор инструментов с управляемой средой времени выполнения dotNet). Программировать мы будем на C#.
Для того, чтобы познакомить вас с XNA ближе, я предлагаю написать простую «музыкальную» 2D игрушку. Остальное под катом.
Читать дальше →
Всего голосов 70: ↑60 и ↓10+50
Комментарии28

WPF Binding: Мощь стилей и шаблонов в WPF.

Время на прочтение9 мин
Количество просмотров38K
В WPF существует очень четкое разделение между поведением Control'а и тем, как он выглядит. К примеру, поведение объекта класса Button состоит в том, чтобы реагировать на различные события по клику, но его вид может быть любым — вы можете сделать кнопку в виде стрелки, рыбы, или чего-либо еще, что подходит для вашего приложения. Переопределение отображения Control'а очень просто сделать при использовании VS со стилями и шаблонами, и даже еще проще, если у вас есть Microsoft Expression Blend. В этом примере я покажу вам, как переопределить отображение ListBox'а, который используется для отображения списка планет.
Читать дальше →
Всего голосов 34: ↑28 и ↓6+22
Комментарии23

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность