Tag Archives: Python

Установка PyCharm

Установка PyCharm в Линуксе очень простая. Ниже я покажу, как её выполнить «в два притопа, три прихлопа»

1

Дистрибутив PyCharm лежит тут — https://www.jetbrains.com/pycharm/download/#section=linux

Собственно, их там два типа, дистрибутивов — коммерческий (Professional) и не коммерческий (Community).

Коммерческий, понятное дело, — за деньги и поэтому более навороченный. Нам же нужен некоммерческий вариант. Поэтому смело жмём чёрную кнопку Download и скачиваем сжатый архивный файл.

Читать далее

Контрактное программирование — это возвращение к истокам

История развития языков программирования в целом, а также желания и чаяния программистов порой удивляют своими непредсказуемостью и непостоянством. Так, например, некогда были созданы типированные языки типа C/C++, Pascal, Java и так далее. В этих языках программирования типы переменных сначала объявлялись, а затем пристрастно проверялись на соответствие.

Нельзя было создать переменную, не указав её тип. Почему нельзя? Да потому, что любая переменная занимает какое-то место в памяти. К тому же, разные типы переменных занимают разный объём памяти. Так сколько прикажете компьютеру выделять памяти для хранения той или иной переменной? Отсюда и следовало незыблемое правило указывать тип переменной.

К сожалению, жизнь не такая гладкая и везде абсолютно правильная. Были задачи, в которых было сложно заранее определить и назначить тип переменных. Были также и люди, которым указание типов было идеологически неприятно. Поэтому стали появляться шаблоны (templates), которые допускали использование переменных разных типов. Но изначально тип переменных всё равно нужно было указывать.

А потом появился Питон, в котором можно писать программы как попало. И в индустрию программирования хлынул поток недопрограммистов и говнокодеров. И началось! А вы думаете, почему интернет-браузеры так тормозят?

И вот, в какой-то момент программисты, ещё не опустившиеся до уровня гвонокодеров внезапно спохватились:

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

И маятник качнулся в обратную сторону — давайте теперь в нетипированных языках (Python, например) контролировать типы. И было придумано такое понятие — контрактное программирование.

Контрактное — это значит, что перед тем как писать код программы программисты сначала договариваются о типах переменных, которые будут «гулять» на стыках их программ.

Так как же нам, недопрограммистам-питонщикам использовать это контрактное программирование?

Читать далее

ONVIF. Python. Форматы разрешения

Вообще, существует большое количество форматов разрешения —

640х480,
800х600,
1024х768,
1280х1024

и так далее. Это только форматы дисплеев (мониторов). У видеокамер свои форматы. Причём, надо подчеркнуть, они почему-то не очень хорошо «бьются» с форматами дисплеев.

Вот, список форматов камер, с которыми я работаю:

704×576,
1280×720,
1280×960,
1920×1080,
2048×1536,
2592×1520,
2592×1944.

Ладно. Оставим этот вопрос низкой корреляции форматов между устройствами регистрации (видеокамеры) и устройствами отображения (дисплеи). Давайте лучше займёмся вопросом управления форматами для видеокамеры.

Читать далее

ONVIF. Python. Тренировка на кошечках

В классе ONVIFCamera имеется метод GeyDeviceInformation, который сообщает кое-какие интересные детали о видеокамере.

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

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

        print(myCam.devicemgmt.GetDeviceInformation())

Читать далее

ONVIF. Python. Ещё один рефакторинг класса

Класс Camera, который мы создали в предыдущий раз, не совсем правильный. Сказать, что класс совсем не правильный — тоже было бы не верно.

О чём речь? Речь идёт об идеологии ООП. Существует два способа взаимодействия двух классов при создании нового класса: композиция и наследование.

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

Второй способ — это наследование. При наследовании все члены родительского класса становятся членами нового класса. Иначе говоря новый класс НАСЛЕДУЕТ родительский класс. Вот сейчас мы перепишем наш класс согласно этому способу.

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

Читать далее

ONVIF. Python. Переходим к классам

Процедурное программирование — это хорошо.

Хорошо для создания программ на языке Си для мелких микроконтроллеров. Хорошо для обучения основам программирования на языках Pascal и Python.

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

И в этой статье я предлагаю перейти (пока не поздно) на стиль ООП. Иначе говоря, мы создадим класс для работы с видеокамерой, а потом этот класс мы будем постепенно «накачивать» функционалом.

А сначала мы тупо отрефакторим нашу программу из предыдущей статьи — перепишем её в стиле ООП. Никакого дополнительного функционала пока добавлять не будем.

Поехали!

Читать далее

ONVIF. Python. Первая прога

Будем считать, что модуль onvif_zeep уже установлен. Если ещё нет, то вам нужно сначала зайти сюда «ONVIF. Установка на Debian«.

У меня в сети в наличие имеется две видеокамеры BEWADR типа SV3215M. Я буду играться ними. Сетка «серая», камеры имеют адреса 172.16.27.200 и 172.16.27.201.

А начнем мы с самой простой программы. Программа ничего полезного не делает. Основное назначение программы — продемонстрировать методику работы под ONVIF. Функциональность программы заключается только в том, чтобы подсоединиться к видеокамере и перезагрузить её.

#!/usr/bin/env python3

IP = '172.16.27.201'
PATHTOWSDL = '/home/alex/.local/lib/python3.7/site-packages/wsdl/'

from onvif import ONVIFCamera

if __name__ == "__main__":
    port = 80
    user = 'admin'
    pswd = 'admin123'

    myCamera = ONVIFCamera(IP, port, user, pswd, PATHTOWSDL)

    print("Произведём перезагрузку камеры")
    myCamera.devicemgmt.SystemReboot()

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее