• Расширение в zabbix, которое находит и блокирует уволенных коллег

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

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

    Зачем заводить пользователей в мониторинге:

    1. для распределения прав доступа к ИС на просмотр через веб
    2. для наделение прав на создание / изменения шаблонов и их линковку к хостам
    3. для добавление коллег в нужные группы рассылок, для получения уведомлений только по нужным для того или иного специалиста системам

    Авторизация в мониторинге прикручена к ldap AD предприятия.

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

    Но при увольнении учетка в мониторинге остается активной и мониторинг продолжает слать уже уволенному сотруднику уведомления — это неправильно и это можно автоматизировать

    Полгода как реализованный механизм работает у нас, запускаясь по крону несколько раз в судки, зеркалирует состояние учетных записей в мониторинге на основе их состояние в AD
    Читать дальше →
  • Как подружить Asterisk с потоковым распознаванием от Яндекс SpeechKit через EAGI и Python

    До этого самого времени, я никогда не писал код на Pyhton и Node JS. И поэтому мне было очень сложно скрестить эти системы. И поэтому решил написать об этом пост, так как готовых примеров в Яндексе нет за исключением MRCP про которого было немало нелестных отзывов от пользователей этой системы, но пруфы в данное время предоставить не могу. Я решил не пользоваться этим костылем и изобрести велосипед на костылях сам. Для этого мне в помощь прослужила сама документация с Яндекса и некоторые примеры с StackOverflow.
    Читать дальше →
  • Получение диагоналей в матрице. Алгоритм

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

    image
    Читать дальше →
  • Виртуализация USB устройств в сетях


    В современных реалиях многие компании используют различные электронные цифровые подписи (ЭЦП), ключи лицензирования и другие средства защиты и обеспечения доступа, основанные на USB-носителях. Одновременно с этим, в связи с острой необходимостью обеспечения удаленной работы сотрудников в текущих условиях пандемии, возникает задача обеспечить их доступ к приложениям, использующим эти физические устройства без необходимости передавать USB-носители в руки сотрудникам. Помощь в решении этих вопросов может обеспечить программно-аппаратное решение от компании SEH Technology — USB Dongleserver.

    Читать дальше →
  • Делаем скриншоты с автоматическим перебрасыванием на поиск изображения в Яндекс/Гугл

    Привет, Хабр!

    Я достаточно часто делаю скриншоты, чтобы потом искать их в Яндекс/Гугл, и занятие это несколько утомительное: сначала нужно сделать скриншот, потом сохранить (ну или сразу с сохранением тоже достаточно популярная фича среди всяких утилит для скришотов, угу), потом открыть свою любимую поисковую систему, открыть в ней поиск по картинкам, залить картинку, это уже аж 4-5 шагов, что лично меня напрягало.

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

    Код для формирования ссылки в яндекс (источник):

    base_url = 'https://yandex.ru/images/search'
    params = {'rpt': 'imageview', 'format': 'json', 'request': '{"blocks":[{"block":"b-page_type_search-by-image__link"}]}'}
    
    files = {'upfile': ('blob', open(image_path, 'rb'), 'image/jpeg')}
    r = requests.post(base_url, params=params, files=files)
    query_string = json.loads(r.content)['blocks'][0]['params']['url']
    url = base_url + '?' + query_string

    Код для формирования ссылки в гугл (его я, возможно, тоже откуда-то взял, не помню точно, хотя последняя строчка как бы намекает, что такое только я мог написать, ну может частично откуда-то :D):

    base_url = 'http://www.google.com/searchbyimage/upload'
    files = {'encoded_image': (image_path, open(image_path, 'rb')), 'image_content': ''}
    r = requests.post(base_url, params=params, files=files)
    return r.url.replace("webhp", "search")

    На самом деле я не понимаю, почему в ссылке идет webhp, и его приходится реплейсить, но разбираться было лень, ведь работает же…
    Читать дальше →
  • Небольшая оптимизация работы сайта на WordPress собственными руками

    Предыстория


    В одном из моих проектов понадобилось оптимизировать работу сайта и уменьшить скорость загрузки веб-страницы. На практике, в WordPress под это дело реализованы сотни плагинов: платные, бесплатные, хорошие и не понятно какие.

    Основная проблема большинства из них в функциональной нагрузке. Если вы пытаетесь подключить CDN и только, то вам нет необходимости подключать тяжелый плагин с функциями кеширования\сжатия изображения\honey-pot-а\дополнительным редактором css (и такое бывает).

    Нам не нужен лишний код, верно?

    Попробовав около 10 разных, решил поэкспериментировать: написать мини-плагин оптимизатор.
    Читать дальше →
  • Что такое бренд и почему за него платят

    Для начала, привет


    Тема, о которой я хочу писать сложная, а статьи большие. В инстаграм сложно оперировать такими объемами информации: тему получается освещать поверхностно или в игровой форме. Оригинал статьи был написан на Дзене, но и здесь я надеюсь найти аудиторию, для которой я буду с радостью делать контент. Если при прочтении появятся мнения — буду рад. Любой фидбек поможет сделать мне следующие публикации лучше.

    Бренд в голове


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

    Бренд (или брэнд) – от англ. brand «клеймо» — это набор постоянных и однозначных мнений о компании, создающих особую ценность для потребителя.


    Это самое ёмкое и точное определение, которое я могу дать на сегодняшний день. Получается, что бренд – это картинка, которую мы строим в своей голове, когда слышим о конкретном продукте или компании. Как и клеймо, эта картинка должна сохраняться и не искажаться со временем, то есть имидж бренда нужно поддерживать. Способов есть масса, и процеcc создания и поддержания бренда называется брендинг. О нём мы обязательно поговорим, но не сегодня.
    Давай разберем по порядку: бренд — это набор…
    Читать дальше →
  • Деплой Python веб-приложения на Heroku с Selenium ChromeDriver

    Хочу поделиться решением проблемы с настройкой Selenium ChromeDriver при деплое Python веб-приложения на Heroku, на которое у меня ушло несколько часов.
    Для веб-скрейпинга я сделала приложение на Flask, которое отлично работало на локальном сервере, однако при деплое на Heroku все сломалось с ошибкой:
    Читать дальше →
  • Почтовый сервер

    Настройка почтового сервера
    В наше время этим никого не удивишь, но возможно кому-то статья будет полезна
    К почтовой системе предъявлялись следующие требования:


    • почта на linux, пользователи авторизуются в существующий AD
    • доступ прием и отправка писем с телефона и с ПК, с интернета
    • файловая система где размещена почтовая база, логи и конфиги должны быть размещены на шифрованном разделе.

    Начнем:
    ось: Ubuntu 20.04.1 LTS
    Шифрация файловой системы /data — Veracrypt
    MTA: Postfix + postscreen + postgrey + opendkim
    IMAP: Dovecot
    SSL сертификаты: certbot
    Доступ web: Nginx + Roundcube
    Ограничения от китайцев и других "друзей" жаждущих ssh: GeoIP iptables
    За перебором паролей присматривает: fail2ban


    С интернета с внешнего IP адреса пробрасываются несколько TCP портов:
    TCP 80 nginx для обеспечения работы certbot
    TCP 443 nginx для roundcube и web доступа к почте
    TCP 465 postfix для отправки почты с почтового агента на телефоне
    TCP 993 dovecot для доступа почтового агента на телефоне


    Информации много, свел все в разделы, в окончании раздела эта штука [END] подскажет что читаемый раздел закончился.

    Читать дальше →
  • Как хороши, как свежи были [розы] SSD-шки



    Честное слово, я не хотел писать этот пост!

    Просто прочитал неувядаемые строки И.Северянина в Ленте вот эту статью
    про дивный новый мир SSD-накопителей — как надо и как не надо ими пользоваться, и будет вам счастье. И отзывы читателей — почему-то, исключительно положительные, а если и с долей критики, то обязательно конструктивной.

    Какая замечательная технология, подумал я! Срочно надо к ней приобща…

    Читать дальше →
  • Автоматизация установки софта на чистую Windows

    Наверное вы задавались вопросом, а можно ли упростить себе переустановку системы.
    Конечно вы подразумеваете что переустановка Windows включает установку драйверов и нужного ПО. Office, Браузер и так далее.
    Читать дальше →
  • Решение проблемы сложения и вычитания чисел с плавающей точкой

    Доброго времени суток. Как Говориться, краткость — сестра таланта, поэтому статья будет четкой и максимально информативной.


    Введение


    Когда начал изучать Python, я наткнулся на очень любопытную, раннюю неизвестную мне тему 'Как устроены вещественные числа'. В ней говорилось про мантиссу, экспоненту и прочие детали вроде отведение битов на хранение числа.



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

    Читать дальше →
  • Привет, я Василиса

    image
    – Костян, зацени!
    Антон бесцеремонно сунул другу под нос свой смартфон. Наверху экрана электрической радугой переливалась надпись: «Мысли иначе», внизу было поле ввода, а между ними – какой-то текст, а точнее набор бессвязных фраз.
    – Что это?
    – Новая прилка – просто огонь: сочиняешь какую-нибудь идею, отправляешь, и тебе на телефон падает бабло. Круто, да? – Антон тапнул иконку золотой монетки в левом верхнем углу, и на экране высветилась история поступлений: +5 руб., +100 руб., +30 руб., +5 руб. … список был таким длинным, что Костяну надоело скроллить.
    – Развод? – авторитетно хмыкнул он.
    – Не, всё чётко. Даже карту вводить не надо. Просто скачиваешь, регишься по номеру телефона и майнишь. Профит!
    Чисто из любопытства Костян отобрал у Антона телефон, ввёл «разогнать Госдуму» и отправил. Спустя секунду приложение выклюнуло красное окошко: «0 руб. Баян!».
    Читать дальше →
  • Первый взгляд на Pipelines.NET

    Pipelines.NET это C# библиотека, цель которой сделать код читабельнее, проще для тестирования и следовать принципам SOLID. Любой логический процесс может быть разделён на шаги, и эта библиотека даёт пользователю инструменты для разделения логики на шаги, которые в последующем могут быть объединены.

    Читать дальше →
  • Чем отличаются статические функции/переменные от функций/переменных на классе?

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

    Читать дальше →
  • Радиационное загрязнение в Хибинах после ядерных взрывов


    Во времена СССР в Хибинах, в недрах горы Куэльпорр, проводились мирные ядерные взрывы. Взрыв «Днепр 1» — в 1972 году и два взрыва «Днепр 2» — в 1984 году. Целью этих взрывов являлось дробления апатитовой руды для облегчения ее добычи.


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

    Читать дальше →
  • Микро-мануал по Glade

    Glade — это приложение, позволяющее создавать GUI на Gtk+ не кодом, самостоятельно выделяя память для того или иного виджета, инициализируя его и помещая в контейнер, а при помощи визуального конструктора.

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

    В 2017 замечательный человек по имени Станислав Куделко собрал информацию о загрузке голосовых сообщений ВКонтакте, а Пётр Самохин написал об этом статью на хабре, но мне показалось, что она недостаточно понятная, поэтому сейчас я опишу весь процесс от подготовки файла к загрузке до отправки голосового сообщения в ЛС пользователю с Python.
    Читать дальше →
  • Шаблоны проектирования в Go (Фабрика)

    Привет, Хабр! Представляю вашему вниманию перевод статьи «Design Patterns: Factory Pattern» автора Shubham Zanwar.

    Шаблон проектирование Фабрика используется как создающий шаблон, когда пользователь может выбирать между несколькими опциями. Приведу пример.

    Магазин домашних животных


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

    Взгляд владельца


    Предположим, что вы владелец магазина с собаками (для упрощения: раздаете щенков). С тех пор как вы в мире IT, каждая собака это экземпляр класса Dog. Когда приходит посетитель, вы просто создаете новый экземпляр Dog и отдаете щенка.

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

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

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

    type Pet interface {
        GetName() string
        GetAge() int
        GetSound() string
    }
    Читать дальше →