Установка PyCharm

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

1

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

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

Читать далее

Умные речи

Рекомендую к просмотру детям всех возрастов — от 13 до 33.

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

Подумайте — почему именно вы? Почему и какие для этого есть предпосылки?

Профессор жжёт

«Нанотехнологический метод генетической регуляции стволовых клеток при лечении короновируса Covid-19» (c) С.В.Савельев

Полтора часа полезной информации и тонкого циничного юмора.

Наслаждайтесь!

 

Хазин + Савельев

Умного человека всегда было полезно послушать. А если их двое?

Дураки ничего не поймут, а умным эта непринуждённая беседа  подкинет пищи для ума.

 

ONVIF. Дама сдавала багаж

Исходная диспозиция:

Обычный офисный компьютер и две видеокамеры BEWARD SV3215M

Читать далее

Ремоп Гнусмас

Да. Вы не ошиблись, именно так — Самсунг помер.

Ну, как помер? Ну, так и помер. Скоропостижно. Беда пришла внезапно. Но я, как практикующий патологоанатом, боролся за его жизнь до последнего.

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

Читать далее

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, который мы создали в предыдущий раз, не совсем правильный. Сказать, что класс совсем не правильный — тоже было бы не верно.

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

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

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

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

Читать далее