https://fixupx.com/psviderski/status/2111066439138545830?s=46
Читать полностью…
https://lore.kernel.org/lkml/CAHk-=whTs09_ozN+e09GU68N1wPP56MUzDjrg9rnKxQUa0A_4Q@mail.gmail.com/
А вот и Линус подскочил:
No. What you are about is something entirely different. It has nothing to do with "expectations", and it has everything to do with your hangups.
I don't understand this whole idiotic concept of "don't use AI for X".
Here's a new rule just for you: don't use compilers for any of your kernel submissions.
Because if you can't show that you really understand what the machine is actually doing by writing your code in assembler, then I don't want to see your code contribution. You clearly aren't competent if you can't write it that way.
And btw, you had better not use an editor to write that commit message either.
Because I need you to show me that you can actually write a good commit message without using tools that make it easy to backspace and hide the mistakes you made while typing.
Ok?
Because otherwise those tool-assisted commits of yours clearly aren't showing that you know what you are doing.
Do you not see how UTTERLY STUPID those kinds of rules would be?
So no. We're not going to make stupid rules that say "you can't use tools for X".
The kind of expectations *I* have is that people do their best and I expect people to understand what they are doing.
But that understanding has very little to do with what tools they use.
And quite honestly, in my experience, the people I respect and call intelligent are not the ones that shy away from using new and interesting tools.
Хорошо, что мэтр выступил, его голос значим в OSS сообществе, надеюсь, это начнет менять отношение к LLM generated коду, а то всякие opennet/lobsters/hacker news задолбали своим снобизмом.
https://github.com/rust-lang/rust/issues/164348
🤡 Раст считает за один файл:data/baselines/table.rsdatabase/line/stable.rs
Безумие продолжается. За последние сутки релизнули эксплоит гипервизора PS5. Взлом высшего оплота безопасности.
Для понимания прошивка ps5 построена на ядре FreeBSD, а запускается и работает она внутри гипервизора. Сейчас цепочка эксплойтов позволяет выйти из юзерспейса (WebKit) --> потом ядро --> потом гипервизор.
Получив доступ к гипервизору можно получить низкоуровневый доступ к системе. Появляется возможность запускать Linux и скомпрометировать ключи для подписи устанавливаемых пакетов.
Сейчас вся цепочка оказалась подконтрольной энтузиастам, которое то и дело запускают на плойке что-нибудь необычное.
Playden-ps5 - позволяет нативно запустить Steam и превратить PS5 в начтоящую StreamMachine.
rpcs3-PS5 - эмуляция PS3 на PS5, пока что нужно собирать из исходников, проверил работает.
pLinux5-NG - буквально только что портировали Linux на PS5
PS5LM - нативные LLM и QWEN на PS5 со скоростью 20 токенов в секунду
PS5 становится очень интересной коробкой для запуска всего и вся.
Как минимум буду использовать ее как docker-хост для сборки чего мой старенький MacBook на M1 не вытягивает. Как максимум запустить на ней полноценный кубер и Cozystack.
Начал с малого, в качестве эксперимента портировал SyobonAction под PS5
https://www.opennet.ru/opennews/art.shtml?num=66447Мама я пакакала Линус Торвальдс экспериментирует с генерацией изменений к ядру через AI
TL;DR:
1) много раз писал, что сейчас нет смысла не заниматься #perf своих программ, используя #LLM
2) ядру иишный код очень показан, потому что изначально он хуев настолько, что от любого AI станет только лучше
Кстати, исходная метрика довольно быстро изжила себя, потому что хороший результат по ней получился очень быстро, но дальнейший прогресс встал, потому что одна редкая и плохо поддержанная фича - это капля в море в усреднении по 20к картинок.
Поэтому мы перешли к другой метрике - max по rms по всем картинкам, эта метрика показывает как мы плохо рисуем в самом плохом случае, ровно то, что надо для дальнейшего fine tune.
Выяснилось, что chromium так-то тоже не идеал, и часто мы (или другие конкуренты) рендерим более правильно, поэтому я поменял цель - теперь мы выбираем, кто из chromium, firefox, resvg, inkscape (очень важно для всякого рода клипартов), и нас (!!! - да, мы уже тут) рендерит правильнее всего, и ставим этот результат как канонический.
Дошло до смешного - машина железно уверена, что 3 примера из корпуса resvg мы рендерим лучше, чем сам resvg, хехе - https://github.com/impulse-desktop/svg/blob/main/tst/corpus/CANON#L10-L12
В процессе работы над #impulse мне понадобился рендер svg.
Как для самого #shell, так и для условного просмотра изображений.
Изначально я взял #lunasvg, но мне стало интересно, че там и как сейчас на этом рынке.
Сравнил самые известные standalone рендеры svg:
#lunasvg #svgren #resvg librsvg ThorVG #inkscape Skia
И SOTA рендеры - chromium, firefox.
TL;DR - chromium и firefox совпадают на 95%, а resvg совпадает с каждым из них на 90%, и, тем самым, resvg - самый лучший standalone svg рендер. Все остальные далеко позади, не дотягивают и до 70% совпадений с SOTA.
Но проблема resvg в том, что он написан на rust, а rust в мире LLM больше не нужен - /channel/itpgchannel/4486
Поэтому я взял, и запустил простенький #autoresearch цикл:
* 7500 svg из тестов resvg, chromium, skia, firefox, и еще откуда-то
* 10000 svg с просторов интернетов
(все это оптимизировано по покрытию фич, которые требуются от рендера)
* 17500 прикопанных png "как svg выше рендерит chromium"
* простая метрика по разнице того, как это рендерим мы (начиная с белого холста), и SOTA решения
https://github.com/impulse-desktop/svg
Думаю, через несколько часов тут будет лежать очень качественный svg рендерер, который я уже потом доведу по #perf до SOTA решений.
https://www.opennet.ru/opennews/art.shtml?num=66425#12
TL;DR - flathub дал заднюю со своей политикой про AI. И очень жаль, его подход мне совсем не близок, и было бы неплохо, если бы он тихо помер!
"Каталог приложений Flathub изменил правила, касающиеся применения AI-инструментов при разработке публикуемых приложений. Новая редакция правил допускает размещение во Flathub приложений, использующих сгенерированные через AI код, документацию и другие материалы, но требует обязательного раскрытия применения AI. Публикуемая информация о применении AI должна указывать области и примерный объём содержимого, созданного через AI. В файлах с манифестом использование сгенерированного через AI контента запрещено. Рецензирующим пакеты, предлагаемые для включения во Flathub, даётся право на своё усмотрение не принимать проекты в зависимости от размера и роли AI-контента, а также наличия опасений по поводу полноты проверки, качества и обеспечения дальнейшей поддержки кода, сгенерированного AI."
Рунет: чем централизованнее, тем уязвимее.
Удар по дата‑центру Яндекса побудил многих «околовоенных» экспертов высказаться на темы, близкие к кибербезу.
Давайте мы, как профильный канал, тоже прокомментируем эту тему.
Все мы помним, что Рунет у нас уже много лет суверенен, независим и достаточно централизован.
Он буквально завязан на несколько ключевых провайдеров и их дата‑центры.
Проект централизации первично децентрализованной технологии «Интернет» выполнялся по различным причинам — их мы обсуждать в этом посте не будем. Но фактически успех этого проекта привёл к тому, что буквально на около десятка дата‑центров в европейской части России завязано функционирование примерно всего Рунета.
Поэтому, господа военные эксперты: может, суммарно дата‑центров у нас и сотни по всей стране, может, и очень крупных много. Но вывести из строя нужно гораздо меньше, и они вовсе не на Камчатке. Их нужно питать, обслуживать, обеспечивать логистикой. Они все в полётной доступности средств поражения по вполне прагматичным причинам.
Могут ли облачные провайдеры быстренько «переехать» в безопасные дружественные страны?
Конечно, нет. 152‑ФЗ («О персональных данных») жёстко ограничивает в этом, а 187‑ФЗ (регулирующий безопасность критической информационной инфраструктуры) вводит прямо запрет на зарубежные облака и SaaS‑сервисы.
Централизация тут однозначно стреляет нам в ногу: в плане физического поражения инфраструктуры мы стали уязвимее.
Ровно по такой же схеме, понадобился memory safe PDF render, для #impulse, а на JS у меня аллергия, потому никаких pdf.js.
https://github.com/pg83/decode/releases/tag/4
Вот, теперь тут живет не только Image Magick, но еще и PDFium от гугла, собранный в #WebAssembly, а еще, для полноты картины, djvulibre.
Если вы занимаетесь обработкой pdf в облаках - то вам это, несомненно, очень надо!
Внезапно ускорил #perf еще на 7%, довольно простой идеей - программа, которая масштабирует изображение, может быть разделена на 2 части - ту, что обрабатывает тайлы по краям, и ту, что обрабатывает центральные тайлы.
Первая программа должна содержать в глубине цикла проверки на выход за границы текстуры, ну или можно сделать 8 разных таких программ, но они тогда будут зависеть от ширины и высоты текстуры, и от ее положения на общей канве, а во второй программе такие проверки можно убрать!
Проблема в том, что программ стало очень много, и их перестроение стало заметно при ресайзе окна плеера, по причинам что я выше написал.
Решил и эту проблему, весьма #изящно - программы компиляются и оптимизируются в отдельном тредпуле, а пока они не готовы, используется тот самый generic шейдер, про который я писал в /channel/itpgchannel/4499
Получилось прямо очень хорошо, реактивно!
#impulse
https://ayles.github.io/doom-in-kernel/
Коллеги (на этот раз действительно коллеги!) подогнали прекрасное - Doom, на #eBPF, в ядре Linux.
"Прекрасное" потому что идет наперекор тому, как пытается работать eBPF.
eBPF, для каждой загружаемой программы, пытается доказать, что программа не зависнет, и что программа не ездит по памяти.
Второе, допустим, просто, поколения программистов вычистили исходники Doom так, что игра работает и без проездов.
Первое - сложно, и чуваки поступили, на мой вкус, весьма #изящно!
Они запилили свой компилятор поверх LLVM.
Он режет обычный C-код на "регионы" - блоки без сложных циклов и вызовов. Регион обрывается на каждом вызове функции, возврате, неудобном обратном ребре цикла или yield. В конце он сохраняет state в память, и возвращает номер следующего региона.
Регионы гоняет маленький диспетчер из трёх вложенных ограниченных циклов: 32x2048x64, около 4*10^6 регионов за один вызов. Если бюджет кончился, программа возвращает "не доделано" с номером продолжения, и userspace вызывает её снова.
Ну а верификатор доказывает завершение не DOOM, а очередного региона и диспетчера.
И он может это сделать, потому что видит набор блоков, каждый из которых заканчивается обычным return, плюс цикл с константной границей. Прыжков "регион 18 -> регион 42" в графе управления нет, есть только номер региона, который нужно позвать следующим, из dispatch цикла. Рекурсия, глубокие вызовы и длинные циклы существуют только во время исполнения, как последовательность этих номеров.
Я бы тут поинтересовался у коллег, почему того же самого нельзя было добиться source трансформацией кода, превратив его в async код через с++ корутины, трансформация ровно та же самая получается - куча блоков с return, и цикл dispatch над ними сверху, но сути это не меняет.
Госучреждения Нидерландов и Франции внедряют решения на базе NixOS
https://www.opennet.ru/opennews/art.shtml?num=66367
В разработку проекта вовлечены три государственные IT-компании - DICTU, SSC-ICT и DUO-ICT. Первый стабильный релиз DAWO ожидается в следующем году. В настоящее время в пилотном внедрении платформы участвуют четыре муниципалитета. Наработки опубликованы на государственной платформе совместной разработки, созданной на базе Forgejo, и зеркалируется в Codeberg.
Платформу DAWO образуют несколько компонентов:
- Операционная система DAWO-NixOS на базе NixOS (отдельно предусмотрен резервный вариант на Fedora Kinoite).
- Облачная инфраструктура DAWO-Cloud.
- Инструменты для организации совместной работы MijnBureau на базе Nextcloud, Collabora, Element и OpenProject.
- Система идентификации и управления доступом DAWO-IAM.
- Инструменты централизованного развёртывания и управления рабочими станциями DAWO-Sextant. Для управления мобильными устройствами планируют использовать Fleet.
- Мобильная платформа DAWO-Mobile, в качестве основы для которой рассматриваются /e/OS, GrapheneOS и CalyxOS.
- AI-ассистент DAWO-AI.
Дистрибутив NixOS выбран в качестве основного для рабочих станций из-за декларативной модели конфигурации, поддержки воспроизводимых сборок, возможности работы на устаревших системах, наличия средств для аудита и отката изменений, а также развития сообществом без влияния отдельных корпораций. На выбор NixOS также повлияло то, что курирующая проект NixOS некоммерческая организация зарегистрирована в Нидерландах, а авторы пакетного менеджера Nix и первого варианта дистрибутива имеют голландские корни. В качестве претендентов рассматривались openSUSE и Fedora, но были отклонены из-за влияния на их разработку отдельных компаний.
Похожая инициатива по созданию решения для госорганов на базе NixOS параллельно запущена во Франции. Проект развивает Межминистерское управление по цифровым делам (DINUM) для обеспечения цифрового суверенитета и независимости от иностранного ПО. Для системных администраторов разработан защищённый вариант дистрибутива - Securix, а для обычных пользователей предлагается использовать шаблон Bureautix, который различные ведомства могут адаптировать под свои нужды.
Че-то очень странное, openbsd отказались принять порт с uutils в дерево. То есть не то чтобы как замену своим утилитам, а как просто пакет со сборочными файлами.
Читать полностью…
История одной #perf оптимизации
Для #impulse мне нужен видеоплеер, с gui на #imgui. Нужен и нужен, с #LLM это очень просто, он случился у веня за 1 вечер, мне нравится.
Но вот в его рамках случилась одна интересная #perf задачка - fused scale + color conversion.
Задача довольно простая - на выход из декодера у тебя есть текстура в цветовом формате A и разрешением XxY, ее надо отмасштабировать в разрешение X2xY2, одновременно поменяв цветовое пространство, чаще всего в RGBA, или линейное.
В ffmpeg есть софтверный скейлер, он хорошо оптимизирован на CPU, но на 4к довольно таких неплохо заметен в профиле.
Challenge accepted!
Далее прямо по стадиям, как я это оптимизировал.
1) Ffmpeg отдает дескриптор формата, его можно загрузить в shader, как константные данные, и тупо написать код, который проинтерпретирует этот формат, для всех пикселей поверхности.
Это ОЧЕНЬ неэффективно делать на CPU, но на GPU это дало хорошее ускорение, и на самом деле, тут уже можно было бы остановиться, потому что GPU, и уже быстрее ffmpeg. Но тогда я был бы не я!
2) Cпросил клоду "вот тут у нас куча мертвых ветвей в шейдере, которые гейтуются внешними константами, которые мы ему передаем как параметры".
Машина мне сказала, чтобы я не ссал, и что оптимизатор драйвера выкинет эти ветви сам.
"Ага", сказал я, и посадил клоду пилить стенд - взять 50 самых частых комбинаций типов поверхностей, которые надо туда-сюда преобразовывать, написать руками 50 шейдеров, и оптимизировать их, один за одним, каждый раз проверяя, что наш generic шейдер выдает тот же самые результат, что и оптимизированный, и что он совпадает с результатом swscaler от ffmpeg.
Результат - generic шейдер в 3 - 4 раза медленнее оптимального.
3) Посмотрели с клодой на данные, поняли, что шейдер можно представить как формат входа X передаточная функция (12 штук примерно) x выход. Всего 2000 разных шейдеров, каждый вход/выход/передаточная запрограммированы руками. Сделали из шейдера jinja шаблон, кодогенератор встроили в сборку, 2000 шейдеров строятся несколько секунд. Результат - ну примерно x2 от руками оптимизированных, то есть, еще в два раза хуже.
4) Подумали, посмотрели на разницу между кодогенерацией и ручным кодом, поняли, что некоторые константные знания - "фактоиды" (как вот вход - выход - передаточная выше) позволяют значительно все ускорить, но тогда декартово произведение всех возможных вариантов становится настолько огромным, что предкомпиляция не выглядит работающим решением.
В итоге переписали шейдер на кастомном DSL, сразу в виде IR на Python.
Вернее, генератор IR шейдера в зависимости от всех возможных известных нам фактоидов, плюс несколько пассов оптимизации IR поверх.
Встроили в тот же кодоген, уже без текста и jinja шаблонов, результат - ровно x1, сгенеренные шейдеры не хуже, чем написанные руками.
5) Можно было бы остановиться, но лучшее - враг хорошего!
И я сказал клоде, что раз уж теперь у нас есть IR, который мы сами и оптимизируем, то зачем нам материализация в виде текста? А если так, то переноси IR прямо в с++ код, шейдер поверх этого IR в C++ код, и генери spir v на ходу, по запросу, без предварительной кодогенерации.
Машина сидит, пыхтит, работает, красота.
UPD: вести с полей:
"Все факты, включая размеры и шаги то, что даст рантайм на этапе 2: 0.924. В последней строке yuv444p и yuyv обгоняют ручные на 10%", так что мы еще и обогнали сами себя же!
Думаю, наш fused scale + color conversion - самый быстрый на рынке!
UPD: забыл вот что еще написать, под macos мой плеер жрет в два раза меньше CPU/GPU, чем IINA, а это так-то вполне себе SOTA на рынке.
#tcmalloc всем хорош, кроме одного - он требует для сборки bazel, то есть java, а это практически сразу "нахуй".
Раньше я его собирал вручную перечислив все нужные файлы и флаги компиляции, работало это плохо, и часто ломалось.
Но, надо заметить, что язык описания сборки bazel, он же starlark, это подмножество python, поэтому его очень легко распарсить и обработать через питонячий eval().
Вот, bazel lite, построенный на этой идее (eval() + несколько predefined функций + обработчики стандартный сборочных правил + ninja generator), достаточный, чтобы собрать tcmalloc as is - https://github.com/pg83/ix/blob/main/pkgs/bld/bazel/lite/bazel_lite.py, спасибо #LLM.
Думаю, за пару итераций скрипт можно довести до состояния "собирает любой гугловый опенсорс", а больше и не нужно.
https://www.phoronix.com/news/Linux-Dropping-Assisted-By-Req
Currently there is a policy requirement for Linux kernel patches where AI tools contributed, they should be documented with an "Assisted-by:" tag to make clear AI was used in the creation of said patch. But Linux kernel developers are now looking at dropping this requirement amid the rampant use of AI/LLMs.
A patch removing the Assisted-by requirement was recently posted to the Linux kernel mailing list. At the Linux Maintainers Summit last week in Prague, there was reportedly consensus on deprecating this requirement. Thus the patch is removing the documentation that lays out the assisted-by tagging needed.
«Ростелеком» призвал создать дата-центры «судного дня» в России
https://www.rosbalt.ru/news/2026-10-14/zampred-rostelekoma-prizval-sozdat-data-tsentry-sudnogo-dnya-5707218
Заместитель президента-председателя правления «Ростелекома» Валерий Ермаков заявил о необходимости создания ЦОД «судного дня» — резервной площадки, которая позволит восстанавливать работу сервисов при сбоях. Об этом он сообщил на форуме РБК Tech.
«Это такая площадка бэкапов, в которой в случае чего вы всегда можете восстановить свои сервисы. Это действительно было невозможно представить какое-то время назад, но сейчас это прям реальная потребность», — сказал Ермаков. По его словам, резервные копии позволяют поставщикам услуг быстро восстанавливать работу.
Ермаков отметил, что модели угроз стремительно меняются: то, что ранее считалось невозможным, становится реальностью и требует оперативного реагирования. В числе рисков он упомянул угрозы, связанные с беспилотниками.
По оценке Ермакова, ранее инфраструктура крупных компаний строилась прежде всего с расчетом на экономическую эффективность и централизацию: ключевые сервисы концентрировались на нескольких площадках. Это давало преимущества в затратах и управлении, однако теперь такая концентрация стала уязвимостью.
https://www.anthropic.com/engineering/redesigning-source-control
TL;DR - антропики изобретают монорепу
#svg в 22 раза лучше resvg по метрике среднеквадратичного отклонения от эталона (chromium) на корпусе из 22к картинок (корпус постоянно подновляется и оптимизируется дальше).
40 картинок resvg отрендерить не смог - завис.
500 больших проектов в #trustme, с прогоном тестов, каждая следующая пачка все проще и проще.
И это с учетом того, что я теперь +100 новых проектов тащу для +1 версии самого компилятора, вот прямо сейчас бездушная машина тащит +100 проектов для rust 1.93 (начинал с 1.90), а это уже как минимум компиляция всего libstd!
https://github.com/pg83/decode/releases/tag/5 - а теперь еще и детектор mimetype, из libmagic, которая часть file!
#impulse
OpenAI just dropped 700 preprints of mathematical proofs and counterexamples
Article, Comments
https://www.opennet.ru/opennews/art.shtml?num=66406
Ветка #Mold 3.0 примечательна переписыванием кодовой базы с C++ (C++20) на язык Rust. Mold 3.0 может использоваться в качестве прозрачной замены Mold 2.42.1, последнего выпуска на языке C++, и поддерживает все ранее доступные опции и целевые архитектуры. Переход на Rust позволил обезопасить проект от потенциальных проблем при обработке повреждённых объектных файлов - в ситуациях, когда версия на С++ аварийно завершалась из-за обращения к областям памяти за пределами буфера, вариант на Rust останавливает работу на этапе проверки границ. Производительность реализации на Rust находится на одном уровне с версией на C++.
Ну все, пизда проекту.
За прошедшие сутки все стало еще намного круче!
Изначально та моя схема страдала довольно посредственным качеством, потому что мне нужно было одновременно скомпозировать виджеты imgui, которые рассчитаны на блендинг в sRGB, с результатом от моего крутейшего скейлера, и за один проход, без нескольких дополнительных тяжеловесных текстур, это было возможным сделать только в том же sRGB. А сам скейлер был билинейным, и блендинг всего этого в sRGB давал так себе результат.
Я проитерировал несколько дизайнов, и сейчас рендер моего video player устроен так:
1) отказался от фрагментных шейдеров, теперь сырой тайловый compute, это уровнем еще пониже, чем обычный vulkan.
2) каждая сцена делится на тайлы 8x8 и 24x24, адаптивно, в зависимости от контента тайла. Для каждого тайла мы получаем все текстуры с их передаточной фуункцией, и геометрию imgui, которые лежат на этом тайле.
3) если тайл покрыт только виджетами imgui, выбирается один простой compute, который рендерит геометрию сразу в целевой формат поверхности. Если тайл покрыт только видео, то используется передаточная функция текстуры (тот самый мой IR, про который я рассказывал в прошлый раз), которая тоже сразу рендерит в целевой формат. Если есть и геометрия, и другие текстуры, то включается самый тяжелый шейдер, который все в памяти тайла (без промежуточных текстур) приводит все в линейное пространство, блендит, и переводит все это в целевой формат поверхности. Это тяжелое ядро, в нем больше всего вычислений на один пиксель, и его в реальной жизни почти никогда не бывает (это условное osd menu от imgui поверх видео)
Как сделать эффективнее, я, наверное, и не знаю, машина говорит что это SOTA подход для 2D рендера.
Все это позволило разумно поддержать hdr, сделать качественный lanczos фильтр масштабирования в линейном свете, "как в libplacebo" (а это современный SOTA для качественного масштабирования), на моем стенде с перцептивными метриками качества SSIMULACRA2.
И я все еще быстрее SOTA libplacebo, примерно раза в 2, зависит от входных форматов и алгоритмов масштабирования, при том же уровне качества!
Все потому (ну кроме моего оптимизатора IR ядра под задачу), что, так как libplacebo не "владеет" всем pipeline, им приходится лишний раз материализовать промежуточные буфера в линейном свете, а это еще и по памяти весьма дорого!
https://www.opennet.ru/opennews/art.shtml?num=66392
"Компания System76 внесла в правила приёма pull-запросов для среды рабочего стола COSMIC и в соглашение об участии в разработке дистрибутива Linux-дистрибутива Pop!_OS требования, запрещающие передачу в изменениях или сообщениях о проблемах содержимого, сгенерированного с использованием AI-инструментов. Запрет касается кода, комментариев и текстовых описаний. Вначале в правилах было упомянуто о допустимости использования AI для проведения исследований, тестирования и других похожих задач, но затем это примечание было удалено"
Еще один OSS поект решил самоубиться на рвном месте, ну и ладно.
UPD: но AI-станции они таки продают - https://system76.com/workstations/thelio-mira-ai !
OpenBSD Developers Reject Uutils Coreutils
Article, Comments
Кстати, opus 5.5 теперь моя рабочая лошадка, заменил sol 5.6.
Подписка на codex кажется все менее привлекательной - самая сильная модель там хуже fable, средняя (sol 6.1) - хуже opus 5.5, и лимиты эти пидарасы срезали в 2 раза.
Товарищи из openai, надо поднапрячься!