По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Итак, вы полностью укомплектовали и настроили ваш умный дом. И конечно, вам нравится периодически показывать выпендриваться перед друзьям, как круто включать лампы, проигрывать видео и фильмы подсказкой голосовому помощнику, приготовить кофе или регулировать термостат коснувшись приложения на экране смартфона. Поздравляем! Но если вы любитель автоматизации (как и мы), который редко останавливается на достигнутом, то возможно будете разочарованы количеством необходимых программ, которые нужно загрузить, интерфейсов, которые вам придётся усваивать, чтобы управлять гаджетами. Скорее всего, будут отдельные приложения для управления освещением, медиацентром, термостатом и приложение Google Home, который изо всех сил (но безнадежно) старается собрать всё это воедино. Большая вероятность того, что некоторые приложения будут несовместимы с другими и, вероятно, многие из них не будут работать, если они не в одной сети с гаджетом. Представьте если бы мы смогли управлять всем этим из одного интерфейса, на засоряя телефон или компьютер сотнями приложений, через интерфейс, который доступен как на смартфонах, так и на компьютерах, а также с помощью сторонних сценариев вне зависимости от того, находимся ли мы в одной сети с умным домом или нет. Интерфейс, который был бы легким и простым в использовании? А что если мы будем делать это через мессенджер или чат? В конце концов, разве не легче было бы контролировать наш дом, гаджеты и облачные сервисы через тот же интерфейс, который мы используем для отправки фотографий котиков нашим друзьям, и через бот, полностью адаптированный к нашим потребностям? В этой статье я покажу вам, как настроить команды и процедуры в дополнение к существующим сетапам умного дома. В данном руководстве мы используем два основных инструмента: Telegram: существует много мессенджеров и платформ, но до сих пор попытки многих из них (Facebook Messenger, Whatsapp, Hangouts и т.д.) в предоставлении пригодного для разработчиков API, мягко говоря, были тщетны. Ушли те дни, когда все использовали XMPP или IRC в качестве своего мессенджер. Сегодняшний мир мессенджеров очень разнообразен. Кроме того, поскольку в интересах многих крупных игроков создавать изолированные ИТ экосистемы, наиболее часто используемые решения не поставляются с официально поддерживаемыми API/интерфейсами разработчиков. Мало того: некоторые из них активно отговаривает пользователей от использования чего-либо, кроме официального приложения, для взаимодействия с платформой (почитайте, как Whatsapp может забанить вас). В этом чрезвычайно разнообразном мире, состоящем из нескольких несвязанных островов, Telegram представляет собой радостное исключение: их официальный bot API хорошо задокументирован и поддерживается, и для тех, кто знает немного программирования, очень легок в интеграции. Platypush: Platypush поставляется с плагином для Telegram и бэкэндом. Так что давайте начнем и создадим первый бот для автоматизации управления домом! Создание Telegram-бота Начните беседу с Botfather. Наберите /start, а затем /newbot для создания нового бота. Задайте боту ник и имя. Вы получите ссылку, чтобы начать беседу с вашим ботом и уникальный API-ключ. Сохраните его где-нибудь, так как он нам понадобится для конфигурации плагина platypush. Конфигурация бота в platypush 1. Установите platypush с основными расширения и интеграцией с Telegram: pip install 'platypush[http,db,telegram]' apt-get install redis-server [sudo] systemctl start redis [sudo] systemctl enable redis 2. Изучите platypush хотя бы немного, если еще не сделали этого. Определите несколько вещей, которыми вы хотите управлять/автоматизировать - источники света, музыку, датчики, базу данных, роботы - и установите/настройте соответствующие расширения. В этой статье мы рассмотрим, как настроить наш новый бот для управления освещением Philips Hue, воспроизведением музыки и потоковой передачей PiCamera. 3. Добавьте настройки Telegram в файл ~/.config/platypush/config.yaml: chat.telegram: api_token: <your bot token> backend.chat.telegram: enabled: true Бэкэнд-система позволяет получать события (например, новые сообщения, вложения, запросы и т.д.) и создавать на них пользовательские "хуки". Плагин позволяет писать вам чаты, программно отправлять сообщения и вложения, администрировать каналы и т.д. Допустим, мы хотим, чтобы бот реализовал следующие команды: /start Приветствие пользователя /help Показать доступные команды /lights_on Включить свет /lights_off Выключить свет /music_play Включить музыку /music_pause Приостановить музыку /music_next Перейти на следующую песню /music_prev Перейти на предыдущую песню /start_streaming Начать удаленное вещание PiCamera /stop_streaming Остановить удалённое вещание PiCamera Всё что мы должны сделать это создать действие в конфигурационном файле platypush config.yaml. В этом контексте вы должны: Установить и настроить плагины Philips Hue, mopidy и PiCamera: pip install 'platypush[hue,mpd,picamera]' # Hue lights configuration light.hue: # Hue bridge IP address bridge: 192.168.1.10 # Default groups to control groups: - Living Room # MPD/Mopidy configuration music.mpd: host: localhost port: 6600 # PiCamera configuration camera.pi: vflip: False hflip: False Чтобы не засорять файл config.yaml, создайте новый файл с названием ~/.config/platypush/include/bot.yaml: # /start command handler event.hook.OnTelegramStartCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: start then: - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Welcome! Type /help to see the available commands" # /help command handler event.hook.OnTelegramHelpCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: help then: - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Available commands: - /lights_on - /lights_off - /music_play [resource] - /music_pause - /music_prev - /music_next - /start_streaming - /stop_streaming " # /lights_on command handler event.hook.OnTelegramLightsOnCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: lights_on then: - action: light.hue.on - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Lights turned on" # /lights_off command handler event.hook.OnTelegramLightsOffCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: lights_off then: - action: light.hue.off - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Lights turned off" # /music_play command handler event.hook.OnTelegramMusicPlayCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_play then: - if ${cmdargs}: - action: music.mpd.play args: resource: cmdargs[0] - else: - action: music.mpd.play - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Music playing" # /music_pause command handler event.hook.OnTelegramMusicPauseCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_pause then: - action: music.mpd.pause - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Music paused" # /music_prev command handler event.hook.OnTelegramMusicPrevCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_prev then: - action: music.mpd.previous - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Playing previous track" # /music_next command handler event.hook.OnTelegramMusicNextCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: music_next then: - action: music.mpd.next - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "Playing next track" # /start_streaming command handler event.hook.OnTelegramCameraStartStreamingCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: start_streaming then: - action: camera.pi.start_streaming args: listen_port: 2222 - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "PiCamera streaming started. Check it out with vlc tcp/h264://hostname:2222" # /stop_streaming command handler event.hook.OnTelegramCameraStopStreamingCmd: if: type: platypush.message.event.chat.telegram.CommandMessageEvent command: stop_streaming then: - action: camera.pi.stop_streaming - action: chat.telegram.send_message args: chat_id: ${chat_id} text: "PiCamera streaming stopped" Подключите файл конфигурации бота в config.yaml: include: -include/bot.yaml Запустите platypush: # Manual start platypush # Service start systemctl start platypush.service Создайте беседу в вашим ботом перейдя по ссылке, выданной BotFather и начните говорить ему, что делать: Сейчас бот доступен любому мы этого явно не хотим. Представьте, что кто-то включит на полную громкость System Of A Down- Jet Pilot вам ночью. Так себе пробуждение. Можно настроить бэкэнд Telegram так, чтобы он принимал сообщения только из определенного списка идентификаторов чатов (в Telegram chat_id используется как для частных пользователей, так и для групп). Отправьте сообщение боту и откройте журналы platypush или проверьте его стандартные выходные данные. На экране появятся следующие сообщения: 2020-01-03 19:09:32,701| INFO|platypush|Received event: {"type": "event", "target": "turing", "origin": "turing", "id": "***", "args": {"type": "platypush.message.event.chat.telegram.CommandMessageEvent", "chat_id": your_chat_id, "message": {"text": "/help", ...}, "user": {"user_id": your_user_id, "username": "****", "is_bot": false, "link": "https://t.me/you", "language_code": "en", "first_name": "***", "last_name": "***"}, "command": "help", "cmdargs": []}} Скопируйте chat_id своего пользователя и вставьте в бак-энд файл: backend.chat.telegram: authorized_chat_ids: - your_user_id Теперь бот ответит ошибкой, если вы попытаетесь отправить сообщение от неавторизованного пользователя. Вы также можете пригласить своего бота в групповой чат и позволить вашим друзьям или членам семьи регулировать свет в вашем доме, если вы захотите! Что дальше? В этой статье мы изучили только одну специфическую особенность интеграции Telegram - способность бота реагировать на события в команде, запускать действия и отвечать текстовыми сообщениями. Как видно из списка поддерживаемых событий Telegram, можно сделать больше, например: Создавать обработчики, когда кто-то делится контактной информацией - когда-нибудь думали разрешить боту автоматически хранить новые контакты, отправленные вам вашими друзьями в чате? Создавайте обработчики при совместном использовании документов, видео или изображения - например, автоматически загружайте все файлы мультимедиа, отправленные в чат, на жесткий диск или удаленную папку Dropbox. Выполнять действия с текстовыми сообщениями вместо команд - можно использовать TextNewsEvent, например, если вы предпочитаете вводить "включить свет" вместо "/lights_on." Сделайте снимок на камеру наблюдения и отправьте ее себе командой send_photo. Можно также развернуть несколько ботов, например, для каждого устройства, чтобы можно было запускать действия на конкретном устройстве из связанного чата или вместо этого использовать один бот в качестве точки входа и доставлять сообщения другим устройствам через MQTT, Kafka или HTTP API.
img
Всем привет! Сегодня статье мы рассмотрим, какие команды интерфейса командной строки (Command Line Interface) могут быть полезны при траблшутинге Cisco Unified Communications Manager (CUCM) . Получить доступ к интерфейсу командной строки можно либо подключившись по SSH к серверу CUCM, либо использовать доступ напрямую с сервера, на котором установлена система. Логин и пароль для входа указываются при первой установке системы. В CLI можно использовать знак вопроса “?” после введенной команды, для просмотра доступных опций. Используемых команд, безусловно, гораздо больше, и мы решили собрать основные, которые могут быть полезны при поиске неисправностей. Если вы знаете, какие команды могли бы быть полезны, но их нет в списке, то можете поделиться ими в комментариях. Команды utils system restart перезагрузка сервера utils system shutdown выключение сервера show status показывает общий статус системы show hardware показывает железо сервера show logins показывает сессии show environment temperatures показывает температуру сервера (неактуально в случае использования VMware) show environment fans показывает статус вентиляторов show memory modules показывает установленные модули памяти show network [eth0] показывает статус интерфейса (eth0) show network ip_conntrack показывает число открытых соединений show network ipprefs public показывает открытые и доступные сетевые порты show process list показывает список запущенных процессов show tech system all показывает всю системную информацию show tech network routes показывает таблицу маршрутизации show tech database показывает информацию о базе данных show tech version показывает версию установленных компонентов show network cluster показывает список нод (node) в кластере utils network ping [IP address] утилита ping utils network traceroute [IP address] утилита traceroute utils network arp list показывает arp таблицу utils service list показывает список сервисов и их статус utils firewall ipv4 status показывает статус фаерволов utils network capture [eth0] захватывает пакеты на указанном интерфейсе utils ntp status показывает статус протокола NTP file view install system-history.log просмотр файла с системными логами
img
Еще в 2000 году до нашей эры, когда алгоритмы только были изобретены, их создатели, наверное, даже представить не могли, что их будут использовать для управления большими металлическими самоходными средствами передвижения, которые сейчас для нас больше известны как «автомобили». Но сейчас, когда мы с вами живем в 21 веке, мы используем алгоритмы для управления многими аспектами нашей жизни – от искусственного интеллекта до криптовалюты и входа в обычные онлайн-сервисы.  Так что, если вы планируете искать работу, связанную с алгоритмами, то вы открываете для себя очень актуальную область с большим количеством возможностей. А теперь пришло время подготовиться к тому, чтобы произвести впечатление! Мы подготовили для вас 15 вопросов по алгоритмам, которые помогут вам подготовиться к собеседованию.  Читайте дальше, чтобы узнать о самых распространенных вопросах об алгоритмах, а также ответы на них и о том, как усовершенствовать свои навыки, чтобы подготовиться к собеседованию. Что такое алгоритм? Несмотря на то, что этот вопрос – элементарный, если вам задают его, важно ответить на него уверенно и без лишних слов. Алгоритм представляет собой последовательность вычислительных шагов, которые принимают входные данные или несколько входных данных и преобразуют их в выходные данные. Алгоритм можно написать в разных формах, например, с помощью обычного русского языка или используя псевдокод.  После того, как вы дадите краткий ответ, как этот, вы можете углубиться в эту тему, если захотите. Лучше сделать это на каком-то примере.  Что такое быстрая сортировка? Этот вопрос нужен для того, чтобы проверить, способны ли вы применять алгоритмы хотя бы на самом базовом уровне. Алгоритм быстрой сортировки подходит для быстрой сортировки запросов или списков. В его основе лежит так называемый метод «разделяй и властвуй», то есть он занимается перестановкой групп, каждая из которых является одной из трех частей списка элементов: Опорный элемент, выбранный из массива Элементы меньше опорного размещаются слева от него для формирования левого подмассива Элементы больше опорного размещаются справа от него для формирования правого подмассива В подмассивах также выбирается опорный элемент, а остальные значения сортируются относительного него аналогично. Процесс повторяется до тех пор, пока в подмассивах не останется только один элемент.  Временная сложность алгоритма: Наилучший случай:  On log   n   . Значение опорного элемента близко к среднему значению всех сортируемых элементов. Наихудший случай:  On2 . Значение опорного элемента – это либо наибольшее, либо наименьшее значение всех сортируемых элементов.  Средний случай:  On log   n   .    В чем заключается роль опорного элемента? Это еще один вопрос из темы поверхностного погружения в основы алгоритмов. Вы можете ответить, сказав, что опорный элемент – это элемент, который алгоритм выбирает из массива или матрицы, с которыми мы работаем, и который будет служить первым элементом для вычислений.  Есть множество способов, как выбрать опорный элемент. Для массива опорным элементом может служить первый или последний элемент, выбранный из середины или случайным образом. В зависимости от алгоритма способ выбора опорного элемента может влиять на качество результата.  Что понимается под временной сложностью алгоритма? Это еще одно базовое понятие, связанное с алгоритмами, и поэтому ваш ответ должен начинаться с краткого определения. Временная сложность алгоритма – это количество итераций, которые необходимы для его завершения, в зависимости от размера входных данных.  Объясните различные обозначения, которые используют, когда речь идет о временной сложности Отвечая на этот и любые последующие вопросы, вы демонстрируете свои знания того, как работают алгоритмы, а также что вы знаете, как их можно изменить, чтобы достичь желаемого результата.  Обозначения могут помочь оценить эффективность алгоритма. Вот обозначения, которые вы используете для временной сложности: Большая омега: это означает «больше или столько же» итераций. Это точная нижняя граница роста времени работы алгоритма. По сути это наилучший случай временной сложности.  Большое О: это означает «меньше или столько же» итераций. Это точная верхняя граница роста времени работы алгоритма. По сути это наихудший случай временной сложности.  Большая тета: это означает «столько же» итераций. Это одновременно и точная верхняя граница, и точная нижняя граница роста времени работы алгоритма.  Маленькое О: это означает «меньше чем» итераций. Это верхняя граница, которая не является асимптотически точной.  Маленькая омега: это означает «больше чем» итераций. Это нижняя граница, которая не является асимптотически точной.    Как работает бинарный поиск? Бинарный поиск используется для поиска элемента в уже отсортированном массиве. Первым делом мы смотрим на элемент в середине массива. Если это и есть искомый элемент, то поиск завершен. В противном случае, если искомый элемент больше того, что мы выбрали, процедура поиска повторяется в верхней половине массива (то есть среди значений, которые больше выбранного нами). Если же он меньше, то процедура поиска выполняется в нижней половине массива (то есть среди значений, которые меньше выбранного нами).  Временная сложность алгоритма: Наилучший случай:  O1 . Искомое значение - это первый выбранный средний элементом.  Наихудший случай:  Olog   n   . Мы нашли искомое значение на одном из последних шагов, или оно вовсе отсутствует.  Средний случай:  Olog   n   .    Что подразумевается под сортировкой кучей (пирамидальной сортировкой)? Сортировка кучей, или пирамидальная сортировка, подразумевает сравнение элементов с помощью алгоритма сортировки. Входные данные делятся на отсортированную и неотсортированную части. То, что перемещается в отсортированную часть, зависит от того, работаете вы с невозрастающей или возрастающей кучей. Невозрастающая куча в корне имеет элемент с максимальным значением, а возрастающая – с минимальным. Когда вы используете пирамидальную сортировку на невозрастающей куче, то неотсортированная часть уменьшается, так как самый большой элемент перемещается в отсортированную часть. В случае с возрастающей кучей в отсортированную часть перемещается элемент с наименьшим значением.  В невозрастающей куче значение родительского узла всегда больше, чем значения дочерних узлов. Для того, чтобы отсортировать элементы невозрастающей кучи с помощью алгоритма пирамидальной сортировки, необходимо выполнить следующие шаги: Заменить последний элемент кучи корневым узлом Убрать последний элемент, который мы только что поместили, из кучи Преобразовать теперь уже двоичную кучу обратно в невозрастающую Повторять процесс, пока не закончатся элементы.  Временная сложность алгоритма: Наилучший случай:  O (n log   n   ) . Наихудший случай:  O (n log   n   ) . Средний случай:  O (n log   n   ) .   Для чего используется список пропусков? Список пропусков используется для структурирования данных. В его основе лежат связные списки. А для того, чтобы создавать уровни новых ссылок в исходном связном списке, он использует вероятности. Можно провести аналогию с сетью автобусных маршрутов. Есть автобусы, которые останавливаются на каждой остановке, а есть такие, которые останавливаются только на определенных. У последних остановок меньше, чем у обычных автобусов. Создание новых уровней в списке пропусков можно рассматривать как вот такие ускоренные маршруты с меньшим количеством остановок. Если вы можете получать более эффективный доступ к наиболее часто используемым узлам, то такие задачи, как вставки или удаление узлов, станут намного проще и быстрее. И это будет более эффективно, чем применение каких-то других алгоритмов.  Какие криптографические алгоритмы являются наиболее распространенными? Этот вопрос может показаться чересчур сложным, потому что вам кажется, что вам нужно запомнить огромное количество информации, но если вы вдруг пропустите пару алгоритмов, то никто не будет вас за это наказывать. И к тому же существует огромное количество алгоритмов. Вот некоторые из них: IDEA Blowfish CAST LOKI DES GOST 3-way Что такое алгоритм хеширования и как он используется? Вам захочется устроиться поудобнее, отвечая на этот вопрос, ведь хеш-алгоритмы сейчас очень популярны, так как используются в криптографии. Алгоритм хеширования ссылается на хеш-функцию, которая берет строку и преобразует ее в строку фиксированной длины, и не важно, какой длины она была изначально. Вы можете использовать алгоритм хеширования для самых разных целей – от криптовалюты до паролей и ряда других инструментов проверки.  Какую роль играют алгоритмы в криптовалюте? Если вы устраиваетесь на работу, связанную с криптовалютой, то этот вопрос может оказаться для вас не таким простым, особенно если вы умудрились заблудиться в трех соснах, отвечая на него. Один из способов, как ответить на этот вопрос – упомянуть, насколько сильно криптовалюты на основе блокчейна зависят от криптографии. Блоки или записи, составляющие блокчейн, защищены с помощью криптографических методов, таких как хеш-алгоритмы. Также есть алгоритмы, которые используют для генерации открытых и закрытых ключей и для «майнинга» криптовалют. Как работает алгоритм шифрования? Такого рода вопросы на собеседовании могут дать вам некоторую подсказку о том, для какой работы вам могут нанять. Алгоритм шифрования преобразует обычный текст в код, или зашифрованный текст. Для этого алгоритм использует ключи. Чем длиннее ключи, тем больше есть возможностей для создания зашифрованного текста.  Что такое алгоритм поразрядной сортировки? Поразрядная сортировка может пригодиться при работе с базами данных, или если ваша должность предусматривает то, что вы должны быть готовы ответить на этот вопрос. Поразрядная сортировка – это алгоритм сортировки, который не сравнивает элементы, а распределяет их по «корзинам», основываясь на разрядах. Если есть элементы с более чем одной значащей цифрой, то распределение по «корзинам» повторяется для каждой цифры.  Что такое рекурсивный алгоритм? Рекурсивный алгоритм опирается на способ решения, при котором сложная задача разбивается на более мелкие подзадачи. Это делается до тех пор, пока не получится достаточно простая задача, которую можно было бы легко решить. Одним из примеров алгоритма, который можно реализовать рекурсивно, является бинарный поиск.  Какие три закона должны выполняться для рекурсивных алгоритмов? Такие вопросы на собеседовании могут быть продолжением вопроса «Что такое рекурсивный алгоритм?» Рекурсивный алгоритм должен следовать следующим законам: У него должен быть нерекурсивный вариант реализации. Он должен вызывать сам себя. Его можно изменить и вернуть к нерекурсивному варианту.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59