Search
Write a publication
Pull to refresh
15
0
Алексей Розман @alexyr

Python developer

Send message

Добавляем ZigBee устройства в Homebridge используя CC2531

Reading time5 min
Views67K
На Хабре уже встречались статьи о том, как подружить ZigBee устройства различных производителей с системами управления умным домом, без использования фирменных хабов, вроде Xiaomi Gateway. Однако, инструкции для homebridge, я не нашел не только на Хабре, но и на других просторах интернета. Поэтому хочу поделиться опытом добавления ZigBee устройств в homebridge. Огромную благодарность надо выразить создателю ресурса zigbee2mqtt.io, там уже расписаны способы прошивки модема CC2531 и подключения к таким системам управления умным домом как Home Assistant, Domoticz и Majordomo. Статья рассчитана на пользователей, у которых уже установлен и настроен homebridge.

Читать дальше →

Подслушиваем чат телеграма с помощью своего клиента

Reading time5 min
Views198K

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


Для этого в телеграме есть боты. На Хабре есть несколько статей, посвященных ботам, например: "Чат-помощник на сайт".


Бот позволяет читать и посылать сообщения, для регистрации бота не нужен телефон и количество ботов может быть любым. Но название бота включает в себя слово "bot", что может вызвать у хозяина чата ненужные вопросы.


Но, как говорится, правильно поставленный вопрос — половина ответа.

Читать дальше →

Мелкая питонячая радость #4: Radon — качество кода, измеренное в числах

Reading time3 min
Views13K

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



Метрик для оценки текстов программ придумали немало — от банального количества строк кода в проекте до не столь очевидного "индекса поддерживаемости" (Maintainability Index). Подробно про все существующие способы обмазывания кода всякими метриками можно почитать в этой статье.


В мире Python, конечно же, есть своя штука для оценки качества кода. Она называется radon. Она написана на этом же самом Python и работает исключительно с питонячими файлами.

Читать дальше →

Делаем индикатор заряда и пробега для электро машины

Reading time2 min
Views37K

Кому нужен и удобен индикатор заряда батареи в %? На самом деле нам надо знать, как далеко мы сможем проехать на батарее без подзарядки. Давайте сделаем такой индикатор. Он может показывать сколько вы уже проехали (секунд/минут/метров) после полной зарядки а также сколько ещё осталось проехать (метров/секунд/минут) а также общий пробег. Заодно мы на наглядном примере разберёмся с использованием супер Микро Arduino контроллеров семейства ATtiny.
Читать дальше →

Как не продолбать пароли в Python скриптах

Reading time4 min
Views70K


Хранение паролей всегда было головной болью. В классическом варианте у вас есть пользователь, который очень старается не забыть жутко секретный «qwerty123» и информационная система, которая хранит хеш от этого пароля. Хорошая система еще и заботливо солит хеши, чтобы отравить жизнь нехорошим людям, которые могут украсть базу с хешированными паролями. Тут все понятно. Какие-то пароли храним в голове, а какие-то засовываем в зашифрованном виде в keepass.

Все меняется, когда мы убираем из схемы человека, который старательно вводит ключ с бумажки. При взаимодействии двух информационных систем, на клиентской стороне в любом случае должен храниться пароль в открытом для системы виде, чтобы его можно было передать и сравнить с эталонным хешем. И вот на этом этапе админы обычно открывают местный филиал велосипедостроительного завода и начинают старательно прятать, обфусцировать и закапывать секретный ключ в коде скриптов. Многие из этих вариантов не просто бесполезны, но и опасны. Я попробую предложить удобное и безопасное решение этой проблемы для python. И чуть затронем powershell.
Читать дальше →

Как сделать солнечный фонарик своими руками (часть 1)

Reading time8 min
Views50K


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

Строим универсальную, машинную USB зарядку (попытка номер раз)

Reading time6 min
Views449K
image
Здравствуйте Хабра-господа и Хабра-Дамы!
Думаю некоторым из Вас знакома ситуация:
«Автомобиль, пробка, N-ый час за рулем. Коммуникатор с запущенным навигатором уже 3-й раз пиликает об окончании заряда, несмотря на то что все время подключен к зарядке. А Вы, как на зло, абсолютно не ориентируетесь в этой части города.»
Далее, я расскажу о том, как имея в меру прямые руки, небольшой набор инструментов и немного денег соорудить универсальную (подходящую для зарядки номинальным током, как Apple, так и всех остальных устройств), автомобильную USB зарядку для Ваших гаджетов.

ОСТОРОЖНО: Под катом много фото, немного работы, никакого ЛУТ и нет хеппи энда (пока нет).
Хочу заряжать смартфон и планшет в машине

Pritunl — VPN-сервер для себя и друзей за 10 минут

Reading time2 min
Views110K


В связи с последними событиями в России хочу рассказать вам о классном self-hosted VPN-сервере. После простой установки, без особого труда и углубленных знаний вы сможете создавать пользователей, генерировать VPN-профили и смотреть графики использования сети.


А обеспечив VPN-подключением себя и ваших близких, вы можете попробовать разделить траты за виртуальный сервер с вашими друзьями и знакомыми.


В результате чего пятидоллоравая VPS'ка может превратится в мощный инструмент обхода блокировок

Читать дальше →

Как подружить Siri и Xiaomi

Reading time9 min
Views25K

В этой статье представлен гайд по настройке совместной работы светильников Xiaomi, работающих по Wi-Fi и Bluetooth, с Siri при помощи Homebridge. А также описаны грабли, на которые я успел наступить.


Читать дальше →

Как сделать LXC контейнер на роутере под управлением LEDE

Reading time8 min
Views6.4K

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


Итак, как запустить LXC-контейнер с Debian не где-нибудь там, а на железке под управлением LEDE (так же известный как форк OpenWRT)?


(предполагается, что читатель сам придумает, зачем ему LXC на роутере и уже знаком с этой технологией контейнеров)

Читать дальше →

Тюнинг сетевого стека Linux для ленивых (v2.5.0)

Reading time2 min
Views18K

Представлен выпуск проекта netutils-linux 2.5.0, набора утилит для мониторинга и тюнинга производительности сетевого стека Linux. Всё написано на Python (поддерживаются python 2.6+ и 3.4+) и доступно под MIT-лицензией.


Цель проекта — упростить и унифицировать процесс тюнинга сетевого стека и сетевых карт, снизив необходимость разбираться в устройстве сетевого стека для сисадминов и освободить их головы от рутинных вычислений и написания с нуля кучи одинаковых bash-скриптов.


Рекомендации для использования — наличие канала с 200+ Мбит/с, обрабатываемого Linux-based машиной, и требований к минимизации задержек и потерь.


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

Читать дальше →

Нюансы шифрования в Git

Reading time3 min
Views14K
Если вы захотели воспользоваться публичным ресурсом вроде GitHub или GoogleDrive для хранения своего репозитория, но при этом не готовы делиться со всем миром результатами своего труда, то вам поможет шифрование файлов в гит-репозитории. Это не сверхсекретная технология и на эту тему есть некоторое количество небольших статей в интернете (и даже на Хабре), но все они являются вариацией куска документации git посвященного атрибутам и тему совершенно не раскрывают. Кроме этого, в процессе использования git в этом режиме появляются ньюансы использования, которые не всегда легко понять и решить и которые я в этой статье постараюсь осветить.
Читать дальше →

Снова про WebDAV и Облако Mail.Ru

Reading time2 min
Views103K
В каждой теме, касающейся Облака Mail.Ru, имеются комментарии — «когда будет WebDAV?» и родственное «Как подключить Облако Mail.ru как сетевой диск?». Судя по тому, что обещают уже несколько лет (хотя в облаке для бизнеса webdav имеется), бесплатные пользователи его не дождутся.

В общем, гора к Магомету не идёт, но и Магомет как-то не торопился, хотя, казалось бы, все для этого есть — и реализации API, и реализации webdav-серверов. Вполне логично было бы взять и то, и другое и объединить.
Читать дальше →

Интеграция 1С с DLL с помощью Python

Reading time4 min
Views30K
Привет Хабр! Недавно я разработал алгоритм для логистики, и нужно было его куда-то пристроить. Помимо веб-сервиса решено было внедрить данный модуль в 1С, и тут появилось довольно много подводных камней.

Начнем с того, что сам алгоритм представлен в виде dll библиотеки, у которой одна точка входа, принимающая JSON строку как параметр, и отдающая 2 колбэка. Первый для отображения статуса выполнения, другой для получения результата. С web-сервисом все довольно просто, у питона есть замечательный пакет ctypes, достаточно подгрузить нужную библиотеку и указать точку входа.

Выглядит это примерно так:

import ctypes
def callback_recv(*args):
	print(args)

lib = ctypes.cdll.LoadLibrary('test.dll')
Callback = ctypes.CFUNCTYPE(None, ctypes.c_int, ctypes.c_char_p)
my_func = getattr(lib, '_ZN7GtTools4testEPKcPFviS1_E')
cb_func = Callback(callback_recv)
my_func(ctypes.c_char_p('some data'), cb_func)
 

Как можно заметить, точка входа не совсем читабельная. Чтобы найти данную строчку в скомпилировнанных данных, нужно открыть соответствующий файл с расширением .lib и применить утилиту objdump с параметром -D, в выводе легко можно найти нужный метод по названию.

Данное коверканье метода происходит из-за того, что компилятор манглит («mangle» — калечить) название всех точек входа, причем разные компиляторы «калечат» по разному. В примере указан метод полученный MinGW
Читать дальше →

Грязные трюки в коде игр

Reading time13 min
Views117K


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

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

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

Магия SSH

Reading time11 min
Views535K
С SSH многие знакомы давно, но, как и я, не все подозревают о том, какие возможности таятся за этими магическими тремя буквами. Хотел бы поделиться своим небольшим опытом использования SSH для решения различных административных задач.

Оглавление:

1) Local TCP forwarding
2) Remote TCP forwarding
3) TCP forwarding chain через несколько узлов
4) TCP forwarding ssh-соединения
5) SSH VPN Tunnel
6) Коротко о беспарольном доступе
7) Спасибо (ссылки)
Читать дальше →

Фантастика и фентези за два с половиной года, почти сто хороших книг

Reading time22 min
Views250K
На этот пост меня подтолкнула публикация «Почему я ворую книги, бедные авторы, и как это исправить», а именно — скепсис и возражения на мой комментарий о том, что я не читаю плохие книги. Мне предложили рассказать, как я выбираю книги для чтения и что именно читаю. Ну я и повелся.
Оформить список было сравнительно просто, FBReader любезно хранил на GoogleDrive все скачанные книги с того момента, как там появилась эта услуга. Предлагаю вашему вниманию список прочитанного мной за 2,5 года из жанров фентези и фантастики.
Читать дальше →

Малиновый Прог против Интернета Кирпичей, или Raspberry Pi с графикой на read-only microSD

Reading time16 min
Views88K
Запуск Raspberry Pi с полной поддержкой графики на microSD, навсегда остающейся в режиме read-only после установки системы. Отсутствие какой-либо записи данных на флэш-память повышает надёжность устройства, приближая его к промышленному классу изделий. Пошаговая инструкция. Небольшой театр инженерного абсурда для развлечения аудитории.


Мне понадобилось сетевое устройство с открытым кодом и выходом HDMI, и я решил попробовать Малиновый Прог. Да, я именно так предлагаю переводить Pi: Прог. Понятное дело, даже одноплатнику нужна операционка. И вот, захожу я на официальный сайт, ожидая встретить там подробное руководство по созданию суровой, неломаемой Вещи à la turnkey box. Но народ, как ни в чём не бывало, устанавливает Ubuntu (т.е. Raspbian Jessie) прямо на microSD, размещая и swap там же. Как обычный десктоп, face palm.

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

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

Уменьшение операций чтения/записи на Raspberry Pi

Reading time4 min
Views35K
Введение

Итак, в интернете можно найти статьи о том что в Raspberry флешки «живут» 2-3 месяца, после чего приходят в негодность. Предложенные решения — заменить стандартную microSD карточку на USB HDD. Решение простое, надёжное, плюс повышается скорость чтения/записи. Но почему флешки так быстро «умирают»? Могут ли те же факторы навредить жёсткому диску? И так приступим!
Читать дальше →

Нештатный аккумулятор в APC Smart-UPS SUA 1000I

Reading time3 min
Views102K


Домашний сервер, контроллер умного дома, ONT от МГТС и прочая чувствительная аппаратура у меня уже давно подключены через UPS от APC. Всё бы хорошо, но родные (довольно недешевые) аккумуляторы в нём служат года два-три, а потом необратимо деградируют. Кроме того, даже новых аккумуляторов хватает в лучшем случае минут на 15. Когда подошла пора очередной замены аккумуляторов, я решил найти более долговременное решение.


Не могу сказать, что замена аккумулятора — это какой-то rocket science, но вопросов с неочевидными ответами было несколько:


  • Какие аккумуляторы взять и на какое напряжение?
  • Будут ли аккумуляторы нормально заряжаться?
  • Проработает ли UPS не 15 минут, а несколько часов?
  • Как объяснить UPSу, что у него теперь аккумуляторы другой ёмкости?

За ответами прошу под кат

Читать дальше →

Information

Rating
Does not participate
Location
Иерусалим, Иерусалим, Израиль
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer
Senior
Python
C#
Docker
Git
Linux