Pull to refresh
138
0
Владимир Губарьков @xonix

CTO

Send message

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

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

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

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

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

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

Очередная история о борьбе с выгоранием

Reading time10 min
Views12K

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

Читать далее

Язык конфигураций Dhall как еще один способ написания манифестов для Kubernetes

Reading time9 min
Views6.8K

Dhall — программируемый язык для создания конфигурационных файлов различного назначения. Это Open Source-проект, первый публичный релиз которого состоялся в 2018 году.

Как и всякий новый язык для генерации конфигурационных файлов, Dhall призван решить проблему ограниченной функциональности YAML, JSON, TOML, XML и других форматов конфигурации, но при этом оставаться достаточно простым. Язык распространяется всё шире. В 2020-м году представили его bindings, сделанные специально для Kubernetes.

Читать далее

Квантовая теория. Вселенная из волн вероятностей

Reading time24 min
Views87K
Квантовая теория является одной из самых точных моделей, описывающих окружающий нас мир, а технические решения, разработанные благодаря применению аппарата квантовой механики, прочно вошли в повседневную жизнь современного общества. И тем удивительнее, что понимание даже базовых концепций этой сферы знаний вступает в серьезные противоречия с интуицией, не только людей далеких от науки, но и самих исследователей, подтверждением чему является большое количество различных интерпретаций. В этой статье, предлагаю рассмотреть основные понятия квантовой теории с показавшейся автору наиболее интуитивно-понятной точки зрения, несколько модифицированной теории вероятностей.

image Что будет, если по аналогии с двущелевым опытом, все пространство на пути частицы до экрана будет заполнено щелями?
Читать дальше →

Шесть советов об использовании PostgreSQL в функциональных тестах

Reading time5 min
Views19K

В 2018-м году, работая в Akvelon Inc., я собеседовал одного человека. Перед интервью мне дали на проверку его тестовое задание: небольшое web-приложение по типу записной книжки или todo-списка – React\TypeScript, C# на бэке и MS SQL Server в качестве персистентного хранилища. Приложение было модное: с обилием unit-тестов на mock’ах, упакованное в docker-образ – видно, что человек старался. И у этого решения был всего один недостаток – оно не работало. Совсем. Падало при попытке сохранить новую строку в базу данных.



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


Первая из них – ложная уверенность от модульных тестов. Даже 100% покрытие кода тестами не гарантирует, что в нём нет ошибок.


И вторая – отсутствие функциональных тестов. Если ваше приложение работает с СУБД, то вы обязательно должны покрыть эту часть кода реальными тестами с реальной базой данных. И здесь есть очень важное условие: проверять нужно именно на той версии СУБД, которая работает у вас в production’е. Думаю, очень многие разработчики под Oracle, прогоняющие свои тесты на H2\HSQLDB, сталкивались с ситуацией, когда тесты проходят, а production не работает (boolean, group by и другие чудеса).


Сейчас я работаю в основном с PostgreSQL и мигрирую наши микросервисы с 10-й версии на 11-ую. В процессе миграции (и разработки вообще) я столкнулся с несколькими нюансами, о которых хотелось бы рассказать.

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

Энтузиаст протестировал новые китайские процессоры Loongson 3A5000

Reading time6 min
Views22K

Loongson 3A5000


Энтузиаст состоит в различных чатах в Telegram и как-то недавно наткнулся на канал по процессорам Loongson и ему удалось провести различные тесты данного процессора.

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

Часто забываемые правила безопасности Docker: заметки энтузиаста ИБ

Reading time7 min
Views15K

Последние пару лет я помогаю клиентам нашего облака внедрять DevOps-практики и делюсь своим опытом инженера DevOps. К сожалению, вопросы про информационную безопасность возникают у клиентов зачастую тогда, когда уже что-то произошло. У меня как у любителя киберзащиты постепенно накопилась целая подборка ИБ-кейсов, которыми хочется поделиться. 

В статье собрал правила безопасности контейнеров, о которых часто забывают, но потом снова вспоминают на поучительных примерах.

Читать далее

Генерация изображений с помощью echo/printf в 5 строчках кода без библиотек и заголовков

Reading time2 min
Views9.4K
tl;dr: форматы файлов Netpbm позволяют легко выводить пиксели, используя только текстовый ввод-вывод.



Вот весь генерирующий это изображение скрипт bash без зависимостей:

#!/bin/bash
exec > my_image.ppm    # Все инструкции echo будут писать в этот файл
echo "P3 250 250 255"  # формат, ширина, высота, максимальное значение цвета
for ((y=0; y<250; y++)) {
  for ((x=0; x<250; x++)) {
    echo "$((x^y)) $((x^y)) $((x|y))" # r, g, b
  }
}
Читать дальше →

Автогенерация кода и стейта для существующих ресурсов в Terraform. Terraformer

Reading time6 min
Views5.5K

Terraformer — консольный инструмент для генерации кода и стейта в форматах HCL и json для уже существующей инфраструктуры.

Читать далее

Выгорание — норма? Часть 3. Моя история выгораний и обучения в процессе

Reading time11 min
Views17K

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

Ссылки на предыдущие статьи: 

Выгорание — норма? Часть 1. (Вводная)

Выгорание — норма? Часть 2. Подробно про фазы и «Что делать?»

Напоминаю, что выгорание — это часть реакции на стресс; состояние, в которое приводит продолжительный стресс средней и даже малой интенсивности. Стресс либо незаметный, вытесненный за пределы внимания, либо мы его терпим по какой-то причине, но результат в итоге один: в мозге ломается реакция на раздражители, и система мотивации / поощрения. 

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

Но обо всём по порядку.

Читать далее

Пишем Slack бота для Scrum покера на Go

Reading time30 min
Views5.3K

Здравствуйте! Сегодня мы напишем Slack Scrum покер бота на языке Go. Писать будем по возможности без фреймворков и внешних библиотек, так как наша цель – разобраться с языком программирования Go и проверить, насколько этот язык удобен для разработки подобных проектов. Прошу под кат!

Читать далее

Всё, о чём должен знать разработчик Телеграм-ботов

Reading time15 min
Views705K

Вы вряд ли найдете в интернете что-то про разработку ботов, кроме документаций к библиотекам, историй "как я создал такого-то бота" и туториалов вроде "как создать бота, который будет говорить hello world". При этом многие неочевидные моменты просто нигде не описаны.

Как вообще устроены боты? Как они взаимодействуют с пользователями? Что с их помощью можно реализовать, а что нельзя?

Подробный гайд о том, как работать с ботами — под катом.

Читать далее

Как жили до Kubernetes: сравниваем самый популярный оркестратор с другими решениями

Reading time24 min
Views47K


Kubernetes сейчас называют стандартом для оркестрации контейнеров. Он лежит в основе многих облачных платформ контейнеризации: например, мы давно развиваем наш Kubernetes aaS на платформе Mail.ru Cloud Solutions.


Однако Kubernetes далеко не первый подобный инструмент на рынке: некоторые из систем-предшественников продолжают активно использовать и вроде бы даже успешно.


Почему так происходит, несмотря на то, что Kubernetes, можно сказать, одержал победу в своем классе и мы видим много примеров, когда он приходит на смену другим решениям? Например, не так давно разработчики Mesosphere DC/OS, в основе которой лежал Apache Mesos, прекратили ее развитие и сфокусировались на другой своей платформе — D2iQ Kubernetes (DKP). Думаю, что стоит разобраться, всегда ли хорош Kubernetes, когда оправдано использовать другие оркестраторы и о каких подводных камнях стоит знать.


Я Дмитрий Лазаренко, директор по продуктам облачной платформы Mail.ru Cloud Solutions (MCS). В этой статье расскажу об устройстве ряда оркестраторов-предшественников, сравню их с Kubernetes, посмотрю на его преимущества и недостатки по сравнению с ними.

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

First touch of Kafka

Reading time4 min
Views19K

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

Читать далее

Пол Грэм: Над чем я работал

Reading time41 min
Views9.9K
Февраль 2021

image

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

Первые свои программы я пытался писать на IBM 1401, его у нас в округе использовали для того, что тогда называли «обработкой данных». Это было в 9 классе, так что мне было 13 или 14 лет. Этот 1401 стоял в подвале средней школы, мы с моим другом Ричем Дрейвсом получили разрешение использовать его. Тот подвал был похож на логово бондовского злодея, в котором хранится куча инопланетных устройств – процессоры, жесткие диски, принтер, устройство для чтения карт, и все это под яркими флуоресцентными лампами.

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

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

USB-микрофоны для стримов, творчества и записи подкастов — пять наиболее доступных моделей

Reading time4 min
Views17K

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

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

Читать далее

Как растаращить class-файл

Reading time4 min
Views45K
Обычно при компиляции Java-файла получаются .class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать .class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре. Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Читать дальше →

На фондовом рынке США сформировался пузырь небывалых размеров

Reading time13 min
Views164K

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

Читать далее

Как «Ревущий Котёнок» с Reddit заработал 28.500% на акциях GameStop: объясняю простым языком

Reading time9 min
Views158K

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

Читать далее

Мониторинг и профилирование Spring Boot приложения

Reading time13 min
Views42K

Мониторинг очень важен для современных приложений, современные приложения по своей природе сильно распределены и имеют разные зависимости, такие как база данных, службы, кеширование и многое другое. Поэтому все более важны отслеживание и мониторинг этих служб, чтобы приложение придерживалось условий SLA ( Service Level Agreement). SLA — это соглашение между клиентом и поставщиком услуг, в нем учитываются надежность, скорость отклика и другие показатели уровня обслуживания.

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

Читать далее
1
23 ...

Information

Rating
Does not participate
Date of birth
Registered
Activity