uz
Feedback
Бодрый кодер

Бодрый кодер

Kanalga Telegram’da o‘tish

Меня зовут Лев, я руководитель направления в ПСБ. Это мой личный блог о DevOps, разработке, системном анализе, AI и управлении IT-командами. Делюсь своими мыслями, инсайтами, полезными инструментами и тем, что меня вдохновляет. Автор: @nemirlev

Ko'proq ko'rsatish
506
Obunachilar
Ma'lumot yo'q24 soatlar
+17 kunlar
+730 kunlar
Postlar arxiv
Правды ради, сейчас уже не совсем так. Я тут поменял свою теслу на Zeekr, конечно первым делом подключил ноутбук к машине, что бы разобраться как и что, написать какие-то программы. На фоне этого, не мог пройти мимо самой популярного тулинга, которым пользуются почти все владельцы Zeekr (Zeekr ADB toolkit). Ну познакомился с создателем. У тулинга (код только у первой версии есть), код ужасный. Но блин, он полностью решает возложенную на него задачу и куча людей которые с компом на ВЫ, экономит и экономила десятки тысяч рублей (ценны на работу по Zeekr просто космос, как и на Tesla в принципе). Оказалось что фотограф, и просто за счет нейросетей прокачался так, что я был уверен - говорю с разработчиком. Для него это стало отдушиной от работы. И все благодаря GPT. Я это к чему, нейросети - классно, но не нужно рассчитывать что они сделают за вас, а это большая возможность облегчить себе работу, быстро решить задачи и научиться тому, что никогда не делали.

#пятничныйюмор в субботу. Пропустил
#пятничныйюмор в субботу. Пропустил

В комментарии к прошлому посту, попросили поделиться подробнее про pipline. Часто кэш читают/пишут «в лоб» — по одному запросу. Но основная цена Redis в проде — это RTT (туда-обратно по сети). Pipeline позволяет отправить пачку команд за один сетевой раунд — сервер выполнит их по порядку, а ответы придут одной очередью. ### Что такое pipeline (и чем он НЕ является) - Pipeline не делает операции атомарными. Это просто «упаковка» команд в один раунд-трип. - Для атомарности нужен MULTI/EXEC (**TxPipeline** в go-redis) или Lua-скрипт, либо WATCH + TxPipelined. - Команды в pipeline выполняются по очереди на сервере, но клиент не ждёт ответ после каждой — экономим RTT. --- ### Когда использовать - Серии однотипных чтений/записей (например, 50 ключей GET / `HGETALL`). - Смешанные операции, где ответы предыдущих команд не нужны для формирования следующих. - Интеграции «на пути» запроса (критично снижать задержку). Когда не стоит: - Когда следующая команда зависит от результата предыдущей → делайте двумя фазами. - Огромные пакеты (тысячи команд) — растёт задержка одной пачки и риск таймаутов. Лучше батчить. --- Простой пример на Go.

// go mod init example && go get github.com/redis/go-redis/v9
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("title:", p.Title, "views:", counters["views"])
}

🧩 Кэш в Redis: не всегда "в лоб" Часто вижу один и тот же паттерн: – получили данные из БД, – положили их в Redis, – отдали
+1
🧩 Кэш в Redis: не всегда "в лоб" Часто вижу один и тот же паттерн: – получили данные из БД, – положили их в Redis, – отдали пользователю. А потом — классический цикл "сначала лезем в кэш, если нет — идём в базу". На первый взгляд всё красиво, но тут и кроется проблема. 👉 Основное правило при проектировании кэша — учитывать частоту обновления данных и, в зависимости от этого, строить логику инвалидации. Но данные даже внутри одной таблицы редко бывают однородными. Redis — это не просто "хранение JSON". Например, типовой кейс: у нас есть сущность *Post*, у неё есть "тяжёлые" атрибуты (текст, автор, дата), а есть счётчики (кол-во просмотров, лайков, комментариев). Обновляются они с совершенно разной частотой. Если всё хранить в одном JSON-ключе, то: - при каждом инкременте счётчика мы будем перезаписывать весь объект, - рискуем гонками и избыточной нагрузкой, - теряем смысл "лёгкого" кэша. 🚀 Куда эффективнее хранить две записи: 1. сам объект (Post body), 2. отдельный ключ под счётчики. Что это даёт: - быстрые и атомарные обновления через INCR / HINCRBY, - возможность сбрасывать "тело" поста по TTL, не трогая счётчики, - гибкость в инвалидации: разные правила для разных типов данных. А получать данные из кэша в этом случае лучше не "в лоб" (два `GET`), а через pipeline — так мы минимизируем RTT. Для хранения вместо JSON отлично подходят структуры Redis: - HASH (для набора атрибутов), - STRING + INCR (для простых счётчиков). Итог: кэширование — это не "сложили JSON и забыли". Это проектирование модели данных под конкретный паттерн использования. И чем тоньше вы это сделаете, тем больше выиграете в производительности и стабильности. 💡 А у вас в проектах Redis чаще живёт как "JSON-склад" или как полноценный инструмент с типами и пайплайнами?

Главная новость сегодня - Сбер вернул оплату на iPhone, с помощью Bluetooth. Хорошее решение, но мне конечно больше нравится UWB, гораздо интереснее протокол. Надеюсь когда-нибудь найду время с ним поиграться. С помощью него например можно искать вещи в помещении до сантиметров или считать людей в зале dh

Всех с выходными. #пятничныйюмор
Всех с выходными. #пятничныйюмор

Год активно использую приложение Tappsk, его основное удобство для меня - задачи ставятся не на дату, а очень быстро по катег
Год активно использую приложение Tappsk, его основное удобство для меня - задачи ставятся не на дату, а очень быстро по категориям - сегодня, завтра, на недели, потом. Когда на ходу нужно записывать поток задач выходит очень эффективно. Тут после обновления на новую MacOS, бету - перестала работать. Полез переустанавливать, и случайно увидел когда было последнее обновление - 4 года назад :( Может кто знает, есть похожие альтернативы?

Хочу сегодня поднять тему, которая наболела. Когда ты уплачиваешь что-то государству (речь про РФ), если предусмотрено, то есть простой путь — например, просто с карты через «Госуслуги», как в случае оплаты штрафов или налогов. Но все еще возникают ситуации, когда тебе дают реквизиты для оплаты. И там тебе нужно заполнить не просто счёт и ИНН, а убедиться, что комментарий правильный, определённые поля тоже верно заполнены. А реквизиты, даже если скидывают в электронном виде, как правило, дают без возможности копирования, чтобы ты страдал. Для меня это всегда большой стресс, хотя можно же сделать QR, чтобы отсканировал, ввел сумму и нажал кнопку «Оплатить». Некоторые делают, например, Федеральная таможенная служба, но посредники о них не знаю, дают реквизиты и целую видеоинструкцию, в зависимости от банка, как оплатить (еще и не через каждый банк это можно сделать). Надеюсь, с ведением цифрового рубля станет лучше, но сейчас всё ещё жесть, хотя все инструменты есть. Я тут недавно в аренду машину брал в Чите, так там мне QR через СПБ сгенерировали за одну минуту с нужной суммой в адрес ИП. А у вас как? Вызывает боль оплата по реквизитам?

Я кажется придумал, что имеет смысла написать на Rust в академических целях.

Для тех кому нужно потестить скорость интернета в РФ, есть сервис Яндекса, они его щас обновили, сразу после закрытия speedtest. Мне понравилось, но количество данных которые определяет, конечно немного пугает (после запуска теста, спастись ниже). https://yandex.ru/internet

Всех с пятницой. #пятничныйюмор
Всех с пятницой. #пятничныйюмор

🚀 Вышла Go 1.25! Главные изменения 🔧 Инструменты и компилятор - `go build -asan` теперь по умолчанию проверяет утечки памяти в C-коде. - `go.mod ignore` — новый директив для игнорирования директорий. - DWARF5 — уменьшен размер отладочной информации в бинарниках. - Исправлен баг с nil-указателями, который мог откладывать проверки (теперь паника будет там, где должна быть). ⚡ Производительность - Новый экспериментальный GC (`GOEXPERIMENT=greenteagc`) — до 40% меньше накладных расходов. - Быстрые срезы — компилятор чаще размещает их данные на стеке. - Ускорены crypto/ecdsa, crypto/ed25519, crypto/rsa и хеши (`SHA-1`, SHA-256, `SHA-512`). 🛠 Стандартная библиотека - `encoding/json/v2` — экспериментальная замена encoding/json с улучшенной производительностью. - `testing/synctest` — пакет для тестирования конкурентного кода (самое интересное - виртуальное время"). - `runtime/trace.FlightRecorder` — кольцевой буфер для записи трейсов (удобно для отладки редких событий). - `net/http` — защита от CSRF через CrossOriginProtection. 🐧 Изменения в рантайме - `GOMAXPROCS` теперь учитывает лимиты cgroup в Linux (например, в Kubernetes). - На Linux VMA-регионы теперь подписаны (`[anon: Go: heap]`). ### 🔗 Полный список изменений #golang #go125 #программирование

РКН признались, что заблокировали аудио в Telegram и WhatsApp. Что бы снизить активность мошенников. Конечно очень жаль, в телеге звонит было очень удобно, теперь надо подключать тариф с большим количеством минут, что бы звонил по телефону. Там кстати тоже можно конференцию делать.

Всех с выходными. #пятничныйюмор
Всех с выходными. #пятничныйюмор

С женой нас объединяет одно — путешествия. Куда угодно. Любым способом. Главное — в путь. 🏍 Раньше были мотоциклы: два больших заезда за сезон, по ~10 000 км каждый. Были и совсем грандиозные маршруты, например: Байкал → Гибралтар. 👶 Потом родилась дочь. Мотоцикл в гараже (и то… один продал, а второй мне помогли разбить 😅). 🚗 Но на его место ворвалась Tesla Model 3. «Семейная» машина, которая делает 0–100 за 3.8 секунды. Через два месяца после покупки мы рванули: Москва → Лондон → Париж → Москва. ⚡ Электромобиль оказался идеальным мостом между любовью к дороге и любовью к технологиям. Я уже на второй день воткнул провод Ethernet в машину, для легкого доступа, изучил Tesla API и даже написал пару приложений для машины. И знаете что? Настоящее увлечение не просто даёт радость — оно держит в тонусе и не даёт сгореть на работе. А если хобби общее — это лучший work/life balance ❤️ 📌 Подробнее о нашем автопутешествии, электромобилях, их особенностях и конечно о технология— в моём новом канале @ElectroNomad

Хз

Так как все же канал - больше личный блог, решил что уместнее всего все таки меня, в стиле Гибли 🙂

Они из чата убрали все свои остальные модели. Теперь точно не запутаешься.
Они из чата убрали все свои остальные модели. Теперь точно не запутаешься.

Вы знаете, я тот человек который не любит ждать. С учетом санкций стала еще болезненей - каждая презентация Apple, это прям у
Вы знаете, я тот человек который не любит ждать. С учетом санкций стала еще болезненей - каждая презентация Apple, это прям удар под дых (правда не может не радовать, что я пока ждал русский для их AI, они так и не выпустили вообще полноценное решение не для кого). Даже Google в своей рекламе на этом сыграл, что ты можешь не ждать, а просто поменять свой телефон на тот в котором уже все есть (реклама Pixel). OpenAPI прям респект, за то что после презентации, сразу дали возможность воспользоваться новым продуктом.

Итоги презентации - быстрее и лучше конечно. Голосовой режим сильно лучше. Claude в кодинге уделили и опять стали номер 1. Ос
Итоги презентации - быстрее и лучше конечно. Голосовой режим сильно лучше. Claude в кодинге уделили и опять стали номер 1. Особенно номер один по мастерству презентации - зацените как 52.8 больше 69.1. Доступно будет для всех уже сегодня (может даже уже доступно, но у меня с VPN в последнее время мобильная версия вообще не работает).