Android | Михаил Белый
310 subscribers
272 photos
32 videos
127 links
Авторская песочница о карьере в IT в роли Mobile Dev (Android, Kotlin, Multiplatform) и разных вещах, которые мне интересны.

Посты каждый день в 5 вечера.

Автор: @michaelbel

Забустить: t.me/boost/foundout

Задонатить: boosty.to/michaelbel
Download Telegram
🐗 Секретутка бот

В телеграме можно сделать себе бота и общаться с людьми через него. Человек пишет сообщение твоему боту. Оно сразу прилетает тебе в этом же боте. Отвечаешь реплаем. Сообщение улетает обратно написавшему. Быстро и безопасно.

Если много писать не контактам, то очень скоро получишь мьютом по голове. Сработает антиспам-ограничение по совокупности факторов: жалобы, блокировки, доля ответов и возраст аккаунта. Через бота можно переписываться сколько угодно.

1. Создаем бота через @BotFather и получаем BOT_TOKEN.

2. Узнаем свой chat_id. Для этого пишем сообщение боту и вызываем
https://api.telegram.org/bot<TOKEN>/getUpdates

3. Регистрируемся на Cloudflare

4. BuildCompute & AIWorkers & PagesCreate application

5. Открываем Editor и вставляем этот код

6. В WorkerSettingsVariables and Secrets добавляем переменные BOT_TOKEN (токен от BotFather) и ADMIN_CHAT_ID (свой chat_id)

7. Сохраняем и деплоим воркер. Получаем его адрес:
https://xxxx.your-name.workers.dev

8. Подключаем вебхук Telegram к Worker, открыв ссылку в браузере:
https://api.telegram.org/bot<TOKEN>/setWebhook?url=<WORKER_URL>

Cloudflare бесплатный, пока не упрешься в лимиты. Работает 24/7.

Вот так можно открыть профиль пользователя, зная только его chat_id:
tg://user?id=149707658

Мой секретарь
Please open Telegram to view this post
VIEW IN TELEGRAM
755
eSIM

Продаю щас айфон на авито, который только eSIM-версия. И неожиданно столкнулся с многочисленными отказами по причине отсутствия лотка для физической симки.

Как оказалось, многие убеждены, что с физической симкой сеть ловит лучше. Особенно в условиях шатдаунов, вечных блокировок и налета беспилотников.

Как человек, родившийся с цифровой ложкой во рту, поясняю: это какая-то шиза. Формат симки никоем образом не влияет на уровень сигнала. Он зависит он модема телефона, качества сети оператора и условий вокруг (подвал, парковка).

У eSIM куча недостатков: нужно генерировать QR при смене устройства, банки просят назвать кодовое слово, которое ты забыл. Но есть и плюсы: такую симку не потеряешь, за границей не надо искать салон связи.

Это будущее.

Все на свете производители смартфонов мечтают увеличить аккумулятор за счет места под слот. Пора привыкать и не морщить попу.

Если беспокоит плохая связь – надо купить симки разных операторов. С eSIM их будет удобно переключать в настройках телефона.
64421
На протяжении многих лет, когда слушал песню Cigarettes After Sex – Apocalypse, думал ее поет женщина. Такая за 30, с легкой хрипотцой, сигареткой в зубах и бокалом вина в руке. Я был в этом уверен.

Потом вздумалось мне клип на ютубе глянуть. У песни как оказалось мужской вокал. И вообще это бойсбенд. Женщина там рядом не стояла.

Вот так просто меня наебали. Мой мозг не способен тонер и фальцет классифицировать как мужскую форманту.
6432🤣111
У приложения, над которым я работаю, 100% Crash Free с первого релиза

Как получилось добиться столь выдающихся результатов?

• Trunk Based Development. Никаких конфликтов и мерджей.

• Чистейшая архитектура со слабыми связями между слоями.

• Новый стек и стабильные версии библиотек. Нет альфа/бета зависимостей.

• Compose Only. Никаких AndroidView. Рисуем на канвасе.

• Бизнес-логика покрыта тестами.

• Настроены Lint и Detekt.

• Код проанализирован Gemini 3 Pro и Opus 4.5. В Code Inspect 0 предупреждений.

• Мой огромный опыт с предыдущих работ, где я вдоволь набажился.

• Хорошая документация.

• Хорошие тестировщики.

• Логирование и аналитика.

• У приложения ~30 пользователей. Все используют одну модель смартфона (не сяоми, не хуавей).
239332
🐗 Наблюдение про App Store

Непонятно, зачем нужна армия индусов, которая проверяет обновления приложения в сторах. Еще тестовые учетки им подавай. Уже тыщу лет есть BDUI, где за учетом надоя прячется казик, фишинг и тинек. Целевая аудитория так или иначе получит, что хочет. Индусы бесполезны. Всех уволить или перевести в отдел аппеляций.

🐗 Наблюдение про Google Play

К армии модераторов добавилась политика для новых личных аккаунтов Google Play Console. Перед публикацией в прод будь добр проведи closed testing и держи минимум 12 тестировщиков 14 дней подряд. Из-за этого мне теперь по 10 раз в неделю пишут с просьбой продать мой аккаунт разработчика, созданный в 2017 году, где таких жестких требований нет. Ну или просто просят выложить чужое приложение от своего имени.

🐗 Наблюдение про RuStore

Протыкали мое приложение в хвост и в гриву. Не допустили к публикации. Накатали огромный отчет в вежливой форме что и где поправить. Премного благодарен за такой труд.
Please open Telegram to view this post
VIEW IN TELEGRAM
8321
За что платят в эпоху AI

По моим ощущениям, агентные системы примерно этой осенью перешагнули рубеж, когда их больше не требуется пасти как овец. Модель подключается к джире, фигме и сваггеру, а тебя отправляет лежать на печи.

Напрашивается вопрос: почему андроид-разработчики еще не штурмуют биржу труда?

Ответы на поверхности:

• Инфраструктура просто напросто не готова. За десятилетия айти без машин люди наплодили столько несовместимых интерфейсов, что теперь это создает нам огромный лаг в переходный период. Сначала строится дорога, потом по ней едет машина. Когда нет ни того, ни другого – приходится выбирать коня. LLM не хватает рабочих данных для обучения. Значимая часть информации секьюрна: внутренние доки, продуктовая логика, контракты команд, ограничения бизнеса. Удобные API и MCP не завезли.

• Разработка слишком быстро меняется. Чтобы проект в студии открывался и собирался – его надо регулярно обновлять. То новый плагин добавят, то старый выпилят. Библиотеки, языки, компиляторы – все постоянно меняется. Проект на AGP 7.1.1 сбилдить в новой студии нереально. Плюс требования сторов: без того и сего не пустим, это обнови, таргет подними, фолдаблы поддержи, вырезы покажи, политику соблюди. Разработчик во всем этом варится и бдит контекст, потому что информация до сих пор пишется и шлифуется для людей. Модели не умеют учиться в моменте – они достаются нам предобученными. Чтобы шарить за новые изменения их нужно дополнительно накормить контекстом: репозиторий, документация, новые релизы.

• Командное взаимодействие и ответственность. Конечно же, агенты умеют ходить на дейлики, внимательно слушать, не зевать и не засыпать. Робот Оптимус может за тебя лежать на диване парить ашку и листать тикток. Но большая часть работы – не писать код, который не имеет ценности, а ходить договариваться, выявлять требования, разруливать конфликты, протаскивать решения, выстраивать процессы, обучать новичков и принимать риски. Каждый человек – целая вселенная, с которой нужно уметь взаимодействовать, чтобы позже продать результат. Ответственность за этот результат все еще стоит денег.

Мы всеми силами поможем машинам нас заменить. А сами отчалим в закат. Но не сегодня.
74311
Обновление эмодзипака

Добавлено 100 новых эмодзи.

🐗 TOON

🐗 AltStore

🐗 OpenCode

🐗 Tether USAT

🐗 Dia Browser

🐗 1Password

🐗 Rippling

🐗 Android Police

🐗 Clawd Bot

🐗 Qase

🐗 Organic Maps

🐗 Microsoft Intune

🐗 Microsoft SQL Server

🐗 Microsoft Network

🐗 Microsoft Visio

🐗 Google BigQuery

🐗 Google Data Studio

🐗 Google Fiber

🐗 Artix Linux

🐗 RedLab

🐗 Worldline

🐗 Konami

🐗 Asobo Studio

🐗 Fanatics

🐗 FLYR

🐗 InnoGames

🐗 Momentive

🐗 Feedly

🐗 Weave

🐗 NAVER

🐗 LangChain

🐗 Moonshot AI

🐗 Kimi AI

🐗 BioRenderer

🐗 Alpaca

🐗 Blinkist

🐗 Drata

🐗 Egnyte

🐗 Hex

🐗 Jam AI

🐗 Prettier

🐗 GitKraken

🐗 D3

🐗 AllTrails

🐗 gulp.js

🐗 LMArena

🐗 Rollup

🐗 Widevine

🐗 Scaleway

🐗 Quantic Dream

🐗 Novita AI

🐗 Fireworks AI

🐗 Cohere

🐗 Fal.ai

🐗 CodeScene

🐗 Nscale

🐗 T-Mobile

🐗 FrontierMath

🐗 Kioxia

🐗 Peercoin

🐗 PublicAI

🐗 OKX

🐗 Hyperbolic

🐗 Cerebras

🐗 Hetzner

🐗 IGN

🐗 CodeRabbit

🐗 MetaHuman

🐗 OVHcloud

🐗 Telenor Group

🐗 Workato

🐗 Plaid

🐗 Substack

🐗 Chakra UI

🐗 Gumroad

🐗 Immich

🐗 Bitget

🐗 Emercoin

🐗 Samsara

🐗 Zscaler

🐗 ServiceNow

🐗 SentinelOne

🐗 Lobsters

🐗 Context7

🐗 Neon Serverless Postgres

🐗 Cypress

🐗 Presto

🐗 GrowthBook

🐗 Phantom

🐗 Redmine

🐗 Superwall

🐗 wgpu

🐗 Fileverse

🐗 ComfyUI

🐗 SimpleX Chat

🐗 Nextcloud

🐗 arXiv

🐗 Descript

🐗 Krea AI

🐗 Bigo Live

Dev Emoji 1
Dev Emoji 2
Dev Emoji 3
Dev Emoji 4
Dev Emoji 5
Dev Emoji 6
Dev Emoji 7
Text Emoji
Android Emoji
Adaptive Emoji

Миниапп с названиями, поиском и фильтрами

#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
5221
Обновлено 7 эмодзи

🐗 ➡️ 🐗 YouTube

🐗 ➡️ 🐗 Roblox

🐗 ➡️ 🐗 Microsoft Visual Studio

🐗 ➡️ 🐗 Microsoft Clipchamp

🐗 ➡️ 🐗 Bethesda

🐗 ➡️ 🐗 AMD

🐗 ➡️ 🐗 Huawei AppGallery
Please open Telegram to view this post
VIEW IN TELEGRAM
521
Новый Android эмодзипак

Добавлен новый пак с 50 Android-эмодзи. Размер 100х100. Без рамок. Без фона.

🐗 Android

🐗 Android Jetpack

🐗 Android Jetpack

🐗 Android Studio

🐗 Android Studio Nightly

🐗 Android App Bundle

🐗 Compose

🐗 Material3

🐗 Google Play

🐗 Google Play Console

🐗 Google Play Games

🐗 Google Play Books

🐗 Android 5 Lollipop

🐗 Android 6 Marshmallow

🐗 Android 7 Nougat

🐗 Android 8 Oreo

🐗 Android 9 Pie

🐗 Android 10

🐗 Android 11

🐗 Android 12

🐗 Android 13

🐗 Android 14

🐗 Android 15

🐗 Android 16

🐗 Google

🐗 ARCore

🐗 Google Play Services

🐗 Wear OS

🐗 Android Auto

🐗 ML Kit

🐗 Google I/O

🐗 Gemini

🐗 Firebase

🐗 Firebase Studio

🐗 Flatter

🐗 Dart

🐗 JetBrains

🐗 Kotlin

🐗 KMP

🐗 CMP

🐗 Gradle

🐗 Java

🐗 Rx

🐗 F-Droid

🐗 Huawei

🐗 AppGallery

🐗 RuStore

🐗 Coil

🐗 Detekt

🐗 Realm

#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
7331
Религия трудных времен

Удивительные свойства человеческой психики проявляются, когда мир пребывает в тряске. Сегодня жить непросто, будущее туманно, конца и края не видно. Как говорится, никто не вернется в 2018 год.

В такие периоды прошивка, стараясь защитить себя, переходит в оборону. Часто – через деструктивные установки. Вот какие обнаружил я:

• Вера в перерождение. В следующей жизни всё будет кучеряво, в этой можно не напрягаться. Чуть со стула не упал, когда такое услышал. Я принимаю религию как модель философии или нравственную опору, в дополнение к тому, что нас в конце концов сожрут черви. Но перерождение? Это уже клиника. И почему твоя прошлая жизнь не оставила тебе пароль от текущей?

• Отказ от достигаторства. Буду жить середнячком, не отсвечивать, звезд с неба не хватать, выйду из игры. Старый добрый дауншифтинг в обертке выбираю себя и отказываюсь копить начальнику на машину. Главный здесь самообман – что мир замедлится вместе с тобой. Ты просто снимаешь себя с дистанции, пока другие продолжат идти. Твой родезийский прапрадед не предпочел чилл на дереве антропогенезу.

• Поиск волшебной пилюли от всех бед. Про нее снят один из моих любимых фильмов 2011 года. И хотя это было во все времена, сейчас явление вошло в абсолют. 170 млн охвата набирает статья как изменить целую жизнь за один день. Никак. Дам три совета бесплатно: разведись с женой и найди молодую любовницу, переезжай в другой город, уволься с текущей работы. Перемены будут кардинальными.

Есть парадокс: в сложное время жить проще. Половина твоих конкурентов тильтует на автопилоте в ожидании чуда. Они начнут действовать, только когда станет легче. А сейчас может выиграть тот, кто идеального момента не ждет.
8532
BaseViewModel

Вчера на ютубе попался видос с критикой базовых классов, таких как BaseActivity и BaseViewModel. Антипаттерны это и нарушение принципа единственной ответственности. Полностью согласен. Если с активити все ясно – одна на проект и base-класс не нужен, то вокруг вьюмоделей не прекращается дискуссия с момента их появления.

Как ответственный инженер, я постоянно думаю, как проектировать элегантные решения, которые играют в долгую. По мере просмотра туториала решил наперегонки с автором декомпозировать данный подход в своих приложениях. Тем более в котлине и компоузе постоянно изобретают что-то новое. Мог случайно пропустить.

К какому выводу пришел автор видео? Давайте просто переименуем BaseViewModel в MviViewModel! Тьфу, блять! У меня она так всегда и называлась.

В общем простенькая структура со скрина остается. Если где-то придумали лучше – с радостью бы подсмотрел. Я стал мало копаться в чужом коде, насмотренность падает, ощущаю деградацию. Надеюсь безосновательно.

По сути у нас есть Compose и подход Model–View–Intent. Один источник истины в виде единого State. Предсказуемые переходы состояний и понятный контракт между UI и логикой. UI отправляет намерения, ViewModel их обрабатывает, обновляет State и при необходимости отправляет разовые события через отдельный поток эффектов. События можно перенести куда-нибудь, но много ли выиграем? Я пошел дальше – у меня две базовые вьюмодели. Корутинная вторая отвечает за общий хэндлинг ошибок. Тут исходники.

Вижу здесь как минимум три недостатка:
• Подвешивание one-off эффектов. Событие может приходить не в нужный момент из-за паузы UI.
• Гонка асинхронных интентов между собой при росте их количества.
• Нарушение принципа LSP, когда базовая ViewModel параметризована локальным FeatureEvent и нельзя отправить глобальный AppEvent.

Но для приложений на 20 экранов с 3 кнопками на каждом – более чем достаточно и просто в реализации.
55311
Концепция этого блога

Ее пока что не наблюдается. Единая линия повествования никак не выстраивается. Мне просто вздумалось пографоманить и понабрасывать на вентилятор. Все побежали и я побежал. Занимаюсь оцифровкой своего сознания в символьные закорючки. Иногда с картинками и кружочками.

Не могу не заметить, что у многих блогов в интернете концепция существует. Разберем какие есть и попробуем прибубениться.

Айтишники часто пишут технопосты, где главная ценность – инженерная польза. Автор как личность на вторых ролях. Разбор бага, гайд, мнение про какой-то инструмент. Это отлично капитализирует знания: однажды разобрался и ссылаешься на свой же материал. Параллельно выстраивается позиционирование и качается системное мышление. Из минусов: высокая цена времени, риск устаревания, давление точности. Я бы сказал, что такое оцифровывать нужно даже в стол. У меня так появился роадмап. Устал делать одно и тоже на всех работах. Будем пропихивать.

Эксперт в нише – методично вспахиваешь одну понятную поляну, где есть интерес и рынок. Ценность в системности и росте доверия – подписываются как на источник. Минусы: ниша легко превращается в клетку, нужно держать осаночку, аудитория не одобряет выход за рамки. Думаю, этот путь столь же сложен, как и очевиден для выбора.

Далее есть лайфстайл-блоги. Главный их продукт – ощущение близости к автору. Никакой узкой экспертизы. Этакий бесконечный сериал. Меня особенно цепляет эстетичная картинка. Бесконечно восхищаюсь людьми, которые все о чем пишут – как пьют матчу в модных кофейнях. По крайней мере я так это считываю. Мы настолько на разных полюсах, что я до сих пор не различаю сорта кофе. Эспрессо, латте, макиато – однохуйственно. Да и в чае я профан. Недавно опять перепутал чабрец и бергамот. Но хотелось бы не путать.

Рядом с лайфстайлом стоят кризисные дневники – всевозможные выживальщики, эмигрантские истории и тбилисские треды. Всегда читаются запоем, потому что есть ясная драматургия. У тех, кто героически страдает, интересно существует или просто карикатурно заламывает руки, может быть в разы больше влияния, охватов и социальных поглаживаний. Мимо этого жанра я пролетаю со свистом, так как давно живу в суперкомфорте и со своей сидячей работой не нажил даже геморроя. Часто мой способ решения проблем – банальное их избегание.

Новостников, собирателей дайджестов, кураторов вкуса и всевозможных критиков, думаю, обсуждать нет смысла – их отлично заменяет нейросеть. Я как только топик в чате настроил, сразу от всех и отписался.

Потребительская экспертиза и интертеймент. Первое явление мне очень нравится. Любят наши мозги дешевые данные о дорогих решениях. А второе я предпочитаю осваивать только как зритель.

Еще есть логика: что больше лайкают – про то и пишем. Схема кажется рабочей, но затягивает в гонку за мгновенной обратной связью и постепенно сужает личность. Легко потерять себя. Поэтому пока пишем про то, что интересно мне.

Часто работает: за что платят – то и концепция. Платеж – честный сигнал о ценности. Человек жертвует ресурсом, значит выгода для него ощутимая. Формируется ядро аудитории и появляется ценность продукта. Это я безоговорочно одобряю.

Последнее наблюдение: блог – прямое отражение жизни. Идущий с пустотой внутри пустоту и обретет. Если жизнь насыщенная и событийная – блог будет таким же. Но работает и в обратную сторону: потребность писать посты подталкивает жить интереснее и специально залезть в какой-нибудь пиздец.

Чуть того, немного сего – так и барахтаемся. Хорошо, что блог есть. Когда рак на горе свистнет медведь в лесу сдохнет и понадобится метафизический мешок золота тащить не в одиночку, будет куда крикнуть. Каждый пост здесь – призыв к дискуссии. Комментарии и мнения ценнее содержания. Лучшие люди в моей жизни вовремя говорили мне, какой я дурак. И я шел становиться лучше.
632221
winter arc

Через две недели в нашем полушарии официально закончится зима. Она показала, что такого понятия как зимняя арка в моей жизни не существует.

В самом сезоне жесткой дисциплины, соблюдении привычек и прокачке не вижу ничего плохого. Сам воспринимаю жизнь как игру с бесконечной луткой. Но зимняя арка в моем представлении звучит менее героично, имеет сектантский вайб и стоит в одном ряду с такими псиопчиками как недрочабрь и новая жизнь с понедельника. Еще и зима в этом году выдалась люто холодной. Прошлую я отбегал в кроссовках.

Поэтому в холода могу лишь разлагаться на диване за просмотром больницы питт, либо рубить монголов в цусиме. Что-то дельное выдам только летом в тепле и уюте. Я не ищу смысла в дискомфорте, а принимаю честный дебафф: меньше света и тепла – ниже базовая энергия и настроение.
7442
Все должны вести телеграм каналы

Поздновато публикуется этот пост. Но скоро, чувствую, весь трафик в нашей стране будет через Нидерланды петлять. Не страшно.

Сейчас, когда все живут в интернете, бывает сложно понять кто ты что ты куда ты. Совсем другое дело, если у тебя есть телеграм канал на сто подписчиков, на худой конец твиттер. В который ты иногда что-то вкидываешь.

На конференции Профсоюзная я подходил знакомиться к коллегам, на чьи каналы подписан и начинал беседу с чего-то, что их интересует. Это кратно упрощает дальнейшее общение.

Понятно, чем человек живет, какие у него проблемы, по каким странам катается, какие сериалы смотрит, какие игры проходит. Заочно полистал канал сидя на толчке и уже есть о чем распиздеться.

И подарки дарить проще. Культуры вишлистов у нас нет, а так хоть какие-то увлечения палятся или фотка хаты в которой светильника не хватает.
8331
Прощай портретный мир

Скоро уже в шестнадцатый раз буду поднимать targetSdk. Начинал с уровня 21, пятая версия андроида. Этот апдейт особенный: в гугле взглянули на год в календаре и решили, что всё, пора – мы полностью готовы к адаптивности.

Несмотря на то, что на каждом собеседовании спрашивают про сохранение состояния и как с этим справляются Activity и ViewModel, я никогда не поддерживал альбомную ориентацию. Портрет всегда жестко фиксировался в манифесте. Это не только плюс час к разработке каждого экрана, но и дополнительная нагрузка на дизайнеров и тестировщиков.

Новый Android 17 будет игнорировать ограничения по ориентации, масштабируемости и соотношению сторон на больших экранах. Потому что такие запреты мешают приложениям быть адаптивными.

Изменения в платформе традиционно делятся на две категории: те, что применяются ко всем приложениям независимо от targetSdkVersion, и те, что начинают действовать только при таргете на Android 17 и выше.

У нас есть три сценария:

• Отложить обновление и остаться на Android 16. В Google Play правило простое: чтобы выкатывать новое приложение или апдейты, targetSdk должен быть не старше года относительно последнего major-релиза Android.

• Подготовиться к переходу: поддержать адаптивность и альбомную ориентацию, обновить дизайн и всё протестировать.

• Не делать ничего: те полтора процента пользователей, которые кладут телефон на бок, плюс владельцы планшетов и раскладушек, наконец получат свою адаптивность. А современный стек с Flow, ViewModel и Material3 переживёт смену конфигурации без дополнительных телодвижений.

До сентября можно не чесаться вообще. А потом выйдет складной айфон, и эппл снова покажет, как надо разработчиков под свою платформу ставить раком. Тренд прикатится и к нам в андроид.
42221
🐗
Please open Telegram to view this post
VIEW IN TELEGRAM
41
Раздражающий UX в мобильных приложениях

Новая рубрика.

В нашем мире тяжело быть человеком, который еще не решил, чего хочет. Корпорации тут же начинают помогать: бесконечные баннеры, посмотри сюда, проверь это. Красные кружки уведомлений. Боттомщиты с предложением купить корм для собаки, которой у тебя нет. Доколе.

И первым на нашей стене позора будет приложение МТС Деньги. Ребята, вы могли крестик на баннерах сделать еще меньше? Моими сосисками попасть по нему никак невозможно. А закрыть рекламный баннер — естественная человеческая потребность. Тьфу на вас.
9🤣211
Ну и чтобы два раза не вставать – приложение Авито. Вдруг выяснилось, что мои интересы как продавца там никого не волнуют. Очередной торгаш без церемоний врывается в чат, а в быстрых ответах вместо «Катись колбаской» и «Продам за 20 тыщ» стоят три огромные кнопки «Да, забирайте». Нажмёшь случайно – и негативный отзыв обеспечен. Тьфу на вас, формашлепов.
1141
Ну и последнее на сегодня – Яндекс Карты. Я скупил у вас все подписки, но это не спасло меня от рекламы пельмешей прямо в навигаторе. И так в арендованной тачке не по себе, а тут ещё такое отвлекалово. Складывается ощущение не единой компании, а набора приложений, где каждое обязано само себе на хлеб заработать. Иначе чем объяснить рекламу в аппах погоды и метро. Тьфу вам в бульмеши.
1372