Tag Archives: Python

Заготовка для интерактивной консольной проги

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

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

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

Читать далее

Кратко, по делу

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

К чему это я? А к тому, что —

«Главное правило, которому желательно следовать при использовании языка Python, — это простота и удобочитаемость программного кода, а проблему производительности следует рассматривать во вторую очередь, уже после того, как будет создана работоспособная программа и когда проблема производительности программы действительно заслуживает того, чтобы на неё обратили внимание.«

Марк Лутц

Мысли в слух. Так, чтоб не забывать.

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

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

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

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

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

Читать далее

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

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

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

Читать далее

Вычисление CRC для Modbus RTU

Ха! Вот, удивил!

Та, не-е! Совсем не собирался никого удивлять. Просто возникла такая необходимость — написать быстренько прогу, которая посылает/принимает пакеты по Modbus. Ну, на одном предприятии случилась крупная авария, пострадало оборудование. Теперь это оборудование нужно как-то «поднимать». Что-то там работает, что — нет. В общем понадобилась тестилка, с функцией эмуляции. Ничего уже готового и проверенного, естественно, нет. Практика показывает, что в таких случаях получается быстрее состряпать что-то самому, чем лазить по Всемирной помойке в поисках годных для употребления шмоток.

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

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

Код-под-катом. Простите за каламбур!

Читать далее

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

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

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

$ pip3 install psutil

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

Визуализатор. Подновление 3

Добавил HEX-отображение содержимого памяти по указателю мышинного курсора. Внешне подновление выглядит так:

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

Читать далее

Визуализатор. Подновление 2

Добавлено несколько способов отображения

1. Цветное изображение байтов (собственно, оно и было):

Читать далее

Визуализатор

Эта программка предназначена для (моей текущей) конкретной цели — графического отображения содержимого памяти микроконтроллера.

Проблема

Микроконтроллер, с которым я сейчас кувыркаюсь, STM32F429 — достаточно «жирный». На него у меня накатана FreeRTOS. На ней трудится LwIP. Ещё выше — UPC UA. И на самом верху — бизнес-логика — то, ради чего этот программный Франкенштей затевался.

Программный стек (FreeRTOS + LwIP + OPC UA) пока не работает. Какие-то непонятные срывы, падения в  HardFault и прочие радости разработчика. Понятно, что хотелось бы видеть динамическую картину распределения памяти как-то всю сразу.

Отсюда и появилась идея визуализации.

Читать далее