Pull to refresh
19
0
Vladimir @mvs

Creator, founder, developer

Send message

GlitchTip вместо Sentry. Как мы бесплатно настроили мониторинг ошибок

Reading time4 min
Views20K

Привет, хабр! Меня зовут Алексей и я системный инженер в компании Constanta, мы с командой занимаемся практиками DevOps, развиваем процессы ci/cd и мониторинга.

Представьте, что у вас есть 10 серверов и 20 микросервисов на них, а релизы проходят каждую неделю. Вы уже мониторите жизнеспособность сервисов и докера с помощью zabbix или prometheus, а с помощью ELK или grailog собираете логи. Кажется, что хорошо, но в таком потоке релизов, хотфиксов и строчек кода нужно быстро ориентироваться в ошибках внутри приложения, которые не влияют на жизнеспособность сервиса, но мешают его правильной работе.

Стоп! Есть же Sentry, скажете вы. И будете правы. Он удобен, хорошо описан, есть документация, комьюнити и поддержка. Однако, есть одно "но".

Читать далее

API platform по быстрому

Reading time14 min
Views14K

API platform это полнофункциональный REST API, который вы получите за считанные минуты. Вот неполный список фич:

- Генерация CRUD

- Поддержка GraphQL

- Машиночитаемая документация API в форматах Hydra и Swagger/Open API, гененрится из метаданных PHPDoc, Serializer, Validator и Doctrine ORM / MongoDB ODM

- Хорошая удобочитаемая документация, созданная с использованием пользовательского интерфейса Swagger (включая песочницу) и / или ReDoc

- Пагинация

- Куча фильтров

- Проверка с использованием компонента Symfony Validator (с поддержкой групп)

- Расширенные правила аутентификации и авторизации

- Расширенная сериализация благодаря компоненту Symfony Serializer (поддержка групп, встраивание отношений, максимальная глубина...)

- Поддержка JWT и OAuth- Файлы и \DateTime, сериализация и десериализация

- Все полностью настраивается благодаря мощной системе событий и сильному ООП.

Читать далее

Как выбрать NewSQL-СУБД для вашей компании

Reading time7 min
Views8.1K

Привет! Меня зовут Пётр, я менеджер по отказоустойчивости в QIWI. В этом посте мы поговорим про выбор новых классов продуктов. Как-то раз мы с одним разработчиком из другой компании стали обсуждать, почему бы не выбрать для работы какую-то распределенную СУБД, поддерживающую SQL? Из этой дискуссии родился мой доклад для нашей QIWI Server Party. Представляю вам его текстовую версию.

Читать далее

Flamingo, Go ahead! или Как реализовать DDD в Go?

Reading time7 min
Views5.3K

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

При проектировании нового программного решения была поставлена задача выбрать язык и фреймворк. По результатам проведенного исследования был выбран язык Go, как обеспечивающий высокую производительность вместе со скоростью разработки, а также фреймворк Flamingo для реализации принципов Domain Driven Design. Всем, кому интересно узнать, что же за птица такая Flamingo, приглашаю под кат.

Концепция предметно-ориентированного проектирования, она же DDD (Domain Driven Design), описанная Эриком Эвансом, активно используется при построении информационных систем для предприятий. Не стоит пересказывать основные принципы DDD, благо, помимо книги самого Эванса, они описаны в большом количестве статей. Нам важно другое. Эти принципы гораздо проще реализовать в своей информационной системе, если они поддерживаются фреймворком.

Для .Net, например, есть ASP.NET Boilerplate (https://aspnetboilerplate.com/), полностью реализующая все компоненты DDD – Entity, Value, Repository, Domain Service, Unit of Work и еще много всего. Но мы для одной из своих внутренних информационных систем используем Go. 

Мы решили использовать фреймворк Flamingo, распространяемый под лицензией MIT. Он разработан немецкой компанией AOE GmbH в 2018 году и к настоящему моменту “дорос” до версии 3.4 и до 331 звезды на Github. Flamingo используется в информационных системах аэропортов Окланда, Франкфурта и Хитроу, а также в T-Mobile.

Читать далее

У вас нет причин использовать alpine для python-проектов

Reading time9 min
Views15K

По мотивам моего доклада на PyCon "Контейнеризация Python без боли". На своей практике я постоянно сталкиваюсь со спорами какой базовый образ лучше использовать для проектов: alpine или debian. Аргументы есть и у той, и у другой стороны, но мне это настолько надоело, что я решил сам разобраться и наконец-то поставить точку. В конце концов "В наше время верить нельзя никому, даже себе. Но мне - можно." (с)

Читать далее

Честные модули внутри PHP: теперь они существуют

Reading time15 min
Views9.8K

Низкий порог входа и строгость языка программирования — вещи обычно несовместимые. Потому что ты либо, как Rust, бьёшь по рукам borrow checker’ом — либо, как PHP, позволяешь не задумываться о типах и быстро прототипировать. 

На самом деле, если писать код грамотно, это становится неважным и язык перестаёт иметь значение. Архитектура важнее языка, и хороший код на PHP ничем не отличается от аналогичного кода на любом другом ООП-языке. Другое дело, что возможность «любой домохозяйке» писать на PHP сопровождается и риском наворотить полное неподдерживаемое безобразие. Поэтому нам нужны тайпхинты, линтеры, статические анализаторы и подобные инструменты. 

Но в PHP есть и ещё один изъян: в нём любой класс, функция или константа — глобальны. Можно создать класс из любого места в коде, и нет способа скрыть его или сделать деталью реализации где-то в отдельной папке. Иными словами, в PHP нет того, что в других языках называется модулями.

Наша новая open-source разработка называется Modulite и внедряет в PHP модули. Это сквозная технология: мы внедряемся в IDE, в PHPStan, в KPHP, в CI, в Composer — и делаем так, будто бы модули нативно есть в языке PHP.

Читать далее

Как мы интегрировали и настроили для работы Conventional Commits в PHPStorm

Reading time3 min
Views3.5K

Поднялся вопрос стандартизации коммитов в команде. До этого были такие правила, мы пишем номер задачи и через тире описание того, что было сделано кратко. Номер задачи берется из номера issue. Например: #1 - реализован функционал сборки прода. Но, это надоело и стало как-то неудобно, когда у нас есть четкое деление задач на фиксы, фичи и так далее.

Нашли Conventional Commits и попробовали его на тестовом репозитории, понравилось. Решили внедрить это в команду, но столкнулись с тем, что люди не всегда делают коммиты правильно, а значит нужна какая-то валидация.

В нашей команде принято по максимуму IDE и его возможности. То есть, коммиты мы делаем не через консоль, а через встроенные утилиты. Поэтому, сразу пошли искать плагины, которые есть в PHPStorm и нашли вот эти 2 важных плагина: Conventional Commit и Git Commit Template. После их установки видим новые кнопки в окне коммита:

Читать далее

SimpleX – первый мессенджер без идентификаторов пользователей

Reading time6 min
Views48K

Сегодня рассказываем про анонимный мессенджер SimpleX, который написан на Haskell и позволяет, в том числе, использовать сеть Tor для общения.  

​​SimpleX – не только один из немногих мессенджеров, который не собирает данные пользователей, но и единственный на сегодняшний день мессенджер, который не использует идентификаторы для профилей пользователей, даже случайные числа. Также он полностью open source, и каждый может принять участие в его разработке.

Читать далее

Создаем аватарки с помощью нейросети Stable Diffusion и DreamBooth

Reading time6 min
Views45K

"Портрет, сделанный нейросетью" - все чаще читаем в новостной ленте, и каждый хотел бы сделать себе подобный, но удобные сервисы, просящие монету, или желание разбираться самому, отталкивают. Не нужно ничего скачивать. Час времени и каждый сможет сделать себе аватарку!

Читать далее

Централизация логирования микросервисов с Graylog

Reading time6 min
Views36K

Трассировка и анализ ошибок в микросервисной архитектуре без средств централизации логирования обычно причиняет неудобства, поскольку для понимания “что и на каком микросервисе умерло” приходится обходить микросервисы по очереди, сверять и сопоставлять данные в логах. В данной статье рассматривается централизация логирования с помощью Graylog, с примерами кода на Python.

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

Читать далее

DBA: хранение списков — таблица, массив, строка?

Reading time4 min
Views17K

Достаточно часто при проектировании схемы БД возникает задача сохранить по основной сущности некоторый набор простых второстепенных данных.

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

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

Давайте посмотрим, какие варианты хранения таких данных мы можем использовать в PostgreSQL, и какой из них окажется в разы более эффективным.

Читать далее

Как тестировать методы REST API

Reading time27 min
Views137K

Когда ручного тестировщика впервые просишь проверить метод REST API, того охватывает паника: «Как это делать? Я вообще почти ничего не знаю про API. Что делать? Как это тестировать?»

Спокойно. Без паники =) Я уже рассказывала на простом языке, что такое API. А сегодня я расскажу о том, как его тестировать. На самом деле почти также, как GUI: в первую очередь это тест-дизайн и придумывание проверок, а потом уже всякие API-штучки. Но и про них не стоит забывать.

Я дам вам чек-лист, к которому вы сможете обращаться потом — «так, это проверил, и это, и это. А вот это забыл, пойду посмотрю!». А потом мы обсудим каждый пункт — зачем это проверять и как.

После теории будет практика! Для неё возьмем метод doRegister системы Users — он находится в открытом доступе, можете дергать по ходу чтения и проверять =) 

Читать далее

Как сделать питч-дек и запитчить всё на свете

Reading time12 min
Views20K

В интернете есть десятки ультимативных шаблонов, как сделать питч-дек. Каждый фаундер, сделавший хотя бы один питч-дек, также готов выдать пачку рекомендаций. Каждый фонд имеет свой темплейт. А ответа на вопрос «как сделать питч-дек?» по-прежнему нет. 

В этом материале разбираемся:

• из чего состоит питч-дек
 структура питч-дека на разных стадиях
• важен ли питч (или питч-дек запитчит себя сам)
• нужен ли сторителлинг
• и как же его все-таки сделать?

Читать далее

Как с нуля разработать систему аналитики для телеграм бота?

Reading time5 min
Views5.2K

Всем привет! Мы команда Dev’s Battle. В этом посте расскажем о том, как мы создавали для нашего продукта (MMO RPG игра в телеграм) собственную систему аналитики

Читать далее

Оптимизация Dockerfile для уменьшения размера и быстрой сборки образов

Reading time6 min
Views19K

У каждого образа Docker есть свой размер, который он занимает на жёстком диске. Порой бывает так, что контейнер с запущенным приложением на языке программирования Go, который содержит в себе всего лишь одну строчку с выводом фразы «Hello, world!» может занимать сотни Мб, в то время как существуют образы содержащие легковесные ОС весом всего лишь 5 Мб (alpine).

В этой статье будут подробно рассмотрены способы оптимизации файла Dockerfile с целью уменьшения размера готового образа и ускорения его сборки.

Читать далее

JSON:API 一 это не JSON API

Reading time6 min
Views3.8K

Это третий доклад с прошедшей Ruby Russia. В нём Александр Меркулов, team lead UCHI.ru рассказывает, как его команда решила поэкспериментировать с JSON:API, и что из этого вышло.

Читать далее

Луковичная архитектура в компоновке backend-приложения и куда в итоге класть маперы

Reading time6 min
Views31K

Как скомпоновать приложение? Какие в нём должны быть слои? Как назвать пакеты? Где расположить DTO, маперы, реализации интерфейсов? И нужны ли вообще интерфейсы? Когда новичок попадает в свою первую компанию, очень часто на эти вопросы у него нет однозначного ответа. Он смотрит код своих коллег, и тут уж как повезёт - если команда сильная, у новичка есть все шансы научиться писать хороший, чистый, код. Если же не повезёт, то новичок будет цепляться за то, что есть, нахватается плохих практик, и по прошествии года-двух он уже сам будет себе авторитетом, которого не так-то просто будет переубедить.

В посте ниже я описываю личный и командный опыт, под который я постарался подвести теоретическую базу, опираясь на "Чистую архитектуру" Роберта Мартина. Да, этот пост - для новичков, хотя, эта тема жива и среди устоявшихся программистов, поскольку споры о компоновке приложения не утихают и среди сениоров.

Зайду я немного издалека и напомню, что такое луковичная архитектура.

Читать далее

Как мы делали приложение а-ля Google Meet с помощью PeerJS, SocketIO и NextJS

Reading time13 min
Views7.7K

Всем привет, дорогие читатели Хабр. Мы долго думали, чтобы нам сделать такое, что от нас не потребует глубоких знаний бэкенда и базы данных, но все же интересное и обучающее, исключительно ориентированное на конечного пользователя. Так мы пришли к тому, что нам бы хотелось изучить более подробно сферу WebRTC и WebSockets и решили сделать что-то похожее на Google Meet c еë основными фичами, которые более подробно описаны чуть ниже. Но давайте все по порядку :) Приготовьтесь, будет много кода!

Читать далее

История стартапа — как мы пивотнули мобильные приложения и бизнес из “бьюти Uber” в “бьюти коворкинги”

Reading time10 min
Views1K

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

Читать далее

Слышали про телеграм-бот для управления Tesla? Мы поговорили с его разработчиком-самоучкой из Чечни

Reading time3 min
Views7.3K

В сентябре российские СМИ и соцсети облетела новость о том, как разработчик из Чечни Рамзан Шахбиев создал телеграм-бота для управления Tesla. Через него можно управлять климат-контролем, медиасистемой и зарядкой, обновлять ПО, открывать багажник, сигналить, моргать фарами, проверять уровень заряда, запас хода и местоположение машины. Разработка хайпанула и вызвала спрос других владельцев электромобиля Маска — Рамзан удивился шумихе и запустил бота для всех. Под катом — наше интервью с программистом-самоучкой о деталях бота и других его проектах. 

Читать далее

Information

Rating
Does not participate
Date of birth
Registered
Activity