Search
Write a publication
Pull to refresh
10
0
Send message

Автопровизионинг Yealink T19 + динамическая адресная книга

Reading time7 min
Views7.3K
Когда я пришел работать в эту компанию, у меня уже имелась некоторая база по ip аппаратам, нескольким серверам с asterisk и нашлепкой в виде FreeBPX. Кроме того параллельно работала аналоговая АТС Samsung IDCS500 и в общем-то была основной системой связи в компании, ip телефония работала только для отдела продаж. И все бы варилось так и дальше, но в один прекрасный день был дан указ переводить всех на IP телефонию, были оговорены сроки, закуплено оборудование и план по переводу предприятия в 21 век стал претворятся в жизнь.
Первое что начинает беспокоить в такой ситуации, это быстро нарастающее кол-во телефонных аппаратов, которыми надо как-то управлять, второе, что сильно тревожило была телефонная книга. Если с первым нам мог помочь Endpoint Manager (который кстати выпилили из последних версий FreePBX), то вот с книгой возникали некоторые вопросы:

  • Во первых как обеспеспечить её точность при постоянной смене дислокации/текучести пользователей?
  • Во вторых, как полностью обезличить телефоны. И не заполнять каждый раз имя контакта?

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

Gonkey — инструмент тестирования микросервисов

Reading time9 min
Views15K

Gonkey тестирует наши микросервисы в Lamoda, и мы подумали, что он может протестировать и ваши, поэтому выложили его в open source. Если функциональность ваших сервисов реализована преимущественно через API, и используется JSON для обмена данными, то почти наверняка Gonkey подойдет и вам.


image


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

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

DIY кнопка вызова. Raspberry Pi, MajorDoMo, Freeswitch и Linphonec

Reading time11 min
Views14K
Какое-то время назад у меня была потребность в осуществлении связи с человеком после болезни, который не мог физически пользоваться телефоном. Нужно было простое вызывное устройство, по нажатию кнопки происходил голосовой вызов. Потребность исчезла, однако, побывав сам в больничке, посмотрев на пациентов, подумалось, что такое решение может кому и пригодиться.
Сейчас я вижу личное применение этого устройства в качестве SIP дверного звонка.

Возможно с небольшими переделками, совмещение VoIP телефонии с системой домашней автоматизации. Как варианты использования – SIP дверной звонок, интерком, система голосовой связи (клиент-персонал, директор-секретарь) и т.д.



Всё решение делается на бесплатном и открытом программном обеспечении: операционная система – Raspbian Stretch (Debian 9), Система домашней автоматизации – MajorDoMo, VoIP сервер – Freeswitch, программный клиент IP-телефонии с возможностью работы в терминальном режиме Linphonec.

В этой части, под катом, в основном и пойдет речь про установку консольного SIP клиента Linphonec.
Читать дальше →

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

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

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

Строим систему распознавания лиц на основе Golang и OpenCV

Reading time4 min
Views19K

OpenCV — библиотека, разработанная для проектов по компьютерному зрению. Ей уже около 20 лет. Я использовал ее еще в колледже и до сих пор применяю для своих проектов на C++ и Python, поскольку она имеет неплохую поддержку этих языков.

Но когда я начал изучать и использовать Go, мне стало интересно, можно ли применить OpenCV для работы с этим языком. В то время уже существовали примеры и туториалы по интеграции, но мне показалось, что они слишком сложные. Чуть позже мне в руки попался враппер, созданный командой The Hybrid Group. В этой статье я покажу, как начать с GoCV, разработав простую систему распознавания лиц с каскадами Хаара (Haar Cascades).
Читать дальше →

Как работать с Postgres в Go: практики, особенности, нюансы

Reading time10 min
Views151K


Неожиданное поведение приложения в отношении работы с базой приводит к войне между DBA и разработчиками: DBA кричат: «Ваше приложение роняет базу», разработчики — «Но ведь до этого всё работало!». Хуже всего, что DBA и разработчики не могут помочь друг другу: одни не знают про нюансы работы приложения и драйвера, другие не знают про особенности, связанные с инфраструктурой. Было бы неплохо такой ситуации избежать.


Надо понимать, часто недостаточно полистать go-database-sql.org. Лучше вооружиться чужим опытом. Еще лучше, если это будет опыт, полученный кровью и потерянными деньгами.

Пример создания Makefile для Go-приложений

Reading time7 min
Views38K
В этом руководстве мы рассмотрим, как разработчик Go может использовать Makefile при разработке собственных приложений.

image

Что такое Makefile-ы?


Makefile — невероятно полезный инструмент автоматизации, который можно использовать для запуска и сборки приложений не только на Go, но и на большинстве других языков программирования.

Его часто можно увидеть в корневом каталоге множества Go приложений на Github и Gitlab. Он широко используются в качестве инструмента для автоматизации задач, которые часто сопровождают разработчиков.

Если вы используете Go для создания веб-сервисов, то Makefile поможет решить следующие задачи:

  • Автоматизация вызова простых команд, таких как: compile, start, stop, watch и т. д.
  • Управление специфичными для проекта переменными окружения. Он должен подключать файл .env.
  • Режим разработки, который автоматически компилируется при изменении.
  • Режим разработки, который показывает ошибки компиляции.
  • Определение GOPATH для конкретного проекта, чтобы мы могли хранить зависимости в папке vendor.
  • Упрощенный мониторинг файлов, например, make watch run = «go test. / ...»
Читать дальше →

NVIDIA Jetson Nano: тесты и первые впечатления — часть 2, тесты AI

Reading time6 min
Views12K
Привет, Хабр.

В первой части была рассмотрена NVIDIA Jetson Nano — плата в форм-факторе Raspberry Pi, ориентированная на производительные вычисления с помощью GPU. Настала пора протестировать плату в том, для чего она создавалась — для AI-ориентированных расчетов.



Рассмотрим, как идут на плате разные задачи, вроде классификации изображений или распознавания пешеходов или котиков (куда же без них). Для всех тестов приведены исходники, которые можно запустить на десктопе, Jetson Nano или Raspberry Pi. Для тех, кому интересно, продолжение под катом.
Читать дальше →

Создание минимального Docker-контейнера для Go-приложений

Reading time4 min
Views52K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи основателя сервиса Meetspaceapp Nick Gauthier «Building Minimal Docker Containers for Go Applications».

Время чтения: 6 минут

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

Часть 1: Наше «приложение»


Для тестирования нам потребуется какое-нибудь маленькое приложение. Давайте будем фетчить google.com и выводить размер HTML.

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

func main() {
    resp, err := http.Get("https://google.com")
    check(err)
    body, err := ioutil.ReadAll(resp.Body)
    check(err)
    fmt.Println(len(body))
}

func check(err error) {
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}

Если мы запустимся, то получим только какое-то число. У меня вышло около 17К. Я целенаправленно решил использовать SSL, но причину объясню позднее.
Читать дальше →

Рецепты Nginx: авторизация через ЕСИА

Reading time3 min
Views5.7K
Для приготовления авторизации через ЕСИА нам понадобится сам nginx и его плагины encrypted-session, headers-more, auth_request, uuid4, set-misc, echo, json, sign, jwt. (Я дал ссылки на свои форки, т.к. делал некоторые изменения, которые пока не удалось пропихнуть в оригинальные репозитории. Можно также воспользоваться готовым образом.)
Читать дальше →

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

Reading time14 min
Views66K
image

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

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

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

image

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

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

Дозвонились! Как собрать свою Web-звонилку за час

Reading time7 min
Views39K


Друзья, сегодня я хочу поговорить с вами про звонки. Для кого-то это совсем новая тема. Для других — чистой воды фан на уровне «а не зафигачить ли мне свой скайп?». Для третьих — внезапно возникшая жизненная необходимость. Последний вариант — наш вариант.


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

Уже хочу

Golang и эволюция взаимодействия с базами данных

Reading time4 min
Views20K

В этой статье хочу обобщить проблемы работы с базами данных под управлением golang. При решении простых задач обычно эти проблемы не видны. С ростом проекта масштабируются и проблемы. Наиболее злободневные из них:


  • Снижение связности приложения, работающего с базой данных
  • Журналирование запросов в отладочном режиме
  • Работа с репликами

Статья построена на основании пакета github.com/adverax/echo/database/sql. Семантика использования этого пакета максимально приближена к стандартному пакету database/sql, поэтому не думаю, что при его использовании у кого-нибудь возникнут проблемы.

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

Rosserial & STM32

Reading time4 min
Views12K
Робототехническая операционная система ROS является довольно мощной платформой для создания робототехнических систем, которая включает все необходимое для разработки своих проектов от простейших программных компонентов, называемых “узлами”, и протокола обмена данными до среды симулирования реальной робототехнической платформы Gazebo. В основном ROS используется в связке с такими микроконтроллерами на платформе Arduino. Интернет переполнен всевозможными туториалами о связке ROS и Arduino.

В данный момент не существует информации об использовании робототехнической операционной системы ROS в связке с микроконтроллером STM32. Интернет переполнен только вопросами.


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

Распознавание номеров. Как мы получили 97% точности для Украинских номеров. Часть 2

Reading time7 min
Views63K
Nomeroff Net numberplate detection OCR example


Продолжаем рассказ о том как распознавать номерные знаки для тех кто умеет писать приложение «hello world» на python-е! В этой части научимся тренировать модели, которые ищут регион заданного объекта, а также узнаем как написать простенькую RNN-сеть, которая будет справляться с чтением номера лучше чем некоторые коммерческие аналоги.
В этой части я расскажу как тренировать Nomeroff Net под Ваши данные, как получить высокое качество распознавания, как настроить поддержку GPU и ускорить все на порядок…
Читать дальше →

Повышаем информативность ошибок в Go – github.com/ztrue/tracerr

Reading time3 min
Views5.8K
После многолетнего опыта работы с php и js, я привык иметь в ошибках стектрейс и смотреть на место, где произошла ошибка прямо из эррор-репорта. Пересев на Go пару лет назад, я был несколько удивлен, что в Go другие правила и нужно угадывать стектрейс по какой-нибудь строке типа `invalid character`. А если она произошла на проде и не известно, как ее воспроизвести, то это превращалось в целый аттракцион.

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

golang error output

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

Как из домашнего ПК средствами виртуализации сохранить игровую систему

Reading time8 min
Views67K
Благодаря конкуренции и развитию НТП современные ПК позволяют выполнять множество простых и сложных задач одновременно, например играть и воспроизводить видео на ТВ, рендерить графику и читать новости в интернете, раздавая торренты параллельно, и т.д. и т.п. Многие идут дальше и используют несколько ПК для работы и развлечений. Однако при помощи технологий виртуализации можно с одной стороны расширить возможности своего ПК, а с другой сэкономить, т.к. по сути можно запустить несколько операционных систем на одном железе в одно и то же время.


Эта статья будет посвещена настройки хоста именно для использования в «быту», т.е. разговор пойдет о GPU PASSTHROUGH.
Читать дальше →

Распознавание номеров. Практическое пособие. Часть 1

Reading time6 min
Views110K
Пример распознавания номерных знаков

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

И в один прекрасный день МВД Украины открыло доступ к реестру транспортных средств. Теперь по номерному знаку стало возможным проверять некоторую информацию про автомобиль (марку, модель, год выпуска, цвет и т.д. )! Скучная рутина линейного программирования померкла перед новой свехзадачей — считывать номера по всей базе фото и валидировать эти данные с теми, что указывал пользователь. Сами знаете как это бывает «глаза загорелись» — вызов принят, все остальные задачи на время стали скучны и монотонны… Мы принялись за работу и получили неплохие результаты, чем, собственно и решили поделиться с сообществом.
Для справки: на сайт AUTO.RIA.com, в день добавляется около 100 000 фото.
Датасаентисты давно уже знают и умеют решать подобные задачи, поэтому мы с dimabendera написали эту статью именно для программистов. Если вы не боитесь словосочетания «сверточные сети» и умеете писать «Hello World» на питоне — милости просим под кат…
Читать дальше →

IVR с распознаванием голоса на Астериск — быстро, просто, бесплатно

Reading time5 min
Views14K
Создание IVR на базе Астериск, с распознаванием DTMF и имён сотрудников (на базе Voicer от уважаемого antirek) и подключение к существующей АТС.
Читать дальше →

Xiaomi Aqara Switch переделываем с ZigBee на Z-Wave

Reading time3 min
Views31K


Решил попробовать интегрировать в свою домашнюю Z-Wave автоматизацию ZigBee выключатели. Для экспериментов приобрел недорогой ZigBee выключатель на батарейках Xiaomi Aqara Smart Switch. Выглядит красиво, пластик высочайшего качества, очень приятный, клавиша выключателя с пружинным механизмом, что дает полный тактильный фидбэк.

Выключатель планировал использовать в следующих сценариях:

  • при одинарном нажатии включать/выключать ночник
  • при долгом удержании диммировать ночник
  • при двойном нажатии включать/выключать LED подсветку

Но тестирование показало, что Xiaomi Aqara Smart Switch реагирует только на одинарное нажатие. А когда я попробовал подиммировать и подержал клавишу 5 секунд, то он сбросился на заводские настройки. В таком виде Aqara Smart Switch для меня оказался бесполезным и я решил в его корпусе сделать Z-Wave выключатель со всеми нужными мне функциями.

Основу Z-Wave выключателя составляет Z-Uno Module — маленькая плата на которой, только Z-Wave чип и память, программируется из среды Arduino по USB. Модуль при размере 25х15х1.9 мм предоставляет доступ ко всем пинам Z-Wave чипа. На модуле есть U.FL разъем для подключения антенны, либо можно просто припаять провод 86 мм. Это та же Z-Uno только для производителей устройств.
Читать дальше →

Information

Rating
Does not participate
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity