Category Archives: Linux

Михаил Семёнович Казиник

Интернет — это помойка.

Это мега-маркет. Это мега-винегрет, где каждый находит то, что хочет. И вроде бы хорошо — ведь каждый получает то, что ему нужно. Но одновременно, надо отметить, что из-за чрезвычайного переизбытка информации и отсутствия какой-либо цензуры бывает очень не просто найти полезную информацию. И это особенно актуально, когда не знаешь ЧТО именно искать, по каким словам — «пойди туда — не знаю куда, найди то — не знаю что!»

А поскольку «За жемчугом нырять надо. Само приплывает только дерьмо.» (Да. Вот, ещё бы кто объяснил — что такое ЖЕМЧУГ и как он выглядит.) То, понятное дело, ЖЕМЧУГ цениться значительно выше, чем всем известная субстанция.

О чём это я?

Недавно, я для себя открыл имя, которое вынес в заголовок этой публикации.

Читать далее

Генератор файловых шаблонов для питоновских модулей

Эта тема старая, я уже обращался к ней в 2015-ом (Автоматизируй это). Более того, эта тема не для всех.
Тема интересна только пользователям Линукса. Причём, только тем, кто пишет программы на Python. Причём, только тем, кто не использует IDE, а пользуется простыми текстовыми редакторами типа nano, mcedit, gedit, pluma, …

С 2015-го прошло почти пять лет. Мир немного изменился. Ушёл (или почти ушёл) Python v.2. Отпала необходимость указывать кодировку в начале файла (coding=utf-8). Ну и я тоже немного продвинулся в понимании чего я хочу от утилиты mkpy.

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

Под катом исходный текст утилиты и скрипт для установки утилиты в систему.

Читать далее

Перечисления в Python

Эта публикация является как бы продолжением этой Константы в Python.

В той статье мы говори о простых («одиночных») константах. Но в жизни часто бывает, когда нужно работать с «групповыми» константами. (Я взял слова «одиночные» и «групповые» в кавычки только потому, что, мне кажется, что я нигде более не встречал квалификации констант по такому типу. В общем, это моё определение.)

Читать далее

Питоновские затяжки

Суть вопроса — нужно в питоновскую программу «затянуть» информацию, которую выводит в консоль другая программа или команда операционной системы.

Ну, вот встала, например, такая задача — нужно получить данные по расходу оперативной памяти. Как вариант, конечно, можно проинсталлировать пакет psutil:

$ pip3 install psutil

Но ведь не всегда бывает возможность это проделать на чужой машине в отсутствие сисадмина.

(У меня как раз возникла именно такая ситуация. На самом деле, мне нужно получить ещё больше информации о системе, а не только расход памяти. Указание опции —user в приведённой выше команде установки, для того чтобы пакет встал под пользователем, не помогает. Админ улетел за границу, и будет только через несколько дней. Ждать нельзя, нужно уже завтра-послезавтра иметь решение проблемы.)

Читать далее

Потерял бдительность

Сидел, починял примус, ни кого не трогал…

И вдруг н-н-на тебе, разработчик, — поразвлекайся! И ни в чём себе не отказывай!

Что было? Да как обычно. Обычная работа. Второй день сижу, пилю новый проект. Уже есть кое-какие наработки, которые не хотелось бы терять. Значит пора создавать git-репозиторий.

В общем, создал репозиторий на gitlab-е. Создал локальную рабочую «репу». Сделал начальный коммит.

Всё ОК.

Читать далее

Живее всех живых

Это не про Владимира Ильича (в смысле — про Ленина). В далёкие годы был такой мем про вождя мирового пролетариата.

Живее всех живых — это про последовательный порт. Разумеется, это сказано в контексте работы с микроконтроллерами.

Не смотря на присутствие в обиходе множества самых разных интерфейсов для передачи данных на все случаи жизни, древний как… не важно!… последовательный порт ещё ого-го какой востребованный!

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

Вот, так выглядит результат работы:

Вроде всё хорошо, но температура измеряется с десятыми-сотыми долями градуса и, следовательно, должна также и отображаться. То есть целое число не совсем подходит. Переходить на «плавучку» (числа с плавающей точкой) очень не хотелось. Но решение даже искать не пришлось.

Читать далее

Git. Создание репозитория на другом компе

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

Использование бесплатных внешних репозитоиев git, таких как bitbucket, gitlab, github и других, — это весьма полезно, а иногда это единственная возможность для совместной работы над одним проектом нескольких разработчиков. Внешние репозитории так же хорошо подходят для одного разработчика-одиночки, который трудится над своими проектами из разных мест, например, из дома, с компа на территории заказчика, с рабочего комп и так далее.

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

В таком случае разработчику будет удобно один комп использовать как «рабочую лошадку», а на одном — организовать репозиторий для проектов. Поскольку данные будут находится на двух физически разных дисках, то вероятность потерять сразу всё уменьшается существенно. А с другой стороны, сохраняется коммерческая тайна — проекты не утекают куда-то в облако.

Далее я кратко опишу процесс создания такого репозитория и покажу как настроить git для работы с ним. Описание процесса будет происходить в ключе «делай как я». Вам остаётся только подставить в приведённые здесь команды вместо наименований моих проектов и компов свои наименования.

Читать далее

OPC UA. Подписка на события

Получать данные от сервера по запросу клиента, конечно, хорошо, но…

Но бывают ситуации, когда данные меняются очень редко, а реагировать на их изменение нужно достаточно быстро. Ну, например, у нас есть какое-то устройство (сервер), который следит за напряжением «в розетке». Пока напряжение находится в норме (допустим, это 220 В ±10%, что составляет от 198 до 242 В), то на стороне клиента всё должно работать как обычно. Если напряжение выходит за допустимые пределы, то клиент должен предпринять определённые действия. Например, запустить дизель или включить аварийное освещение.

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

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

Существует ещё один способ — подписка на события. Клиенты, кому это действительно надо, подписываются у серверов на интересующие их (клиентов) события. Таким образом, у серверов появляются таблицы рассылок. И при наступлении того или иного события сервер оповещает о нём всех тех (клиентов), кто подписался на это событие. Поскольку предполагается, что события случаются не часто, то линии связи будут загружены минимально, а клиенты и серверы будут отвлекаться от своих основных работ только по мере возникновения событий.

Читать далее

OPC UA: туда и обратно

Благодаря предыдущей статье мы научились получать от сервера данные. Хорошо. Теперь давайте попробуем передавать данные на сервер.

Поскольку сервер у нас (условно) является вольтметром, то пусть он теперь будет заниматься сразу двумя напряжениями. Одно напряжение V1 сервер будет «измерять» внутри себя, а другое V2 — получать от клиента.

Читать далее

А не пощупать ли нам OPC UA на практике?

— Хм? Отчего ж достопочтенным джентльменам нельзя пощупать. Давайте, господа гуссары, полапаем как следует!

Для этого дела воспользуемся Питоном, ибо он прост в применении. Будем юзать Python-3.

Для начала нужно установить на комп кое-какие пакеты.

Читать далее