Бодрый кодер – Telegram
Бодрый кодер
450 subscribers
249 photos
24 videos
4 files
164 links
Меня зовут Лев, я руководитель направления в ПСБ. Это мой личный блог о DevOps, разработке, системном анализе, AI и управлении IT-командами. Делюсь своими мыслями, инсайтами, полезными инструментами и тем, что меня вдохновляет.

Автор: @nemirlev
Download Telegram
Привет! Если вы думали над тем, чтобы заменить bash на Go для CI/CD, получить мощные инструменты тестирования, отладки и читаемый код, посмотрите на Dagger. Это инструмент, который позволяет писать CI/CD-пайплайны на Go, TypeScript или Python — как обычный код. Например сборка приложения и публикация в registry:


package main

import (
"context"
"dagger.io/dagger"
)

func main() {
ctx := context.Background()
client, err := dagger.Connect(ctx)
if err != nil {
panic(err)
}
defer client.Close()

// Собираем Docker-образ
image := client.Container().Build(client.Host().Directory("."))

// Пушим в registry
_, err = image.Publish(ctx, "my-registry/my-app:latest")
if err != nil {
panic(err)
}
}


Из минусов, кода становится больше:


#!/bin/bash
echo "Building app..."
docker build -t my-app .
echo "Pushing to registry..."
docker tag my-app my-registry/my-app:latest
docker push my-registry/my-app:latest


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

#DevOps #CI_CD #Dagger #Automation #GoLang
This media is not supported in your browser
VIEW IN TELEGRAM
В начале недели прям залп новинок для тех, кто работает с информацией:

OpenAI представили Deep Research - агента, который сам проводит исследования. Например, просишь его проанализировать IT-тренды за 5 лет, и он самостоятельно изучает интернет, формируя серьезный аналитический отчет со всеми ссылками на источники. Работает от 5 до 30 минут, доступно для Pro-аккаунтов.

Появился Typeset.io - специализированный AI для работы с научными статьями. Его фишка в том, что он опирается только на проверенные научные источники.

Ну и OpenDeepResearcher - еще один инструмент для автоматизации исследовательской работы. Заточен под курсовые и дипломные. Собирает инфу из интернета, не останавливается пока не соберет всё необходимое, и предоставляет готовые ссылки на источники.

#AI #OpenAI #DeepResearch #исследования #технологии #наука
🔥5👍2
Поговорим про распил монолита. На схеме представлены 4 ключевых паттерна, которые помогут упростить переход:

Strangler Fig Pattern - позволяет постепенно извлекать функционал из монолита в отдельные сервисы, не нарушая работу системы. Как лиана, новые сервисы обвивают старый монолит, постепенно забирая его функционал.

Parallel Run Pattern - позволяет запускать старую и новую реализацию параллельно, сравнивая результаты. Это снижает риски при миграции, так как мы можем быстро откатиться на старую версию.

Decorating Collaborator Pattern - позволяет добавлять новую функциональность через прокси-слой, не меняя существующий монолит.

Change Data Capture (CDC) - позволяет отслеживать изменения в базе данных и синхронизировать данные между старой и новой системой.

Кстати, даже если вы не планируете разделять монолит, очень рекомендую внедрить API Gateway. Это даст вам:

* Централизованный контроль над всеми API эндпоинтами
* Принудительное документирование контрактов
* Простое подключение мониторинга и метрик
* Полную трассировку запросов через OpenTelemetry

#архитектура #микросервисы #монолит #паттерны #разработка
👍41
В свободное время начал изучать Rust и сразу делаю параллели с Go.

Простой Hello World telegram-бот на Go:


package main

import (
"log"
"os"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)

func main() {
bot, err := tgbotapi.NewBotAPI(os.Getenv("TELEGRAM_APITOKEN"))
if err != nil {
log.Panic(err)
}

u := tgbotapi.NewUpdate(0)
u.Timeout = 60

updates := bot.GetUpdatesChan(u)

for update := range updates {
if update.Message == nil {
continue
}

msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Hello World!")
bot.Send(msg)
}
}


А вот на Rust:


use teloxide::{prelude::*, utils::command::BotCommands};
use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
pretty_env_logger::init();
log::info!("Starting bot...");

let bot = Bot::from_env();

teloxide::repl(bot, |bot: Bot, msg: Message| async move {
bot.send_message(msg.chat.id, "Hello World!").await?;
Ok(())
})
.await;

Ok(())
}


Пока не могу найти явные приемущества Rust для веб-сервисов. Может кто-то из практикующих поделится, где реально выстреливает?

#Rust #Golang #разработка #изучаюязыки
👍3
Целых два дня без постов, поэтому захожу сразу с темы для дискуссии - метрики в разработке. Тема интересная тем, что бизнес их очень любит, а исполнители часто стараются избегать, считая бесполезной бюрократией. Выскажу свое мнение, а вы поделитесь своим.
Я считаю, что метрики очень важны, но к ним нужно относиться не как к инструменту, с помощью которого можно карать и миловать, а как к индикаторам, благодаря которым можно принимать решения проактивно, а не постфактум. Я пришел к делению на два блока:

Бизнес метрики - это здоровье продукта, основное. Конечно, всё зависит от специфики проекта, но за основу можно взять Retention Rate (сколько пользователей возвращаются через X дней), NPS, активных пользователей (DAU/WAU/MAU), конверсию в целевые действия, среднее время до целевого действия, количество багов на пользователя и, конечно, SLA/SLO/SLI.

Метрики разработки (не конкретных разработчиков, а всех ролей, которые участвуют!) - тут важны Lead Time и Cycle Time, частота релизов, количество ошибок после релиза, частота неудачных деплоев, MTTR, время код-ревью и эффективность тестового покрытия. Можно добавить соотношение затраченного времени к планируемому,

А как вы относитесь к метрикам? Какие считаете действительно полезными?

#разработка #метрики #management #teamlead #продакт
🤔3❤‍🔥1👍1
Мне все больше нравится работать с легковесной альтернативой Elastic - Vector + Loki + Grafana 📊
Легче, дешевле, и работает с PromQL, который вы уже знаете по метрикам!
#мониторинг #логи #vector #loki #grafana #devops
Вышел Go 1.24! Что нового? 🚀
Решил поделиться интересными обновлениями из свежего релиза Go 1.24. Опубликовали 11 февраля, и там есть действительно полезные штуки:

Наконец-то добавили поддержку обобщённых псевдонимов типов (generic type alias). Теперь при определении псевдонима можно указывать параметры типа.

Оптимизировали runtime - нагрузка на CPU снизилась на 2-3%. Добавили новую реализацию map на основе Swiss Table, улучшили работу с памятью для мелких объектов и обновили mutex.

Для Go-модулей появился механизм отслеживания исполняемых зависимостей через директиву tool (например, линтеров). Теперь можно добавлять их через go get -tool.

В стандартной библиотеке появились криптоалгоритмы из FIPS 140-3 и пакеты для квантово-устойчивого шифрования (ML-KEM-768 и ML-KEM-1024).

Улучшили поддержку WebAssembly - можно собирать Go-приложения как библиотеки или WASI-обработчики.

#golang #релиз #разработка #программирование
🔥41
Не смог пройти мимо, поэтому в честь праздника два поста :)

#пятничныйюмор
9
Всех с первым рабочим днем. Предлагаю по дороге домой прочитать мою новую статью, первую в этом году - https://habr.com/ru/articles/883300/

Актуальна даже если не работаете с php.

Лайки статье очень приветствуются :)

#docker #laravel #php #nginxunit
🔥5
Стоило только написать первую статью в этом году, как тут же пришли с отличной новостью - мой доклад приняли на конференцию Merge (https://tatarstan2025.mergeconf.ru)! Буду выступать в секции DevOps.

Можно сказать, первая ласточка в этом году. В работе ещё 4 заявки, держим кулачки! 🤞

#конференции #merge #devops #публичныевыступления #татарстан
🔥10❤‍🔥11
Сегодня хочу затронуть тему, которая волнует многих DevOps-инженеров и разработчиков: Terraform или Pulumi? Оба инструмента помогают управлять инфраструктурой как кодом (IaC), но подходы у них разные. И если вы ещё не пробовали Pulumi, то, возможно, после этого поста захотите! 😉

---

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

Плюсы:
- Огромное сообщество и поддержка множества провайдеров.
- Простота в освоении (HCL — это не язык программирования, а конфигурационный файл).
- Состояние инфраструктуры хранится в файле terraform.tfstate, что удобно для отслеживания изменений.

Минусы:
- HCL (HashiCorp Configuration Language) ограничен в возможностях.
- Нет типизации, что может приводить к ошибкам.
- Сложности с повторным использованием кода (хотя модули помогают, но это не всегда достаточно).

---

Pulumi: инфраструктура как настоящий код
А теперь давайте посмотрим на Pulumi. Это инструмент, который позволяет описывать инфраструктуру на реальных языках программирования: Python, TypeScript, Go, C# и других. Да, вы не ослышались — это Infrastructure as Real Code!

Плюсы:
- Pulumi использует строгую типизацию, что помогает избежать множества ошибок на этапе написания кода. IDE подскажет, если вы что-то сделали не так.
- Вы получаете все плюшки вашей любимой IDE: автодополнение, проверка типов, рефакторинг и даже отладку. Попробуйте это сделать в Terraform с его HCL!
- Не нужно учить новый синтаксис (HCL). Если вы уже пишете на Python, TypeScript или Go, то можете сразу начать использовать Pulumi.
- Функции, классы, модули — всё это доступно в Pulumi. Вы можете писать более структурированный и поддерживаемый код.
- Pulumi также хранит состояние, но предлагает больше гибкости в управлении им. Вы можете использовать Pulumi Service, S3, Azure Blob Storage и другие бэкенды.

А что с минусами?
- Сообщество пока меньше, чем у Terraform.
- Не все провайдеры поддерживаются так же хорошо, как в Terraform.
- Может быть избыточным для простых задач.

---

Когда выбирать Pulumi?
- Если вы разработчик и хотите использовать знакомые языки программирования.
- Если вам нужна типизация и поддержка IDE.
- Если ваш проект сложный и требует повторного использования кода.

Когда выбирать Terraform?
- Если вам нужен проверенный инструмент с огромным сообществом.
- Если ваша инфраструктура относительно простая.
- Если вы уже используете Terraform и не хотите мигрировать.

---

Итог

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

А какой инструмент используете вы? Делитесь в комментариях! И если ещё не пробовали Pulumi, может, самое время? 😉

#DevOps #IaC #Terraform #Pulumi #InfrastructureAsCode
👍3
Второй доклад тоже залетел, летом буду выступать в секции Системный анализ, в Новосибирске. https://15.codefest.ru

Осталось дождаться решения программных комитетов по 3-м заявкам. Ждать вообще не люблю.
🔥10❤‍🔥1
Можно уже протестить новую нейросеть от Илона

#grok #ai
Написал статью по observability - https://habr.com/ru/articles/885224/. В одну часть всё не влезло (как обычно 😅), так что планирую цикл из 4 статей.

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

P.S. Статья юбилейная, 10-я :)

#habr #observability #мониторинг #devops #статья #разработка
👍10🔥2
Команда Rust порадовала нас самой крупной редакцией языка за всю историю! Версия 1.85.0 и Edition 2024 уже доступны в стабильном канале.

Главные новинки:
- Асинхронные замыкания (async closures): теперь можно писать async || {}, что решает проблемы с захватом значений из контекста. Также добавлены трейты AsyncFn, AsyncFnMut и AsyncFnOnce.
- Новый атрибут #[diagnostic::do_not_recommend] для скрытия нежелательных реализаций трейтов в диагностике компилятора.
- FromIterator и Extend теперь работают с кортежами от 1 до 12 элементов - можно создавать сразу несколько коллекций одним вызовом collect().

В Edition 2024 внесли множество изменений, улучшающих безопасность и эргономику:
- Блоки extern теперь требуют ключевое слово unsafe
- Изменены правила временной области для if let и последних выражений в блоках
- Улучшена работа с #![deny(unsafe_op_in_unsafe_fn)]
- Зарезервированы ключевые слова gen и синтаксис защищенных строк #"foo"#

Чтобы обновиться, просто выполните rustup update stable. Для перехода на Edition 2024 в большинстве случаев поможет cargo fix.

#rust #programming #update #edition2024
Узнал, что Яндекс в свою клавиатуру как для iOS так и для Android встроил нейросетку. С ней вроде можно писать грамотно и находу генерировать тексты/улучшения текущего.

Кто пробовал? Как вам?

#ai #yandex