Исследователи заставили современную электронику выдавать данные по радио
Метод InjectEave превращает случайные внутренние антенны устройства в канал утечки. На устройство направляют радиосигнал подходящей частоты. Нелинейные компоненты смешивают его с рабочими сигналами схемы, после чего наружу уходит излучение с данными. Без такого воздействия заметной утечки в опытах не обнаружили.
В экспериментах исследователи восстановили звук из проводных и беспроводных наушников и определили состояние умной лампы и вентилятора. Сигнал проходил даже сквозь стены на небольшой дистанции, а усилитель увеличил дальность до 30 метров.
В демонстрации с интернет-телефоном они перехватили речь, клонировали голос и внедрили новую фразу в звонок в реальном времени. Для атаки нужно активно облучать цель и принимать ответное излучение: результаты пока относятся к исследовательской установке.
Метод InjectEave превращает случайные внутренние антенны устройства в канал утечки. На устройство направляют радиосигнал подходящей частоты. Нелинейные компоненты смешивают его с рабочими сигналами схемы, после чего наружу уходит излучение с данными. Без такого воздействия заметной утечки в опытах не обнаружили.
В экспериментах исследователи восстановили звук из проводных и беспроводных наушников и определили состояние умной лампы и вентилятора. Сигнал проходил даже сквозь стены на небольшой дистанции, а усилитель увеличил дальность до 30 метров.
В демонстрации с интернет-телефоном они перехватили речь, клонировали голос и внедрили новую фразу в звонок в реальном времени. Для атаки нужно активно облучать цель и принимать ответное излучение: результаты пока относятся к исследовательской установке.
🔥12👍8❤5👀5🤪5😈3💘3🕊2🤷♀1👎1😨1
Kubernetes 1.37 перевёл rootless kubelet в beta
В релизе Kubernetes 1.37 kubelet разрешили запускать на хосте без прав root, внутри пространства пользователей Linux. Флаг
У kubelet становится меньше прав на хосте. Разработчики рассчитывают, что это сократит ущерб при побеге контейнера из изоляции.
Режим пока находится в beta: возможность уже доступна по умолчанию, но ещё не объявлена стабильной. Для эксперимента стоит отдельно проверить работу kubelet без root на своих узлах и не принимать beta за готовность к любой инфраструктуре.
В релизе Kubernetes 1.37 kubelet разрешили запускать на хосте без прав root, внутри пространства пользователей Linux. Флаг
KubeletInUserNamespace включён по умолчанию.У kubelet становится меньше прав на хосте. Разработчики рассчитывают, что это сократит ущерб при побеге контейнера из изоляции.
Режим пока находится в beta: возможность уже доступна по умолчанию, но ещё не объявлена стабильной. Для эксперимента стоит отдельно проверить работу kubelet без root на своих узлах и не принимать beta за готовность к любой инфраструктуре.
👍12🎉5🥰2🤔2🙏2🕊2👀2✍1👌1🍓1🗿1
Почему max_connections не ускоряет PostgreSQL
Пять тысяч разрешённых соединений выглядят как запас мощности, но пропускную способность PostgreSQL определяют ядра и хранилище.
На PostgreSQL 18.6 рост лимита со 100 до 5000 увеличил общую память со 150 до 389 МБ. При этом 17-е активное соединение на машине с 16 ядрами уже добавляет переключения контекста и очередь. А 400 активных запросов с тремя хеш-объединениями каждый могут одновременно запросить 1200 порций
Поэтому лимит стоит считать как бюджет, а приложения подключать через PgBouncer в режиме пула транзакций. Для большинства производственных систем расчёт с учётом репликации, мониторинга и ручных подключений даёт 100–300 соединений.
Пять тысяч разрешённых соединений выглядят как запас мощности, но пропускную способность PostgreSQL определяют ядра и хранилище.
max_connections решает другое: сколько серверных процессов база допустит до отказа и сколько общей памяти заранее выделит под их структуры.На PostgreSQL 18.6 рост лимита со 100 до 5000 увеличил общую память со 150 до 389 МБ. При этом 17-е активное соединение на машине с 16 ядрами уже добавляет переключения контекста и очередь. А 400 активных запросов с тремя хеш-объединениями каждый могут одновременно запросить 1200 порций
work_mem.Поэтому лимит стоит считать как бюджет, а приложения подключать через PgBouncer в режиме пула транзакций. Для большинства производственных систем расчёт с учётом репликации, мониторинга и ручных подключений даёт 100–300 соединений.
🫡14👍5❤4🔥4👏4👎1😐1😴1👨💻1💘1💊1
Как быстрые хеш-функции ломаются на специально подобранных данных
Обычный бенчмарк показывает скорость на удобных данных. Атакующий подбирает другие: разные ключи получают одинаковый хеш и попадают в одну ячейку таблицы. Вместо быстрых операций начинается перебор множества значений, вплоть до отказа в обслуживании.
Автор с помощью Claude Fable разобрал популярные функции из набора тестов SMHasher. У большинства нашлись входы с устойчивостью к коллизиям минимум на 20 бит хуже ожидаемой. Для CityHash64, FarmHash64 и MurmurHash3 удалось построить сколько угодно входов, которые сталкиваются при любом секретном ключе.
Интерактивное сравнение скорости и гарантий отделяет доказанные оценки от найденных контрпримеров. Практический вывод: если сервис принимает чужие данные, одной пропускной способности хеша недостаточно. Нужны доказанные гарантии, а ещё лучше проверенные в Lean.
Обычный бенчмарк показывает скорость на удобных данных. Атакующий подбирает другие: разные ключи получают одинаковый хеш и попадают в одну ячейку таблицы. Вместо быстрых операций начинается перебор множества значений, вплоть до отказа в обслуживании.
Автор с помощью Claude Fable разобрал популярные функции из набора тестов SMHasher. У большинства нашлись входы с устойчивостью к коллизиям минимум на 20 бит хуже ожидаемой. Для CityHash64, FarmHash64 и MurmurHash3 удалось построить сколько угодно входов, которые сталкиваются при любом секретном ключе.
Интерактивное сравнение скорости и гарантий отделяет доказанные оценки от найденных контрпримеров. Практический вывод: если сервис принимает чужие данные, одной пропускной способности хеша недостаточно. Нужны доказанные гарантии, а ещё лучше проверенные в Lean.
❤10👍6🏆4✍3🔥2💯2🗿2🆒2😢1🤪1🙊1
Дрон научили ориентироваться механическими усами
В темноте, дыму и пыли камеры и лидар могут подвести. Исследователи Делфтского технического университета оснастили дрон легче 100 г двумя усами, чтобы он находил путь на ощупь.
Каждый ус соединили с тремя миниатюрными датчиками давления. По изменению их показаний дрон оценивает положение поверхности, обходит препятствия, движется вдоль неё и может составлять карту.
Винты создают поток воздуха, поэтому бортовая программа отделяет турбулентность от касания. Ей хватает 34 КБ памяти, а точность остаётся миллиметровой. Такой сенсор может пригодиться маленьким поисково-спасательным дронам для обследования завалов без риска для людей и животных.
В темноте, дыму и пыли камеры и лидар могут подвести. Исследователи Делфтского технического университета оснастили дрон легче 100 г двумя усами, чтобы он находил путь на ощупь.
Каждый ус соединили с тремя миниатюрными датчиками давления. По изменению их показаний дрон оценивает положение поверхности, обходит препятствия, движется вдоль неё и может составлять карту.
Винты создают поток воздуха, поэтому бортовая программа отделяет турбулентность от касания. Ей хватает 34 КБ памяти, а точность остаётся миллиметровой. Такой сенсор может пригодиться маленьким поисково-спасательным дронам для обследования завалов без риска для людей и животных.
❤🔥18👍7🤣6❤4🤷4🎉3😢2👌1💔1😐1👨💻1
Как Canva разгрузила MySQL с помощью S3
При запуске сотни шлюзов Canva загружали из MySQL более миллиона записей об отозванных сессиях. Деплой превращался в одновременный набег на базу, а добавление реплик лишь временно смягчало проблему.
В разборе новой схемы загрузки кеша инженеры делят данные на 30-минутные сегменты в S3. Каждая запись занимает 16 байт, а сортировка позволяет искать её прямо в скачанном массиве, без преобразования в Java-объекты.
Несколько фоновых процессов дописывают сегменты через условные PUT-запросы: S3 принимает запись, только если объект не изменился после чтения. Выбор лидера уменьшает число конфликтов, но не гарантирует корректность: прежний лидер может приостановиться и вернуться после смены. В итоге кеш занял на 87,5% меньше памяти, а MySQL оставили две реплики для резервирования.
При запуске сотни шлюзов Canva загружали из MySQL более миллиона записей об отозванных сессиях. Деплой превращался в одновременный набег на базу, а добавление реплик лишь временно смягчало проблему.
В разборе новой схемы загрузки кеша инженеры делят данные на 30-минутные сегменты в S3. Каждая запись занимает 16 байт, а сортировка позволяет искать её прямо в скачанном массиве, без преобразования в Java-объекты.
Несколько фоновых процессов дописывают сегменты через условные PUT-запросы: S3 принимает запись, только если объект не изменился после чтения. Выбор лидера уменьшает число конфликтов, но не гарантирует корректность: прежний лидер может приостановиться и вернуться после смены. В итоге кеш занял на 87,5% меньше памяти, а MySQL оставили две реплики для резервирования.
👏5👍3⚡1🥰1😁1🤔1🎉1👌1🤓1🤝1🤷1
Как в Rustrak ускорили обработку ошибок и снизили пиковую память
В трекере ошибок Rustrak задачи съедали память ещё до начала работы: каждая ждала своей очереди с состоянием на 5,5 КБ. Авторы нашли это при профилировании всплеска из 20 тысяч ошибок.
Теперь полное состояние задачи создаётся только после допуска к обработке. Заодно девять переходов между потоками на сохранение события заменили одним: запись файла и синхронизацию с диском выполняют вместе.
В тесте с SQLite пиковая память упала со 195 до 53 МБ, а скорость обработки выросла примерно с 510 до 1000 событий в секунду. Генератор нагрузки работал на той же четырёхъядерной машине. В разборе профилирования и правок есть и проверка аварийного восстановления: после перезапуска каждое подтверждённое событие обработалось ровно один раз.
#инструменты
В трекере ошибок Rustrak задачи съедали память ещё до начала работы: каждая ждала своей очереди с состоянием на 5,5 КБ. Авторы нашли это при профилировании всплеска из 20 тысяч ошибок.
Теперь полное состояние задачи создаётся только после допуска к обработке. Заодно девять переходов между потоками на сохранение события заменили одним: запись файла и синхронизацию с диском выполняют вместе.
В тесте с SQLite пиковая память упала со 195 до 53 МБ, а скорость обработки выросла примерно с 510 до 1000 событий в секунду. Генератор нагрузки работал на той же четырёхъядерной машине. В разборе профилирования и правок есть и проверка аварийного восстановления: после перезапуска каждое подтверждённое событие обработалось ровно один раз.
#инструменты
rustrak.github.io
Half the memory, twice the throughput: a pass over ingest and digest
A 20k-event burst used to push the server to 195 MB and 2.3k requests per second. After profiling the pipeline it sits at 53 MB and 5k, with the same durability guarantees and no API change.
😁4🎉3🤔2🤓2⚡1☃1🏆1💋1🤪1🦄1🙊1
Как собрать фаззер для поиска ошибок в регулярных выражениях на Rust
В старой версии библиотеки regex выражение
В разборе с кодом автор сравнивает результаты regex и regex_lite на одинаковых выражениях и строках. Вместо огромных входных данных генерирует короткие строки, меняет набор букв и частоту операторов. Так проверяет сочетания нескольких возможностей, на которых могут возникать ошибки.
В последней версии ошибок не нашлось. Автор заранее знал искомый баг, поэтому эксперимент не доказывает превосходство случайных тестов над модульными. Зато показывает приёмы проверки алгоритмов через сравнение реализаций.
#инструменты
В старой версии библиотеки regex выражение
.abb|b находило в строке zabb только b, хотя совпадала вся строка. Автор собрал фаззер, тест, который генерирует случайные входные данные, и нашёл ещё одну ошибку, прежде чем воспроизвести искомую.В разборе с кодом автор сравнивает результаты regex и regex_lite на одинаковых выражениях и строках. Вместо огромных входных данных генерирует короткие строки, меняет набор букв и частоту операторов. Так проверяет сочетания нескольких возможностей, на которых могут возникать ошибки.
В последней версии ошибок не нашлось. Автор заранее знал искомый баг, поэтому эксперимент не доказывает превосходство случайных тестов над модульными. Зато показывает приёмы проверки алгоритмов через сравнение реализаций.
#инструменты
matklad.github.io
Finding Bugs
Are generative (randomized) tests significantly more effective than example-based unit-tests at discovering bugs? There's an interesting discussion about this on lobste.rs. One argument in favor of unit tests is, paraphrasing
👍4😁3😘2❤1🤔1😴1👨💻1🙊1
Как Canva научила обработчики очередей замедляться при сбоях
За четыре часа сбоев облачного провайдера в очередь окончательно неудачных сообщений у Canva попало всего одно сообщение. Обработчик сам снижал нагрузку на сбоящие сервисы и набирал скорость после их восстановления.
Механизм встроили в библиотеку очередей: обработчик фиксирует успехи и ошибки, а контроллер по этим результатам сокращает число сообщений, которые можно обрабатывать одновременно. Остальная работа ждёт в очереди. Решение принимается локально, без дополнительных сетевых запросов.
В разборе Worker Backpressure команда сравнивает подход с фиксированными лимитами, полной остановкой запросов при сбоях и задержками повторных попыток. Там же разбирает два рабочих инцидента: короткие всплески ошибок и перегрузку на 32,5 часа.
#облака
За четыре часа сбоев облачного провайдера в очередь окончательно неудачных сообщений у Canva попало всего одно сообщение. Обработчик сам снижал нагрузку на сбоящие сервисы и набирал скорость после их восстановления.
Механизм встроили в библиотеку очередей: обработчик фиксирует успехи и ошибки, а контроллер по этим результатам сокращает число сообщений, которые можно обрабатывать одновременно. Остальная работа ждёт в очереди. Решение принимается локально, без дополнительных сетевых запросов.
В разборе Worker Backpressure команда сравнивает подход с фиксированными лимитами, полной остановкой запросов при сбоях и задержками повторных попыток. Там же разбирает два рабочих инцидента: короткие всплески ошибок и перегрузку на 32,5 часа.
#облака
❤4🔥3😁1🤔1🕊1😨1🤗1🆒1
Общая папка для работы Claude Code и Codex
Луи-Франсуа Бушар собрал заметки, инструкции-скиллы, скрипты и итоги встреч в Obsidian. Его связка устроена так:
Папка хранит исходные материалы и решения
↓
Индекс указывает, где искать данные для задачи
↓
Claude Code планирует работу
↓
Codex выполняет задачи по его вызову
В описании этого рабочего процесса Бушар объясняет, зачем даёт агенту сведения для конкретной задачи. Начать предлагает с общей папки, короткого индекса и одного повторно используемого скилла.
#ии #инструменты
Луи-Франсуа Бушар собрал заметки, инструкции-скиллы, скрипты и итоги встреч в Obsidian. Его связка устроена так:
Папка хранит исходные материалы и решения
↓
Индекс указывает, где искать данные для задачи
↓
Claude Code планирует работу
↓
Codex выполняет задачи по его вызову
В описании этого рабочего процесса Бушар объясняет, зачем даёт агенту сведения для конкретной задачи. Начать предлагает с общей папки, короткого индекса и одного повторно используемого скилла.
#ии #инструменты
👍3👎3🤗2🔥1😘1
Типичный программист
Общая папка для работы Claude Code и Codex Луи-Франсуа Бушар собрал заметки, инструкции-скиллы, скрипты и итоги встреч в Obsidian. Его связка устроена так: Папка хранит исходные материалы и решения ↓ Индекс указывает, где искать данные для задачи ↓ Claude…
Приходится ли вам копипастить данные и какие именно, когда переходите из одной нейросети в другую?
Anonymous Poll
17%
Код
28%
Описание задачи
12%
Документацию
20%
Результаты работы
18%
Настройки и контекст: историю чатов, промпты, скиллы
52%
Ничего, использую один инструмент
😐3✍2🤔2❤🔥1🔥1🎉1👨💻1🤝1
Зачем CPython предлагают Rust и почему начинают с zlib
Миллион строк C за один раз не перенести. Команда Rust for CPython предлагает начать с небольшого модуля zlib: он сжимает данные и широко используется при упаковке Python-пакетов. Замена на zlib-rs может ускорить почти каждый pip install, если предложение примут.
По предложенной дорожной карте реализация на Rust появится в Python 3.16 как опция, а версия на C останется запасной. Сроки условны, переход ещё не принят. Rust тоже не гарантирует отсутствие ошибок: команда планирует проверять код тестами, в том числе на случайных входных данных.
В разборе постепенного внедрения Rust есть и условия продолжения: поддержка всех платформ CPython, отсутствие заметного замедления и готовность разработчиков ядра работать с Rust.
#python
Миллион строк C за один раз не перенести. Команда Rust for CPython предлагает начать с небольшого модуля zlib: он сжимает данные и широко используется при упаковке Python-пакетов. Замена на zlib-rs может ускорить почти каждый pip install, если предложение примут.
По предложенной дорожной карте реализация на Rust появится в Python 3.16 как опция, а версия на C останется запасной. Сроки условны, переход ещё не принят. Rust тоже не гарантирует отсутствие ошибок: команда планирует проверять код тестами, в том числе на случайных входных данных.
В разборе постепенного внедрения Rust есть и условия продолжения: поддержка всех платформ CPython, отсутствие заметного замедления и готовность разработчиков ядра работать с Rust.
#python
🤔11❤8🔥7💅3✍1☃1👎1🙏1👀1🗿1🦄1
Как нашли причину антивирусной тревоги в Tauri-приложении и заменили шифрование
Добавили шифрование файлов с аккаунтами, и Microsoft стал помечать приложение как троян. Так произошло с Roblox Account Manager. Сравнение старой и новой сборок сначала завело автора в тупик: набор подозрительных системных вызовов не изменился.
Тогда автор запустил
В разборе замены на RustCrypto есть тест совместимости: новый код должен расшифровать данные, созданные старым. Файлы пользователей остались читаемыми, а exe перестал вызывать тревогу.
#безопасность
Добавили шифрование файлов с аккаунтами, и Microsoft стал помечать приложение как троян. Так произошло с Roblox Account Manager. Сравнение старой и новой сборок сначала завело автора в тупик: набор подозрительных системных вызовов не изменился.
Тогда автор запустил
git bisect: на каждом шаге собирал exe и проверял его через VirusTotal, сужая поиск до одного коммита. Тот добавлял sodiumoxide, библиотеку шифрования. Почему именно она вызвала тревогу, автор объясняет своей гипотезой о работе классификатора Microsoft.В разборе замены на RustCrypto есть тест совместимости: новый код должен расшифровать данные, созданные старым. Файлы пользователей остались читаемыми, а exe перестал вызывать тревогу.
#безопасность
👍5❤2😁2🔥1👏1🤔1
🧑💻 Какие навыки помогают вам в разработке в 2026 году?
Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно?
Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему.
Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании.
👉 Пройти опрос
Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно?
Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему.
Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании.
👉 Пройти опрос
🔥4🎉2🌭2❤1👍1😢1😐1😈1🆒1
Измеритель INP тоже может ошибаться
В SpeedCurve нашли баг в lux.js: обёртка передавала durationThreshold во вложенном options, хотя PerformanceObserver ждёт этот параметр на верхнем уровне. Браузер не видел настройку и применял стандартный порог 104 мс.
Что это меняло? Взаимодействия короче 104 мс не попадали в обычный Event Timing observer. Например, запись о событии длительностью 80 мс могла отсутствовать. Это могло влиять на рассчитанное INP и определение событий, которые его сформировали.
В lux.js 4.5.3 вложенность исправили и добавили браузерный тест. Перед сравнением графиков проверьте версию сборщика и отметьте момент обновления: распределение могло измениться из-за измерения, а не вашего релиза.
Разбор ошибки
#веб #производительность
В SpeedCurve нашли баг в lux.js: обёртка передавала durationThreshold во вложенном options, хотя PerformanceObserver ждёт этот параметр на верхнем уровне. Браузер не видел настройку и применял стандартный порог 104 мс.
Что это меняло? Взаимодействия короче 104 мс не попадали в обычный Event Timing observer. Например, запись о событии длительностью 80 мс могла отсутствовать. Это могло влиять на рассчитанное INP и определение событий, которые его сформировали.
В lux.js 4.5.3 вложенность исправили и добавили браузерный тест. Перед сравнением графиков проверьте версию сборщика и отметьте момент обновления: распределение могло измениться из-за измерения, а не вашего релиза.
Разбор ошибки
#веб #производительность
Csswizardry
Web-Perf Wednesday 011 – SpeedCurve’s INP Observer Missed Its Threshold – CSS Wizardry
A long-standing lux.js bug left Event Timing on its 104 ms default, while browser releases improve testing and rendering performance.
😁2🤔2💯2🍌2❤🔥1👏1🐳1🤣1🍓1🍾1😈1
Как IRC-сеть из 1998 года пересобрали на Go и WebAssembly
28-летняя Yudum.NET теперь помещается в один исполняемый файл на Go: сервер чата, сайт и веб-чат работают в одном процессе с базой SQLite. Никнейм служит учётной записью на сайте, а старые IRC-клиенты по-прежнему подключаются.
Веб-чат тоже написан на Go: TinyGo компилирует его в WebAssembly для запуска в браузере. Один и тот же код проверяет ход в игре на сервере и рисует стол в чате. Цена решения: несколько мегабайт браузерного модуля и сборка, которая занимает минуты.
В разборе переписывания Yudum.NET есть и история борьбы с перезапусками: временный процесс обслуживает веб-запросы, пока запускается новая версия. Сайт не гаснет, но IRC-соединения ещё обрываются. Эту часть предстоит решить.
#веб
28-летняя Yudum.NET теперь помещается в один исполняемый файл на Go: сервер чата, сайт и веб-чат работают в одном процессе с базой SQLite. Никнейм служит учётной записью на сайте, а старые IRC-клиенты по-прежнему подключаются.
Веб-чат тоже написан на Go: TinyGo компилирует его в WebAssembly для запуска в браузере. Один и тот же код проверяет ход в игре на сервере и рисует стол в чате. Цена решения: несколько мегабайт браузерного модуля и сборка, которая занимает минуты.
В разборе переписывания Yudum.NET есть и история борьбы с перезапусками: временный процесс обслуживает веб-запросы, пока запускается новая версия. Сайт не гаснет, но IRC-соединения ещё обрываются. Эту часть предстоит решить.
#веб
👍4🎉3🎄2🤷♀1🔥1😁1💋1😈1🎃1🆒1👾1
Почему доставка сообщения не гарантирует выполнение платежа
Брокер доставил команду провести платёж, но обработчик может упасть при её выполнении или обращении к платёжному сервису. Подтверждение доставки ещё не подтверждает результат.
В схеме отслеживания завершения отправитель публикует команду и сохраняет идентификатор платежа со статусом PENDING, то есть ожидает результата. После выполнения обработчик отправляет подтверждение с тем же идентификатором. Получив его, отправитель меняет статус на COMPLETE: работа завершена.
Если остался PENDING, исход неизвестен: платёж мог сорваться, а мог пройти без обработанного подтверждения. В зависимости от сценария может потребоваться запросить результат у платёжной системы, прежде чем решать, повторять ли операцию. Такой контроль добавляет хранение состояний, компоненты и новые точки отказа.
Брокер доставил команду провести платёж, но обработчик может упасть при её выполнении или обращении к платёжному сервису. Подтверждение доставки ещё не подтверждает результат.
В схеме отслеживания завершения отправитель публикует команду и сохраняет идентификатор платежа со статусом PENDING, то есть ожидает результата. После выполнения обработчик отправляет подтверждение с тем же идентификатором. Получив его, отправитель меняет статус на COMPLETE: работа завершена.
Если остался PENDING, исход неизвестен: платёж мог сорваться, а мог пройти без обработанного подтверждения. В зависимости от сценария может потребоваться запросить результат у платёжной системы, прежде чем решать, повторять ли операцию. Такой контроль добавляет хранение состояний, компоненты и новые точки отказа.
❤3🤔2👎1💯1🍌1🗿1
Листаете ленту, открываете ролик, переходите в сообщество автора — всё внутри ВКонтакте. За этими привычными действиями стоят разные системы и команды. Каждой нужна возможность развивать свою часть продукта и выпускать обновления в собственном темпе.
В прошлом году ВКонтакте начала переход на сервисную архитектуру: пользовательские сценарии постепенно переносили в отдельные сервисы, пока продуктовые команды продолжали выпускать обновления. Для подготовки новых сервисов создали внутреннюю платформу разработки. Она автоматизирует типовые операции — теперь подготовка занимает часы вместо недель.
Трансформация затронула и веб-версию. Основные разделы перевели на SPA: браузер обновляет нужные части интерфейса без полной перезагрузки страницы. В результате страницы открываются на 25% быстрее, а переходы между разделами ускорились в 3,5 раза.
Вместе с техническим директором ВКонтакте Юрием Кочаряном разобрали, как проходили эти изменения, что помогло командам ускорить разработку и какие подходы можно применить в своём проекте.
https://tproger.ru/articles/kak-perestraivat-produkt-kotorym-ezhednevno-polzuyutsya-65-milli
В прошлом году ВКонтакте начала переход на сервисную архитектуру: пользовательские сценарии постепенно переносили в отдельные сервисы, пока продуктовые команды продолжали выпускать обновления. Для подготовки новых сервисов создали внутреннюю платформу разработки. Она автоматизирует типовые операции — теперь подготовка занимает часы вместо недель.
Трансформация затронула и веб-версию. Основные разделы перевели на SPA: браузер обновляет нужные части интерфейса без полной перезагрузки страницы. В результате страницы открываются на 25% быстрее, а переходы между разделами ускорились в 3,5 раза.
Вместе с техническим директором ВКонтакте Юрием Кочаряном разобрали, как проходили эти изменения, что помогло командам ускорить разработку и какие подходы можно применить в своём проекте.
https://tproger.ru/articles/kak-perestraivat-produkt-kotorym-ezhednevno-polzuyutsya-65-milli
💊1