Category Archives: Python

Как безнаказанно озорничать в Питоне

Иногда, где-то глубоко в подсознании, я задаю себе вопрос — кто я больше: «Си-шник или Питонист?»

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

Читать далее

Как создавать и использовать свои исключения в Python

Ничего нового. Знатокам можно не читать.

Вообще объект исключения (другими словами — тип, суть, сам предмет — то есть та хрень, которая является объектом исключения) — это есть класс. Обычный класс. Как правило классы исключений являются порождёнными от базового класса Exception.

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее