Forwarded from Находки в опенсорсе
В Python3.14 добавили новую библиотеку для сжатия: Zstandard
- PEP: https://peps.python.org/pep-0784
- Документация: https://docs.python.org/3.14/library/compression.zstd.html
- Реализация: https://github.com/python/cpython/pull/133027
Существует такой новый алгоритм для сжатия: Zstandard c хорошим процентом сжатия и быстрым алгоритмом сжатия / разжатия. Его добавили в 3.14 как нативный модуль. И как раз заодно решили прибрать все другие алгоритмы в общий модуль
Теперь:
-
-
-
Пока данные новые модули просто делают re-export всех объектов из оригинальных модулей. Однако, в какой-то момент старые имена могут быть задеприкейчены.
> Any deprecation or removal of the existing modules is left to a future decision but will occur no sooner than 5 years from the acceptance of this PEP.
Как работает?
Сам алгоритм сжатия хорошо описан в соответствующем RFC. Его лучше почитать отдельно. Тем, кому такое интересно.
А мы поговорим про питоновскую часть.
Теперь питон зависит от новой опциональной библиотеки
Мы используем AutoConf или
Самая важная часть:
Генерируется в результате вот такой трешняк: https://github.com/python/cpython/blob/30dde1eeb3fa1e0e7417f9cdded8fd90766f2559/configure#L22587-L22946
Данная мешанина из shell, C кода в строках и безумной обработки ошибок делает следующее:
- записывает файл с Сишным кодом
- вставляет туда нужные хедеры
- пытается скомпилировать
- если получилось, то пишет один конфиг
- если нет, то сборка понимает, что библиотеки нет, пишется другой конфиг
- на основе
Вот тут мы указываем, какие части компилировать, если такая библиотека есть:
Посмотрим, как выглядит
А если такой библиотеки нет – то в итоговом
Обсуждение: как вам данный алгоритм сжатия? Как вам система сборки питона?
- PEP: https://peps.python.org/pep-0784
- Документация: https://docs.python.org/3.14/library/compression.zstd.html
- Реализация: https://github.com/python/cpython/pull/133027
Существует такой новый алгоритм для сжатия: Zstandard c хорошим процентом сжатия и быстрым алгоритмом сжатия / разжатия. Его добавили в 3.14 как нативный модуль. И как раз заодно решили прибрать все другие алгоритмы в общий модуль
compression.*Теперь:
-
compression.lzma отвечает за lzma-
compression.zstd за Zstandard-
compression.gzip за gzip и так далееПока данные новые модули просто делают re-export всех объектов из оригинальных модулей. Однако, в какой-то момент старые имена могут быть задеприкейчены.
> Any deprecation or removal of the existing modules is left to a future decision but will occur no sooner than 5 years from the acceptance of this PEP.
Как работает?
Сам алгоритм сжатия хорошо описан в соответствующем RFC. Его лучше почитать отдельно. Тем, кому такое интересно.
А мы поговорим про питоновскую часть.
Теперь питон зависит от новой опциональной библиотеки
zstd.h, что будет, если ее нет? И тут мы должны познакомиться с системой конфигурации и сборки питона.Мы используем AutoConf или
.ac. Данный зверь – свой большой мир, который хочется как раз показать на примере. Спорим, вы не сможете с первого раза прочитать данную конструкцию?
dnl zstd 1.4.5 stabilised ZDICT_finalizeDictionary
PKG_CHECK_MODULES([LIBZSTD], [libzstd >= 1.4.5], [have_libzstd=yes], [
WITH_SAVE_ENV([
CPPFLAGS="$CPPFLAGS $LIBZSTD_CFLAGS"
CFLAGS="$CFLAGS $LIBZSTD_CFLAGS"
LIBS="$LIBS $LIBZSTD_LIBS"
AC_SEARCH_LIBS([ZDICT_finalizeDictionary], [zstd], [
AC_MSG_CHECKING([ZSTD_VERSION_NUMBER >= 1.4.5])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([@%:@include "zstd.h"], [
#if ZSTD_VERSION_NUMBER < 10405
# error "zstd version is too old"
#endif
])
], [
AC_MSG_RESULT([yes])
AC_CHECK_HEADERS([zstd.h zdict.h], [have_libzstd=yes], [have_libzstd=no])
], [
AC_MSG_RESULT([no])
have_libzstd=no
])
], [have_libzstd=no])
AS_VAR_IF([have_libzstd], [yes], [
LIBZSTD_CFLAGS=${LIBZSTD_CFLAGS-""}
LIBZSTD_LIBS=${LIBZSTD_LIBS-"-lzstd"}
])
])
])
Самая важная часть:
AC_CHECK_HEADERS([zstd.h zdict.h], [have_libzstd=yes], [have_libzstd=no]), она проверяет наличие нужных хедеров / зависимостей для компиляции. Данный код создает несколько проверок при генерации файла ./configure, которые позволяют проверить, есть ли такая библиотека на машине сборки.Генерируется в результате вот такой трешняк: https://github.com/python/cpython/blob/30dde1eeb3fa1e0e7417f9cdded8fd90766f2559/configure#L22587-L22946
Данная мешанина из shell, C кода в строках и безумной обработки ошибок делает следующее:
- записывает файл с Сишным кодом
- вставляет туда нужные хедеры
- пытается скомпилировать
- если получилось, то пишет один конфиг
- если нет, то сборка понимает, что библиотеки нет, пишется другой конфиг
- на основе
./configure потом собирается правильный Makefile для компиляции самого питонаВот тут мы указываем, какие части компилировать, если такая библиотека есть:
@MODULE__ZSTD_TRUE@_zstd _zstd/_zstdmodule.c _zstd/zstddict.c _zstd/compressor.c _zstd/decompressor.c
Посмотрим, как выглядит
Makefile, если библиотека есть:
MODULE__ZSTD_STATE=yes
MODULE__ZSTD_CFLAGS=-I/opt/homebrew/opt/zstd/include
MODULE__ZSTD_LDFLAGS=-L/opt/homebrew/opt/zstd/lib -lzstd
Modules/_zstd/_zstdmodule.o: $(srcdir)/Modules/_zstd/_zstdmodule.c $(MODULE__ZSTD_DEPS) $(MODULE_DEPS_SHARED) $(PYTHON_HEADERS); $(CC) $(MODULE__ZSTD_CFLAGS) $(PY_STDMODULE_CFLAGS) $(CCSHARED) -c $(srcdir)/Modules/_zstd/_zstdmodule.c -o Modules/_zstd/_zstdmodule.o
# ...
А если такой библиотеки нет – то в итоговом
Makefile просто не будет данной цели для сборки.Обсуждение: как вам данный алгоритм сжатия? Как вам система сборки питона?
Python Enhancement Proposals (PEPs)
PEP 784 – Adding Zstandard to the standard library | peps.python.org
Zstandard is a widely adopted, mature, and highly efficient compression standard. This PEP proposes adding a new module to the Python standard library containing a Python wrapper around Meta’s zstd library, the default implementation. Additionally, to a...
👍9😐5👾4🤯2❤1🔥1
Forwarded from Ever Secure (Aleksey Fedulaev)
Друзья, это свершилось! 😱✨
Честно? Мы сами до конца не верили, что этот день настанет... но она — в печати!
Да-да, наша книга теперь существует в реальном, бумажном формате 📖🔥
Уже завтра мы забираем первую партию, и поверьте, она выглядит круче, чем мы ожидали!
А совсем скоро вы тоже сможете её заказать — предзаказ уже на подходе 👀
Следите за новостями, будет кое-что интересное… Может быть, даже небольшой сюрприз для первых заказов?🤔
👀 @ever_secure
Честно? Мы сами до конца не верили, что этот день настанет... но она — в печати!
Да-да, наша книга теперь существует в реальном, бумажном формате 📖🔥
Уже завтра мы забираем первую партию, и поверьте, она выглядит круче, чем мы ожидали!
А совсем скоро вы тоже сможете её заказать — предзаказ уже на подходе 👀
Следите за новостями, будет кое-что интересное… Может быть, даже небольшой сюрприз для первых заказов?🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍7💊5😁4🤔3❤2👌1🥱1🙈1
Хорошая подборка триков и пояснений некоторых моментов при работе с PostgreSQL
Автор справедливо говорит о том, что документация PG хорошая, но объёмная.
https://www.postgresql.org/files/documentation/pdf/17/postgresql-17-US.pdf
Поэтому он собрал штуки, которые, как ему видится, было бы знать полезно до того, как он начал плотно работать с PG
Я вынесу список разделов, который присутствует в посте
What I Wish Someone Told Me About Postgres
https://challahscript.com/what_i_wish_someone_told_me_about_postgres
Автор справедливо говорит о том, что документация PG хорошая, но объёмная.
https://www.postgresql.org/files/documentation/pdf/17/postgresql-17-US.pdf
Поэтому он собрал штуки, которые, как ему видится, было бы знать полезно до того, как он начал плотно работать с PG
So I want to try to catalog the bits that I wish someone had just told me before working with a Postgres database. Hopefully, this makes things easier for the next person going on a journey similar to mine.
Note that many of these things may also apply to other SQL database management systems (DBMSs) or other databases more generally, but I’m not as familiar with others so I’m not sure what does and does not apply.
Я вынесу список разделов, который присутствует в посте
- Normalize your data unless you have a good reason not to
- Follow all the advice from the folks that make Postgres
- Note some general SQL eccentricities
* Saving your pinkies: you don’t have to write SQL in all caps
* NULL is weird
- You can make psql more useful
* Fix your unreadable output
* Clarify ambiguous nulls
* Use auto-completion
* Lean on backslash shortcuts
* Copy to a CSV
* Use column shorthands and aliases
- It’s possible that adding an index will do nothing (particularly if it’s misconfigured)
* What is an index?
* An index isn’t much use for a table with barely any rows in it
* When indexing multiple columns, the order matters
* If doing prefix matches, use text_pattern_ops
- Long-held locks can break your app (even ACCESS SHARE)
* What is a lock?
* How locks work in Postgres
* How this can cause problems
* Long-running transactions can be just as bad
- JSONB is a sharp knife
* JSONB can be slower than normal columns
* JSONB is not as self-documenting as a standard table schema
* JSONB Postgres types are a bit awkward to work with
What I Wish Someone Told Me About Postgres
https://challahscript.com/what_i_wish_someone_told_me_about_postgres
✍16👍7🔥7❤1
Пример того, как реверсили игру Sword of Convallaria
https://steamdb.info/app/2526380/
A Roadmap to Security Game Testing: Finding Exploits in Video Games
https://shalzuth.com/Blog/FindingExploitsInGames
Сама игра сделана на Unity, поэтому использовалась утилита https://github.com/nesrak1/AssetsTools.NET для извлечения данных
"Под капотом" автор нашёл Lua и protobuf.
С Lua разобрался через https://github.com/pangweiwei/slua, там много подробностей, но если кратко, то там первым шёл XOR, а потом ещё один слой шифрования.
Далее идёт разбор сетевого взаимодействия. В этом случае, так же и на прошлом шаге, помогло, что игра сделана на Unity
Далее разбор пакетов через https://github.com/pawitp/protobuf-decoder и поиск опкодов в Lua
Исходный код наработок для статьи лежит тут - https://github.com/shalzuth/SwordOfConvallariaResearch
https://steamdb.info/app/2526380/
A Roadmap to Security Game Testing: Finding Exploits in Video Games
https://shalzuth.com/Blog/FindingExploitsInGames
High-Level Plan for Reverse Engineering
1. Extract raw files to outline the packet structures and translating IDs into English strings.
2. Analyze the login authentication flow and lobby server.
3. Investigate game traffic and server interactions.
Сама игра сделана на Unity, поэтому использовалась утилита https://github.com/nesrak1/AssetsTools.NET для извлечения данных
"Под капотом" автор нашёл Lua и protobuf.
С Lua разобрался через https://github.com/pangweiwei/slua, там много подробностей, но если кратко, то там первым шёл XOR, а потом ещё один слой шифрования.
Далее идёт разбор сетевого взаимодействия. В этом случае, так же и на прошлом шаге, помогло, что игра сделана на Unity
Most games that prioritize security will prevent common tools like Fiddler from functioning, but it's always worth trying, as many developers overlook security. In this case, the developers had implemented some protections, but since the game is built on Unity, it was relatively easy to bypass these restrictions and enable system proxies. There are many others that do il2cpp mod tutorials, and I recommend those, with the key part being hooking HttpClientHandler.SendAsync.
With Fiddler active, I could observe the login flow and how tokens are transmitted. In this example, there are some basic client identifiers, such as a ClientId and AppId, with the actual user content being in the post params. For guest accounts, it's a randomly generated string. For Steam accounts and Google accounts, it's the standard token you receive from those OAuth services. The main part of the auth response that is important is the AccessToken and MacKey, as this will be used to identify yourself to the game server.
Далее разбор пакетов через https://github.com/pawitp/protobuf-decoder и поиск опкодов в Lua
When the game updates, it is critical to make it easy to update. This is an extremely important step to make sure the tooling doesn't break from week to week. I have included how to download the raw asset files directly from the game servers in Downloader.cs.
Исходный код наработок для статьи лежит тут - https://github.com/shalzuth/SwordOfConvallariaResearch
👍11🌭1
Подписчик принёс печальную новость: Linux Format UK закрывается
> Just got the email -- RIP Linux Format magazine.
https://oldos.me/@jay/114580170106005279
> Celebrate our final issue ever while we look back on how the Linux kernel and open source software has changed, evolved and taken over the world!
https://linuxformat.com/linux-format-329.html
Сложно переоценить вклад Linux Format в популяризацию open source, культовый журнал
Русскоязычная версия умерла в 2018 году, архив доступен тут
https://www.linuxcenter.ru/linuxformat
Я собрал все печатные номера (все журналы из поста, которые я раздавал, уже розданы нуждающимся 🌝)
https://xn--r1a.website/tech_b0lt_Genona/4335
Более того, я начал выкладывать копии дисков
https://xn--r1a.website/LF_RU_iso
Есть у меня не все диски к журналам, ещё есть те, которые плохо читаются. Надеюсь, что у меня появится время продолжить выкладывать оставшиеся образы
Таблица дисков загруженных номеров тут
https://github.com/rusdacent/lf_ru_iso/tree/main
Ну, а Linux Format спасибо за всё 🫡
> Just got the email -- RIP Linux Format magazine.
https://oldos.me/@jay/114580170106005279
> Celebrate our final issue ever while we look back on how the Linux kernel and open source software has changed, evolved and taken over the world!
https://linuxformat.com/linux-format-329.html
Сложно переоценить вклад Linux Format в популяризацию open source, культовый журнал
Русскоязычная версия умерла в 2018 году, архив доступен тут
https://www.linuxcenter.ru/linuxformat
Я собрал все печатные номера (все журналы из поста, которые я раздавал, уже розданы нуждающимся 🌝)
https://xn--r1a.website/tech_b0lt_Genona/4335
Более того, я начал выкладывать копии дисков
https://xn--r1a.website/LF_RU_iso
Есть у меня не все диски к журналам, ещё есть те, которые плохо читаются. Надеюсь, что у меня появится время продолжить выкладывать оставшиеся образы
Таблица дисков загруженных номеров тут
https://github.com/rusdacent/lf_ru_iso/tree/main
Ну, а Linux Format спасибо за всё 🫡
🫡43🍾42😢3🥰2❤1👍1🤩1💊1
Уязвимость в MCP-сервере GitHub, приводящая к утечке информации из приватных репозиториев
https://www.opennet.ru/opennews/art.shtml?num=63322
Подробней в оригинале
GitHub MCP Exploited: Accessing private repositories via MCP
https://invariantlabs.ai/blog/mcp-github-vulnerability
https://www.opennet.ru/opennews/art.shtml?num=63322
Протокол MCP предназначен для связывания AI-моделей с различными источниками данных. GitHub MCP Server обеспечивает бесшовную интеграцию больших языковых моделей с API GitHub и предоставляет этим моделям дополнительный контекст, извлекая данные из GitHub-репозиториев. Использующие MCP модели могут применяться для автоматизации определённых действий с GitHub, например, для разбора сообщений об ошибках.
Суть уязвимости в том, что через взаимодействие с подключённой к GitHub большой языковой моделью можно добиться выдачи конфиденциальных данных о пользователе, привязавшем AI-агента к своей учётной записи на GitHub. Атакующий может разместить в публичном репозитории, для которого применяется автоматизация на основе большой языковой модели, специально оформленный отчёт о проблеме (issue). После активации модель сформирует pull-запрос с предлагаемым решением. Соответственно, если проблема касается приватных репозиториев или конфиденциальных данных, модель может раскрыть информацию в предложенном pull-запросе.
Для примера было отправлено сообщение об ошибке с жалобой на то, что в файле README не указан автор. В качестве решения в сообщении было предложено добавить в README сведения об авторе и список всех репозиториев, с которыми работал автор. В итоге модель создала pull-запрос с информацией, включающей персональную информацию об авторе, извлечённую из приватного репозитория, а также список имеющихся приватных репозиториев. На следующем этапе через подобное взаимодействие с моделью можно получить и данные из конкретного приватного репозитория.
Подробней в оригинале
GitHub MCP Exploited: Accessing private repositories via MCP
https://invariantlabs.ai/blog/mcp-github-vulnerability
🔥16😁11❤3☃2🥰2
Forwarded from TechnoOops
Почти заброшенный канал :)
На днях получил доступ к SourceCraft.
Впечатления:
- оно очень минималистичное (репы, задачи, PR, CI/CD).
- оно работает.
- CI/CD, в целом работает. Хотя не всё и не всегда (но кто ждёт гладкой работы от очень превью сервиса). Успел даже баг-репорт сформировать за те 3 часа пока игрался :)
- там нет артефактов (package/container и так далее)... Но, может для Яндекс это и ОК... Лично мне бы его хотелось.
- правила для CodeReview лежат в коде репа... Неожиданно для меня :) Но, в целом ОК.
Есть канал в ТГ и чат.
В целом, положительно. Больше конкуренции - лучше пользователям.
На днях получил доступ к SourceCraft.
Впечатления:
- оно очень минималистичное (репы, задачи, PR, CI/CD).
- оно работает.
- CI/CD, в целом работает. Хотя не всё и не всегда (но кто ждёт гладкой работы от очень превью сервиса). Успел даже баг-репорт сформировать за те 3 часа пока игрался :)
- там нет артефактов (package/container и так далее)... Но, может для Яндекс это и ОК... Лично мне бы его хотелось.
- правила для CodeReview лежат в коде репа... Неожиданно для меня :) Но, в целом ОК.
Есть канал в ТГ и чат.
В целом, положительно. Больше конкуренции - лучше пользователям.
sourcecraft.dev
SourceCraft | Yandex
Платформа для разработки, которая помогает создавать исходный код, управлять его версиями, а также тестировать, собирать, развёртывать и сопровождать программные продукты.
🥴14👍6❤1👎1🖕1💊1
Отвечая на мысленный эксперимент «Апокалипсис ЦП» в соцсети X, основатель id Software и бывший технический директор Oculus предположил, что именно неэффективность ПО, а не аппаратные ограничения — наша самая большая уязвимость.
«Больше пользователей по всему миру, чем многие могут себе представить, могли бы работать на устаревшем оборудовании, если бы оптимизация ПО была действительно приоритетом», — написал Кармак, утверждая, что давление рынка приведёт к резкому повышению эффективности, если новые чипы перестанут поступать.
Его решение такое в этом случае: «Перестроить все интерпретируемые продукты на основе микросервисов в монолитные собственные кодовые базы» — по сути, отказавшись от современных шаблонов разработки в пользу более эффективных подходов более ранних эпох вычислений. Кармак отметил, что такие изменения повлекут за собой существенные компромиссы: «Инновационные новые продукты будут появляться гораздо реже без сверхдешёвых и масштабируемых вычислений».
Джон Кармак: мы все могли бы работать на старом компьютерном оборудовании, если бы оптимизация ПО была приоритетом
https://habr.com/ru/news/909152/
Тем временем Microsoft
Пользователи в соцсети X выяснили, что кнопка вызова Start Menu (кнопка «Пуск») в Windows 11 (обычно статичное меню с ссылками на другие приложения) — это плохо оптимизированное приложение на React Native. Это может проверить любой и убедиться в том, что это приложение каждый раз нагружает на десятки процентов (от 30% до 70% в зависимости от конфигурации ПК) как минимум одно ядро ЦП по клику на кнопку «Пуск».
Пользователи выяснили, что кнопка пуск в Windows 11 — приложение на React Native, которое загружает ядро ЦП по клику
https://habr.com/ru/news/913050/
😁55❤10🗿8👍4👌2👏1🥴1💯1🎅1
Про Prolog я писал у себя на канале 2 раза
https://xn--r1a.website/tech_b0lt_Genona/1595
https://xn--r1a.website/tech_b0lt_Genona/4745
И тут ВНЕЗАПНО11!! он опять в интересном контексте
Выпуск оконного менеджера plwm 0.4, написанного на языке Пролог
https://www.opennet.ru/opennews/art.shtml?num=63323
Оригинал
https://github.com/Seeker04/plwm/blob/v0.4/CHANGELOG.md#v04-2025-05-21
https://xn--r1a.website/tech_b0lt_Genona/1595
https://xn--r1a.website/tech_b0lt_Genona/4745
И тут ВНЕЗАПНО11!! он опять в интересном контексте
Опубликован выпуск оконного менеджера plwm 0.4, развиваемого на языке Пролог и поддерживающего мозаичную (tiling) компоновку окон. В качестве целей проекта заявлено достижение высокого качества кодовой базы и документации, простота настройки под свои предпочтения и охват типовых потребностей пользователей мозаичных оконных менеджеров. Код проекта распространяется под лицензией MIT. Для запуска может использоваться инструментарий SWI-Prolog.
На данном этапе работа возможна только в окружениях с X-сервером, но автор не исключает реализацию поддержки Wayland. Основные возможности:
- Работа в многомониторных конфигурациях.
- Использование тегов для группировки окон и динамическое формирование виртуальных рабочих столов.
- Применение парадигмы логического программирования для расширения функциональности.
- Оформление файла конфигурации в форме кода на языке Пролог.
- Интеграция панелей задач polybar и lemonbar.
- Интеграция меню приложений dmenu и rofi.
- Высокая производительность и потребление всего 10-15 МБ памяти.
- Использование как динамического мозаичного размещения окон, так и классического режима с плавающими окнами.
Выпуск оконного менеджера plwm 0.4, написанного на языке Пролог
https://www.opennet.ru/opennews/art.shtml?num=63323
Оригинал
https://github.com/Seeker04/plwm/blob/v0.4/CHANGELOG.md#v04-2025-05-21
💊23🔥14👀4👏2
Пост про то как в результате использования неблокирующего IO в 20 раз производительность увеличили 🌝
Автору поста дали проект, в котором он отвечал за куски помеченные чёрным на схеме, а суть активности была в том, что бы сгрузить идентификаторы устройств/пользователей (пачками по ~100к за раз) для дальнейших тестов.
В какой-то момент автору и команде удалось всё это дело организовать и завести, но реализация изначальная была сильно медленной исходя из расчётов (см. прикреплённую табличку)
В результате решением было переписать питонячий код на неблокирующий IO (через asyncio и aiohttp). Следствием этого стал 20-кратный прирост производительности - выделение 200 "клиентов" в секунду. Причём было ограничение сверху наложенное сторонним сервисом (на схеме AccountService)
Один из выводов, кстати, меня реально удивил. Обычно от людей, которые решают проблемы подобного масштаба, я читаю про желание повсеместной автоматизации. Тут же автор написал иначе
Я описал тут всё достаточно сухо и кратко, сам пост читается куда интересней и "живей".
Полностью тут
Making an AB Test Allocator 20x Faster Using Non-blocking IO
https://pushtoprod.substack.com/p/making-an-ab-test-allocator-20x-faster
Вообще, у Matthew Hawthorne (ex-Netflix, ex-Twitter) есть целый цикл, который называется
Пост выше был завершающим в серии, а цикл доступен по ссылке
https://pushtoprod.substack.com/t/concurrency-war-stories
Я с удовольствием прочитал и рекомендую
Автору поста дали проект, в котором он отвечал за куски помеченные чёрным на схеме, а суть активности была в том, что бы сгрузить идентификаторы устройств/пользователей (пачками по ~100к за раз) для дальнейших тестов.
В какой-то момент автору и команде удалось всё это дело организовать и завести, но реализация изначальная была сильно медленной исходя из расчётов (см. прикреплённую табличку)
В результате решением было переписать питонячий код на неблокирующий IO (через asyncio и aiohttp). Следствием этого стал 20-кратный прирост производительности - выделение 200 "клиентов" в секунду. Причём было ограничение сверху наложенное сторонним сервисом (на схеме AccountService)
My practical bottleneck was the throughput allowed to me by the aforementioned AccountService. The owning team allocated my access key a volume of concurrent requests that resulted in somewhere around 200 requests per second based on their latency profile.
I was able to limit the concurrency of my requests by limiting the number of Tasks I created using Python’s asyncio module. I calibrated the number until I was receiving a manageable number of HTTP 429 “rate limit exceeded” errors and then re-processed those requests in a subsequent iteration, as mentioned a few sections back.
Один из выводов, кстати, меня реально удивил. Обычно от людей, которые решают проблемы подобного масштаба, я читаю про желание повсеместной автоматизации. Тут же автор написал иначе
Don’t Automate Everything
We could have built an automated system to listen for allocation uploads in S3 and then trigger a job to start the allocation pipeline. But it would have been a poor choice.
Our environment was new and chaotic and required a lot of care and debugging, so having a human run a script was a better option to start. And since we only allocated around 10 batches, it wasn’t worth the effort to build automation just to shut it down in a few months.
I’d advocate for delaying automation as long as you can, assuming that you can maintain your sanity while doing things manually.
You can always automate something later. But once you automate it, it’s hard to go back to a purely manual system, and you often end up with a sub-optimal automated/manual hybrid.
Я описал тут всё достаточно сухо и кратко, сам пост читается куда интересней и "живей".
Полностью тут
Making an AB Test Allocator 20x Faster Using Non-blocking IO
https://pushtoprod.substack.com/p/making-an-ab-test-allocator-20x-faster
Вообще, у Matthew Hawthorne (ex-Netflix, ex-Twitter) есть целый цикл, который называется
Concurrency War Stories. Пост выше был завершающим в серии, а цикл доступен по ссылке
https://pushtoprod.substack.com/t/concurrency-war-stories
Я с удовольствием прочитал и рекомендую
👍22🔥7❤3✍2🙈1
This media is not supported in your browser
VIEW IN TELEGRAM
Пятница!
Есть такое камунити http://buttplug.io/, которое курирует открытые проекты и стандарты игрушек для взрослых(нет, это не тонометры)
И под него сделали MCP (Model Context Protocol) Server
https://github.com/ConAcademy/buttplug-mcp
Проект появился как шуточный 1 апреля, собственно, и стабильность поэтому такая же
Для селфхостинга можно прикрутить Ollama, а ещё можно интегрировать с Home Assistant MCP 🌝
Есть такое камунити http://buttplug.io/, которое курирует открытые проекты и стандарты игрушек для взрослых
И под него сделали MCP (Model Context Protocol) Server
Once set up, you can prompt your LLM:
- "What are my connected buttplug devices?"
- "Set the second motor on my LELO F1S to 50% strength"
- "How much battery is left on my Lovense Max 2?"
- "Does my WeWibe have weak signal?"
https://github.com/ConAcademy/buttplug-mcp
Проект появился как шуточный 1 апреля, собственно, и стабильность поэтому такая же
While it does work, I found the underlying go-buttplug library to be unstable in connection handling. I could ask Claude for my devices, but my specific device wouldn't vibrate even just with just Intiface Central -- it was like in read-only mode! I also wish I had a virtual buttplug.io device for testing, rather than relying on a physical device.
So, it has not truly been tested "end-to-end" 😉
I will dig more into the go-buttplug library and see why connections are unstable. I also need to understand the MCP protocol current state of MCP hosts -- it seems they focus on Tools rather than Resources and Resoure Templates.
Для селфхостинга можно прикрутить Ollama, а ещё можно интегрировать с Home Assistant MCP 🌝
🌭22😁12❤2👍2
Неплохо
https://aus.social/@phs/114583927679254536
Подсмотрел в чате Victoria Metrics - @VictoriaMetrics_ru1
We're replacing our ElasticSearch cluster (27 nodes, ~588 CPU Cores, with 4656gb RAM) with a single VL Node (8 CPU Cores, 64gb RAM).
https://aus.social/@phs/114583927679254536
Подсмотрел в чате Victoria Metrics - @VictoriaMetrics_ru1
👍29❤11✍2
Forwarded from UX, Security и другие приколы
This media is not supported in your browser
VIEW IN TELEGRAM
обнаружен новый способ доказать, что ты не робот!
😁16
Forwarded from IT Friday (Sabbath)
Хей! Увидимся на БеКоне😃
С удовольствием пообщаюсь за контейнер секурити.
А еще мы с @rusdacent готовим квиз для любителей полазить в контейнерах)
А пока можете глянуть:
🟢 Руководство Бравого Докер Секурити Мастера:latest - PHDays 2025
🟢 Готовим контейнеры вкусно и полезно - SafeCode 2024
С удовольствием пообщаюсь за контейнер секурити.
А еще мы с @rusdacent готовим квиз для любителей полазить в контейнерах)
А пока можете глянуть:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28🐳12❤🔥7❤3👍2🌚1