Бодрый кодер
Channel photo updated
Так как все же канал - больше личный блог, решил что уместнее всего поставить фото меня, в стиле Гибли 🙂
😁5🔥4
С женой нас объединяет одно — путешествия. Куда угодно. Любым способом. Главное — в путь.
🏍 Раньше были мотоциклы: минимум два больших заезда за сезон, по ~10 000 км каждый. Были и совсем грандиозные маршруты, например: Байкал → Гибралтар.
👶 Потом родилась дочь. Мотоциклы в гараже (и то… один продал, а второй мне помогли разбить 😅).
🚗 Но на его место ворвалась Tesla Model 3. «Семейная» машина, которая делает 0–100 за 3.8 секунды. Через два месяца после покупки мы рванули: Москва → Лондон → Париж → Москва.
⚡ Электромобиль оказался идеальным мостом между любовью к дороге и любовью к технологиям. Я уже на второй день воткнул провод Ethernet в машину, для легкого доступа, изучил Tesla API и даже написал пару приложений для машины.
И знаете что?
Настоящее увлечение не просто даёт радость — оно держит в тонусе и не даёт сгореть на работе. А если хобби общее — это лучший work/life balance ❤️
📌 Подробнее о нашем автопутешествии, электромобилях, их особенностях и конечно о технология— в моём новом канале @ElectroNomad
🏍 Раньше были мотоциклы: минимум два больших заезда за сезон, по ~10 000 км каждый. Были и совсем грандиозные маршруты, например: Байкал → Гибралтар.
👶 Потом родилась дочь. Мотоциклы в гараже (и то… один продал, а второй мне помогли разбить 😅).
🚗 Но на его место ворвалась Tesla Model 3. «Семейная» машина, которая делает 0–100 за 3.8 секунды. Через два месяца после покупки мы рванули: Москва → Лондон → Париж → Москва.
⚡ Электромобиль оказался идеальным мостом между любовью к дороге и любовью к технологиям. Я уже на второй день воткнул провод Ethernet в машину, для легкого доступа, изучил Tesla API и даже написал пару приложений для машины.
И знаете что?
Настоящее увлечение не просто даёт радость — оно держит в тонусе и не даёт сгореть на работе. А если хобби общее — это лучший work/life balance ❤️
📌 Подробнее о нашем автопутешествии, электромобилях, их особенностях и конечно о технология— в моём новом канале @ElectroNomad
1🔥13❤5👍2
РКН признались, что заблокировали аудио в Telegram и WhatsApp. Что бы снизить активность мошенников.
Конечно очень жаль, в телеге звонит было очень удобно, теперь надо подключать тариф с большим количеством минут, что бы звонить по телефону. Там кстати тоже можно конференцию делать.
Конечно очень жаль, в телеге звонит было очень удобно, теперь надо подключать тариф с большим количеством минут, что бы звонить по телефону. Там кстати тоже можно конференцию делать.
👎5😢3
🚀 Вышла Go 1.25! Главные изменения
🔧 Инструменты и компилятор
- `go build -asan` теперь по умолчанию проверяет утечки памяти при завершении работы программы.
- DWARF5 — уменьшен размер отладочной информации в бинарниках за счет нового формата.
- Исправлен баг с nil-указателями, который мог откладывать проверки (теперь паника будет там, где должна быть).
⚡ Производительность
- Новый экспериментальный GC (`GOEXPERIMENT=greenteagc`) — до 40% меньше накладных расходов.
- Быстрые срезы — компилятор чаще размещает их данные на стеке.
- Ускорены
🛠 Стандартная библиотека
-Быстрые срезы — комп— экспериментальная замена
-ild -asan` теперь по— пакет для тестирования конкурентного кода (самое интересное - виртуальное время").
-
-uild -asan` — защита от CSRF через
🐧 Изменения в рантайме
-build -asan` ттеперь учитывает лимиты cgroup в Linux (например, в Kubernetes).
- На Linux VMA-регионы теперь подписаны (`[anon: Go: heap]`).
### 🔗 Полный список изменений
#golang #go125 #программирование
🔧 Инструменты и компилятор
- `go build -asan` теперь по умолчанию проверяет утечки памяти при завершении работы программы.
- DWARF5 — уменьшен размер отладочной информации в бинарниках за счет нового формата.
- Исправлен баг с nil-указателями, который мог откладывать проверки (теперь паника будет там, где должна быть).
⚡ Производительность
- Новый экспериментальный GC (`GOEXPERIMENT=greenteagc`) — до 40% меньше накладных расходов.
- Быстрые срезы — компилятор чаще размещает их данные на стеке.
- Ускорены
crypto/ecdsa, crypto/ed25519, crypto/rsa и хеши (`SHA-1`, SHA-256, `SHA-512`). 🛠 Стандартная библиотека
-Быстрые срезы — комп— экспериментальная замена
encoding/json с улучшенной производительностью. -ild -asan` теперь по— пакет для тестирования конкурентного кода (самое интересное - виртуальное время").
-
runtime/trace.FlightRecorder — кольцевой буфер для записи трейсов (удобно для отладки редких событий). -uild -asan` — защита от CSRF через
CrossOriginProtection. 🐧 Изменения в рантайме
-build -asan` ттеперь учитывает лимиты cgroup в Linux (например, в Kubernetes).
- На Linux VMA-регионы теперь подписаны (`[anon: Go: heap]`).
### 🔗 Полный список изменений
#golang #go125 #программирование
go.dev
Go 1.25 Release Notes - The Go Programming Language
❤1
Для тех кому нужно потестить скорость интернета в РФ, есть сервис Яндекса, они его щас обновили, сразу после закрытия speedtest. Мне понравилось, но количество данных которые определяет, конечно немного пугает (после запуска теста, спуститесь ниже).
https://yandex.ru/internet
https://yandex.ru/internet
yandex.ru
Яндекс Интернетометр — ваша скорость интернета
Проверка скорости интернета. IP-адрес, операционная система, версия браузера, cookies, разрешение экрана и другие параметры системы.
👍1
Бодрый кодер
Для тех кому нужно потестить скорость интернета в РФ, есть сервис Яндекса, они его щас обновили, сразу после закрытия speedtest. Мне понравилось, но количество данных которые определяет, конечно немного пугает (после запуска теста, спуститесь ниже). htt…
Я кажется придумал, что имеет смысл написать на Rust в академических целях.
❤1🤔1🐳1
Хочу сегодня поднять тему, которая наболела.
Когда ты уплачиваешь что-то государству (речь про РФ), если предусмотрено, то есть простой путь — например, просто с карты через «Госуслуги», как в случае оплаты штрафов или налогов. Но все еще возникают ситуации, когда тебе дают реквизиты для оплаты.
И там тебе нужно заполнить не просто счёт и ИНН, а убедиться, что комментарий правильный, определённые поля тоже верно заполнены. А реквизиты, даже если скидывают в электронном виде, как правило, дают без возможности копирования, чтобы ты страдал.
Для меня это всегда большой стресс, хотя можно же сделать QR, чтобы отсканировал, ввел сумму и нажал кнопку «Оплатить». Некоторые делают, например, Федеральная таможенная служба, но посредники о них не знаю, дают реквизиты и целую видеоинструкцию, в зависимости от банка, как оплатить (еще и не через каждый банк это можно сделать).
Надеюсь, с ведением цифрового рубля станет лучше, но сейчас всё ещё жесть, хотя все инструменты есть.
Я тут недавно в аренду машину брал в Чите, так там мне QR через СПБ сгенерировали за одну минуту с нужной суммой в адрес ИП.
А у вас как? Вызывает боль оплата по реквизитам?
Когда ты уплачиваешь что-то государству (речь про РФ), если предусмотрено, то есть простой путь — например, просто с карты через «Госуслуги», как в случае оплаты штрафов или налогов. Но все еще возникают ситуации, когда тебе дают реквизиты для оплаты.
И там тебе нужно заполнить не просто счёт и ИНН, а убедиться, что комментарий правильный, определённые поля тоже верно заполнены. А реквизиты, даже если скидывают в электронном виде, как правило, дают без возможности копирования, чтобы ты страдал.
Для меня это всегда большой стресс, хотя можно же сделать QR, чтобы отсканировал, ввел сумму и нажал кнопку «Оплатить». Некоторые делают, например, Федеральная таможенная служба, но посредники о них не знаю, дают реквизиты и целую видеоинструкцию, в зависимости от банка, как оплатить (еще и не через каждый банк это можно сделать).
Надеюсь, с ведением цифрового рубля станет лучше, но сейчас всё ещё жесть, хотя все инструменты есть.
Я тут недавно в аренду машину брал в Чите, так там мне QR через СПБ сгенерировали за одну минуту с нужной суммой в адрес ИП.
А у вас как? Вызывает боль оплата по реквизитам?
💯5😭2❤1
Год активно использую приложение Tappsk, его основное удобство для меня - задачи ставятся не на дату, а очень быстро по категориям - сегодня, завтра, на неделе, потом. Когда на ходу нужно записывать поток задач выходит очень эффективно.
Тут после обновления на новую MacOS, бету - перестала работать. Полез переустанавливать, и случайно увидел когда было последнее обновление - 4 года назад :( При этом на телефоне обновляется стабильно.
Может кто знает, есть похожие альтернативы?
Тут после обновления на новую MacOS, бету - перестала работать. Полез переустанавливать, и случайно увидел когда было последнее обновление - 4 года назад :( При этом на телефоне обновляется стабильно.
Может кто знает, есть похожие альтернативы?
Главная новость сегодня - Сбер вернул оплату на iPhone, с помощью Bluetooth. Хорошее решение, но мне конечно больше нравится UWB, гораздо интереснее протокол. Надеюсь когда-нибудь найду время с ним поиграться. С помощью него например можно искать вещи в помещении до сантиметров или считать людей в зале :)
🧩 Кэш в Redis: не всегда "в лоб"
Часто вижу один и тот же паттерн:
– получили данные из БД,
– положили их в Redis,
– отдали пользователю.
А потом — классический цикл "сначала лезем в кэш, если нет — идём в базу".
На первый взгляд всё красиво, но тут и кроется проблема.
👉 Основное правило при проектировании кэша — учитывать частоту обновления данных и, в зависимости от этого, строить логику инвалидации. Но данные даже внутри одной таблицы редко бывают однородными. Redis — это не просто "хранение JSON".
Например, типовой кейс:
у нас есть сущность *Post*, у неё есть "тяжёлые" атрибуты (текст, автор, дата), а есть счётчики (кол-во просмотров, лайков, комментариев).
Обновляются они с совершенно разной частотой.
Если всё хранить в одном JSON-ключе, то:
- при каждом инкременте счётчика мы будем перезаписывать весь объект,
- рискуем гонками и избыточной нагрузкой,
- теряем смысл "лёгкого" кэша.
🚀 Куда эффективнее хранить две записи:
1. сам объект (Post body),
2. отдельный ключ под счётчики.
Что это даёт:
- быстрые и атомарные обновления через
- возможность сбрасывать "тело" поста по TTL, не трогая счётчики,
- гибкость в инвалидации: разные правила для разных типов данных.
А получать данные из кэша в этом случае лучше не "в лоб" (два `GET`), а через pipeline — так мы минимизируем RTT.
Для хранения вместо JSON отлично подходят структуры Redis:
-
-
Итог: кэширование — это не "сложили JSON и забыли". Это проектирование модели данных под конкретный паттерн использования. И чем тоньше вы это сделаете, тем больше выиграете в производительности и стабильности.
💡 А у вас в проектах Redis чаще живёт как "JSON-склад" или как полноценный инструмент с типами и пайплайнами?
Часто вижу один и тот же паттерн:
– получили данные из БД,
– положили их в Redis,
– отдали пользователю.
А потом — классический цикл "сначала лезем в кэш, если нет — идём в базу".
На первый взгляд всё красиво, но тут и кроется проблема.
👉 Основное правило при проектировании кэша — учитывать частоту обновления данных и, в зависимости от этого, строить логику инвалидации. Но данные даже внутри одной таблицы редко бывают однородными. Redis — это не просто "хранение JSON".
Например, типовой кейс:
у нас есть сущность *Post*, у неё есть "тяжёлые" атрибуты (текст, автор, дата), а есть счётчики (кол-во просмотров, лайков, комментариев).
Обновляются они с совершенно разной частотой.
Если всё хранить в одном JSON-ключе, то:
- при каждом инкременте счётчика мы будем перезаписывать весь объект,
- рискуем гонками и избыточной нагрузкой,
- теряем смысл "лёгкого" кэша.
🚀 Куда эффективнее хранить две записи:
1. сам объект (Post body),
2. отдельный ключ под счётчики.
Что это даёт:
- быстрые и атомарные обновления через
INCR / HINCRBY, - возможность сбрасывать "тело" поста по TTL, не трогая счётчики,
- гибкость в инвалидации: разные правила для разных типов данных.
А получать данные из кэша в этом случае лучше не "в лоб" (два `GET`), а через pipeline — так мы минимизируем RTT.
Для хранения вместо JSON отлично подходят структуры Redis:
-
HASH (для набора атрибутов), -
STRING + INCR (для простых счётчиков). Итог: кэширование — это не "сложили JSON и забыли". Это проектирование модели данных под конкретный паттерн использования. И чем тоньше вы это сделаете, тем больше выиграете в производительности и стабильности.
💡 А у вас в проектах Redis чаще живёт как "JSON-склад" или как полноценный инструмент с типами и пайплайнами?
🔥9👍2
В комментарии к прошлому посту, попросили поделиться подробнее про pipline.
Часто кэш читают/пишут «в лоб» — по одному запросу. Но основная цена Redis в проде — это RTT (туда-обратно по сети). Pipeline позволяет отправить пачку команд за один сетевой раунд — сервер выполнит их по порядку, а ответы придут одной очередью.
Что такое pipeline (и чем он НЕ является)
- Pipeline не делает операции атомарными. Это просто «упаковка» команд в один раунд-трип.
- Для атомарности нужен
- Команды в pipeline выполняются по очереди на сервере, но клиент не ждёт ответ после каждой — экономим RTT.
---
Когда использовать
- Серии однотипных чтений/записей (например, 50 ключей
- Смешанные операции, где ответы предыдущих команд не нужны для формирования следующих.
- Интеграции «на пути» запроса (критично снижать задержку).
Когда не стоит:
- Когда следующая команда зависит от результата предыдущей → делайте двумя фазами.
- Огромные пакеты (тысячи команд) — растёт задержка одной пачки и риск таймаутов. Лучше батчить.
---
Простой пример на Go.
Часто кэш читают/пишут «в лоб» — по одному запросу. Но основная цена Redis в проде — это RTT (туда-обратно по сети). Pipeline позволяет отправить пачку команд за один сетевой раунд — сервер выполнит их по порядку, а ответы придут одной очередью.
Что такое pipeline (и чем он НЕ является)
- Pipeline не делает операции атомарными. Это просто «упаковка» команд в один раунд-трип.
- Для атомарности нужен
MULTI/EXEC (**TxPipeline** в go-redis) или Lua-скрипт, либо WATCH + TxPipelined.- Команды в pipeline выполняются по очереди на сервере, но клиент не ждёт ответ после каждой — экономим RTT.
---
Когда использовать
- Серии однотипных чтений/записей (например, 50 ключей
GET / `HGETALL`).- Смешанные операции, где ответы предыдущих команд не нужны для формирования следующих.
- Интеграции «на пути» запроса (критично снижать задержку).
Когда не стоит:
- Когда следующая команда зависит от результата предыдущей → делайте двумя фазами.
- Огромные пакеты (тысячи команд) — растёт задержка одной пачки и риск таймаутов. Лучше батчить.
---
Простой пример на Go.
package main
import (
"context"
"encoding/json"
"fmt"
"time"
"github.com/redis/go-redis/v9"
)
type Post struct {
ID, Author, Title, Content string
}
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
rdb := redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379"})
// 1) Запись: тело поста + счётчики одним pipeline
post := Post{ID: "42", Author: "alice", Title: "Pipeline 101", Content: "…"}
body, _ := json.Marshal(post)
_, err := rdb.Pipelined(ctx, func(p redis.Pipeliner) error {
p.Set(ctx, "post:42:body", body, 10*time.Minute) // TTL у тела
p.HSet(ctx, "post:42:counters", "views", 0, "likes", 0) // счётчики отдельно
p.Persist(ctx, "post:42:counters") // живут дольше тела
return nil
})
if err != nil {
panic(err)
}
// 2) Чтение: тело + счётчики за 1 RTT
var (
bodyCmd = rdb.Get(ctx, "post:42:body")
ctrCmd = rdb.HGetAll(ctx, "post:42:counters")
)
// Внимание: без Pipelined() мы сделали 2 команды, но они уйдут подряд на одном соединении.
// Для явного пайплайна:
pipe := rdb.Pipeline()
bodyCmd = pipe.Get(ctx, "post:42:body")
ctrCmd = pipe.HGetAll(ctx, "post:42:counters")
if _, err := pipe.Exec(ctx); err != nil && err != redis.Nil {
panic(err)
}
var p Post
if b, err := bodyCmd.Bytes(); err == nil && len(b) > 0 {
_ = json.Unmarshal(b, &p)
}
counters := ctrCmd.Val()
fmt.Println("noscript:", p.Title, "views:", counters["views"])
}
👍4🔥2
Бодрый кодер
#пятничныйюмор в субботу. Пропустил
Правды ради, сейчас уже не совсем так.
Я тут поменял свою теслу на Zeekr, конечно первым делом подключил ноутбук к машине, что бы разобраться как и что, написать какие-то программы.
На фоне этого, не мог пройти мимо самой популярного тулинга, которым пользуются почти все владельцы Zeekr (Zeekr ADB toolkit). Ну познакомился с создателем. У тулинга (код только у первой версии есть), код ужасный, написанный нейросетью. Но блин, он полностью решает возложенную на него задачу и куча людей которые с компом на ВЫ, экономит и экономила десятки тысяч рублей (ценны на работу по Zeekr просто космос, как и на Tesla в принципе).
Оказалось что создатель тулинга - фотограф, и просто за счет нейросетей прокачался так, что я был уверен - говорю с разработчиком. Для него это стало отдушиной от работы. И все благодаря GPT.
Я это к чему, нейросети - классно, но не нужно рассчитывать что они сделают за вас, а это большая возможность облегчить себе работу, быстро решить задачи и научиться тому, что никогда не делали.
Я тут поменял свою теслу на Zeekr, конечно первым делом подключил ноутбук к машине, что бы разобраться как и что, написать какие-то программы.
На фоне этого, не мог пройти мимо самой популярного тулинга, которым пользуются почти все владельцы Zeekr (Zeekr ADB toolkit). Ну познакомился с создателем. У тулинга (код только у первой версии есть), код ужасный, написанный нейросетью. Но блин, он полностью решает возложенную на него задачу и куча людей которые с компом на ВЫ, экономит и экономила десятки тысяч рублей (ценны на работу по Zeekr просто космос, как и на Tesla в принципе).
Оказалось что создатель тулинга - фотограф, и просто за счет нейросетей прокачался так, что я был уверен - говорю с разработчиком. Для него это стало отдушиной от работы. И все благодаря GPT.
Я это к чему, нейросети - классно, но не нужно рассчитывать что они сделают за вас, а это большая возможность облегчить себе работу, быстро решить задачи и научиться тому, что никогда не делали.
❤8👍3
Рубисты могут сильно сэкономить. Среда разработки RubyMine от JetBrains стала бесплатной для некоммерческого использования
В 2024 году JetBrains сделала бесплатными для некоммерческого использования WebStorm, Rider и RustRover. В начале 2025 года к списку добавили CLion, а сейчас — RubyMine.
По бесплатной некоммерческой лицензии доступны все функции IDE, кроме Code With Me. Для доступа к ней надо оформлять подписку.
В 2024 году JetBrains сделала бесплатными для некоммерческого использования WebStorm, Rider и RustRover. В начале 2025 года к списку добавили CLion, а сейчас — RubyMine.
По бесплатной некоммерческой лицензии доступны все функции IDE, кроме Code With Me. Для доступа к ней надо оформлять подписку.
❤🔥7🌚2
Который раз убеждаюсь — профессия разработчика не даёт заскучать. Каждый день узнаёшь что-то новое.
Недавно со мной поделились интересной находкой: оказывается, в Nginx Ingress есть встроенная поддержка телеметрии. Можно буквально «из коробки» настроить отправку трейсов в OTLP, например, в Jaeger.
Я-то всегда был уверен, что в бесплатном Nginx такой возможности нет, и даже мысли не возникало искать её в Ingress. А зря 🙂
И самое приятное: даже для «чистого» бесплатного Nginx тоже есть решение — nginx-otel. Судя по описанию, этот модуль работает аж в 4 раза эффективнее официального варианта из Nginx Plus.
#nginx #otel #observability #devops #ingress
Недавно со мной поделились интересной находкой: оказывается, в Nginx Ingress есть встроенная поддержка телеметрии. Можно буквально «из коробки» настроить отправку трейсов в OTLP, например, в Jaeger.
Я-то всегда был уверен, что в бесплатном Nginx такой возможности нет, и даже мысли не возникало искать её в Ingress. А зря 🙂
И самое приятное: даже для «чистого» бесплатного Nginx тоже есть решение — nginx-otel. Судя по описанию, этот модуль работает аж в 4 раза эффективнее официального варианта из Nginx Plus.
#nginx #otel #observability #devops #ingress
GitHub
nginx-otel/README.md at main · nginxinc/nginx-otel
Contribute to nginxinc/nginx-otel development by creating an account on GitHub.
👍8
