Search
Write a publication
Pull to refresh
3
0
Send message

Простой SMS-шлюз на Raspberry Pi

Reading time9 min
Views23K
Иногда случается так, что надо отправлять откуда-нибудь SMS-сообщения. При этом неважно — откуда именно. Речь может идти о домашней системе, объединяющей кучу устройств (эти системы называют «homelab»), из которой надо отправлять уведомления. Это может быть система сигнализации, информирующая своего владельца о разных событиях, требующих его внимания. Возможно это — программный комплекс, которому нужно подтверждать правильность телефонных номеров, вводимых его пользователями. Во всех этих случаях, да и во многих других, SMS-сообщения были и остаются наилучшим способом передачи неких уведомлений по инициативе отправителя.

Но в большинстве вышеописанных сценариев использования SMS нельзя положиться на внешние SMS-шлюзы или API, так как система отправки уведомлений должна работать даже тогда, когда пропадает доступ в интернет. Особенно это важно для охранных систем, которые должны функционировать независимо от внешних источников питания.

Очевидное решение всех этих проблем заключается в поддержке собственного SMS-шлюза.

Результат этого проекта: устройство, поддерживающее полнофункциональный REST API, способное отправлять и получать сообщения

Как, с минимальными затратами, самостоятельно сделать такой шлюз?
Читать дальше →

От взлома протокола в старом «железе» до разработки программ

Reading time4 min
Views9.1K

Нужно было "взломать" протокол передачи данных внутри торгового автомата. Встроить одноплатную ЭВМ Raspberry Pi, большой монитор, написать программу для связи с web сервером и сам web сервер. Далее рассказ об этом взломе и немного о модернизации.

Читать далее

Создание камеры-ловушки с использованием Raspberry Pi, Python, OpenCV и TensorFlow

Reading time6 min
Views17K


Я сильно верю в обучение через практику, через создание чего-то нового. А для того чтобы что-то создавать, нужно чтобы работа приносила бы удовольствие.

Я начну рассказ о моём новом проекте с того, что раскрою причины, по которым решил попытаться создать камеру-ловушку на основе Raspberry Pi.

Я живу в Лондоне, мой сад часто посещают местные представители дикой природы. Случается это так часто, что я, заядлый садовник, мало-помалу начал расстраиваться. Разбитые горшки, выкопанные из земли растения, съеденные фрукты и овощи…

Я видел в своём саду маленьких лис (они — просто прелесть), больших лис, кошек (не моих), птиц. А однажды меня даже посетил ястреб-перепелятник.
Читать дальше →

Еще один пересказ «туториала» Джека Креншоу

Reading time5 min
Views3.7K
Иногда более-менее не тривиальную задачку приятно решить с чувством легкого базиса под ногами. Базис как бы уже есть, и мы как нечто среднее между художником и архитектором, ловим себя (в данный момент времени) на перекладывании пустого в порожнее, готовя нечто яркое и крепкое (почти как красное полусухое ?. Яркое — потому что без йоты красоты легко сойти на полпути, а крепкое — профессия обязывает. Чтобы было еще ярче, призовем в помощь замечательные серии Jack Crenshaw compilers.iecc.com/crenshaw (non-technical introduction to compiler construction) и начнем, пожалуй, с построения маленького, но вполне достойного линтера en.wikipedia.org/wiki/Lint_(software) (Честно говоря, так как ниже будет имплементен разбор яваскрипт кода, вполне допустимо, но только временно, переименовать линтер в парсер и думать дальше в новых терминах)

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

Ищем свободное парковочное место с Python

Reading time14 min
Views66K
image

Меня зовут Рушан, и я автор Telegram‑канала Нейрон. Не забудьте поделиться с коллегами или просто с теми, кому интересны такие статьи.

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

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

image

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

Поэтому давайте немного развлечёмся и напишем точную систему уведомлений о свободной парковке с помощью Python и глубокого обучения
Читать дальше →

Приложение для аудиозвонков с регулировкой звука, как в реальной жизни

Reading time9 min
Views6K

Распространенная в пандемию ситуация: общаетесь с друзьями или коллегами по Zoom, несколько человек начинают говорить одновременно и… разобрать хоть что-то не представляется возможным. Эта проблема натолкнула нас на идею написать свое приложение для аудиозвонков, где громкость регулируется весьма необычным образом. У каждого пользователя есть свой аватар — кружок на плоскости, который управляется перетаскиванием. Чем ближе аватары пользователей на экране, тем громче они друг друга слышат. Работает ли это? В целом да. Рассказываем, что у нас получилось.

Читать далее

Как работает автоматическая регулировка усиления

Reading time8 min
Views17K

Привет, Хабр! Сегодня изучим автоматическую регулировку усиления, АРУ, на примере гитарного эффекта компрессора. Это прибор для сжатия не воздуха, а электрического сигнала. Из слабого сигнала он делает сильный, а из слишком сильного просто сильный.

Педаль на основе схемы культового DOD 280 я планирую не только собрать, но и немного усовершенствовать, добавив эффект тремоло (амплитудное вибрато). Дело в том, что и компрессор, и тремоло построены на основе усилителя с управляемым усилением. Для тремоло нужно добавить только генератор медленных колебаний (LFO, low frequency oscillator).
Читать дальше →

Грокаем монады императивно

Reading time7 min
Views6K

В предыдущем посте мы переизобрели Монаду на рабочем примере. У нас получился базовый механизм в виде функции andThen для типа option, но мы еще не достигли нашей конечной цели. Мы надеялись, что получится написать код, так же как если бы нам не нужно было обрабатывать значения option. Мы хотели писать в более "императивном" стиле. В этой части мы увидим как достичь этого при помощи технологии computation expressions языка F#, а также углубим наше понимание Монад.

Читать далее

Physically-based rendering. Ray marching (часть 1)

Reading time6 min
Views10K

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

Читать далее

Устаревшие Python-библиотеки, с которыми пора попрощаться

Reading time11 min
Views34K

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

Читать далее

Как красиво избавиться от switch-case посредством перечисления

Reading time7 min
Views35K

Привет, хабр! Применение switch-case в коде - давняя тема холиваров на форумах на предмет чистоты кода. Лично я склоняюсь к простому мнению: инструмент необходимо использовать по назначению.

Сегодня хотелось бы рассмотреть несколько простых кейсов, где switch-case является не лучшим выбором и предложить красивое и удобное решение проблемы.

Читать далее

Элементы языка С, которые являются неподдерживаемыми в языке С++

Reading time7 min
Views33K

Нижеприведенный список является моей небольшой коллекцией примеров кода на языке С, которые не являются корректными с точки зрения языка С++ или имеют какое-то специфичное именно для языка С поведение. (Именно в эту сторону: С код, являющийся некорректным с точки зрения С++.)

Этот материал я уже публиковал на другом ресурсе в менее причесанном виде, Я бы, наверное, поддался прокрастинации и никогда не собрался опубликовать эту коллекцию здесь, но из-за горизонта уже доносится стук копыт неумолимо приближающегося С23, который безжалостно принесет некоторые жемчужины моей коллекции в жертву богам С-С++ совместимости. Поэтому мне и пришлось встать с печи, пока они еще актуальны...

Разумеется, язык С имеет много существенных отличий от языка С++, т.е. не составит никакого труда привести примеры несовместимостей, основанные, скажем, на ключевых словах или других очевидных эксклюзивных свойствах С99. Таких примеров вы не найдете в списке ниже. Мой основной критерий для включения примеров в этот список заключался именно в том, что пример кода должен выглядеть на первый взгляд достаточно "невинно" для С++-наблюдателя, т.е. не содержать бросающихся в глаза С-эксклюзивов, но тем не менее являться специфичным именно для языка С.

Читать далее

NORVI IIOT (не Kincony единым)

Reading time13 min
Views5K


У нас тут уже образовался клуб любителей контроллеров и их программирования, мы познакомились с устройством и назначением DIY контроллеров компании Kincony серии KC868 (A4, A6, A8, Uair, AG, A16, A32, Server) и значительно продвинулись в этой теме, но мир контроллеров не заканчивается на продукции Kincony, есть много не менее достойных и интересных производителей, и в моём распоряжении оказался целый набор устройств от компании Iconic Devices (Norvi): NORVI IIOT (AE01-T), NORVI ENET (AE06-T), NORVI Cema (M1), NORVI Agent 1 (AT01-BM1), NORVI Agent 2 (AP01-BC1).

Как вы догадываетесь, я не могу отказать себе в удовольствии разобрать по косточкам и препарировать всё это великолепие и не могу не поделиться с вами результатами своих изысканий. Эта первая статья цикла о девайсах Norvi будет посвящена модели NORVI IIOT — базовой для всего семейства контроллеров этой компании.

Итак, приступим…
Читать дальше →

YouTubeDrive: хранение файлов на YouTube

Reading time9 min
Views41K


Хостинг неограниченного размера? Звучит как нечто фантастическое и невозможное по законам природы. Примерно как вечный двигатель. Но что, если такое возможно? (не вечный двигатель, конечно, а неограниченный хостинг).

Если подумать, ведь бесплатное хранилище неограниченного размера предоставляют десятки интернет-сервисов, от соцсетей до фотохостингов. Например, ограничение YouTube на размер одного видеоролика — 12 часов или 256 ГБ, но на количество видеороликов ограничений нет.
Читать дальше →

Расстояние Левенштейна для чайников

Reading time4 min
Views109K

Когда я взялась решать задачку по динамическому программированию — реализовать алгоритм, который рассчитывает расстояние Левенштейна — мне пришлось послушать пару небольших лекций и прочесть несколько статей (приведу их в конце), чтобы разобраться. Я решила попытаться пересказать алгоритм настолько просто, чтобы по этому объяснению можно было снять ролик для тиктока (когда он снова возобновит свою деятельность в РФ). Дальше — мало формул и много картинок.

Читать далее

Kincony KC868-A6: A4 на стероидах (по заявкам с Хабра)

Reading time10 min
Views13K


Компания Kincony отличается завидной плодовитостью и «выпекает» новые контроллеры как горячие пирожки — каждый месяц у неё появляются всё новые и новые модели. И, судя по всему, останавливаться она не собирается, в её собственной интерпретации это называется:

“Continuously developing new products.”

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

Разработчики Kincony знакомы с моими статьями, а также с комментами Хабро-юзеров под ними, то есть у нас есть реальный шанс (механизм) влияния на начинку новых изделий Kincony. В частности, среди моих пожеланий были добавление в контроллер дисплея, возможность подключения беспроводных модулей LoRa и nRF24, вывод на плату отдельных Serial, I2C и SPI разъёмов, добавление часов реального времени (RTC) — и вот передо мной лежит KC868-A6, в котором все эти пожелания учтены. Вот так просто — заказывали? — получите!

Разумеется, не все наши пожелания учтены в KC868-A6, но сама тенденция радует, а что и как устроено внутри A6 мы с вами разберём дальше…
Читать дальше →

Работаем с «малинкой»: 8 лучших аксессуаров для Raspberry Pi лета 2022 года

Reading time4 min
Views24K

Привет, Хабр! Продолжаем изучать возможности одноплатника Raspberry Pi. Разные модели и сами по себе неплохие, но с разными аксессуарами и расширениями круг возможностей этого устройства расширяется. Наверное, многие читатели Хабра, кто работает с микроэлектроникой, имеет собственные предпочтения в плане дополнительных девайсов для «малинки». Ну а под катом — 5 аксессуаров, которые понравились нашей команде. Если у вас есть, что добавить — давайте обсудим в комментариях.
Читать дальше →

19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 1. Введение

Reading time9 min
Views41K

Дабы исчерпать до дна тему сокетов в Python я решил изучить все возможные способы их использования в данном языке. Чтобы всех их можно было испытать и попробовать на зуб, были созданы 19 версий простого эхо-сервера: от примитивного использования класса socket до asyncio. Блокирующие и неблокирующие сокеты, процессы и потоки, select'ы и selector'ы, коллбеки и сопрограммы — все эти темы расположены в эволюционном порядке, чтобы один пример плавно перетекал в другой.

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

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

Читать далее

Обход блокировок за NAT без белого IP

Reading time5 min
Views35K

На написание статьи меня сподвиг интересный Tutorial от Валерия Лутошкина с настройкой BGP и VPS на оборудовании MikroTik. Это решение натолкнуло меня на домашнюю практику с протоколами динамической маршрутизации. Попробовав его реализовать, я понял, что мой домашний провайдер не даёт манёвров для действий и блокирует порт TCP 179 по умолчанию. В дополнение к этому у меня нет белого IP адреса и я за NATом. В общем все прелести рядового пользователя. Разбираемся как облегчить себе жизнь с помощью MikroTik.

Читать далее

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

Reading time10 min
Views34K

Привет! Меня зовут Алексей Ивасюта, я фронтенд-разработчик в Авито в кластере Seller Experience. В этой статье я расскажу, как правильно рассчитать длину текста в Java Script. Эта статья будет одинаково полезна как начинающим разработчикам, так и весьма опытным. Благодаря ей вы поймете устройство Unicode и особенности его работы в JS.

Читать далее

Information

Rating
Does not participate
Registered
Activity