⚡ Сайты github, google и apple в РФ недоступны
По данным хабра, Git и вообще доступ к репам без доп сетевых средств сейчас невозможен.
[UPD] Спустя 2 часа ситуация стабилизировалась. РКН при этом заявил, что доступ не ограничивался.
😃 iOS Dev
По данным хабра, Git и вообще доступ к репам без доп сетевых средств сейчас невозможен.
[UPD] Спустя 2 часа ситуация стабилизировалась. РКН при этом заявил, что доступ не ограничивался.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢31😨16😍10👍5🕊4🔥3😱3
This media is not supported in your browser
VIEW IN TELEGRAM
Морфинг текста на SwiftUI в 50 строк кода
Вы же помните, что я просто обожаю необычные эффекты)
Вот как тут, например - с принтером и анимацией отчётов за пару десятков строк кода. Или в стиле tap to cash (до сих пор прилетают запросы где взять туториал).
Так вот, делюсь одним необычным и несложным эффектом - вдохновиться можете где-нибудь здесь.
А по факту у нас два текста кроссфейдятся с анимированным блюром, а с помощью шейдера поверх мы режем альфу по заданному порогу. В общем из-за этого размытые буквы «слипаются» и перетекают друг в друга, как жидкость)
Если разобраться, как такое сделать, можно удивиться, насколько все просто (это аналог feColorMatrix "0 0 0 255 -140" из примера выше):
Ну а если вам все-таки нужен исходный код, вы можете прям переписать его с гифки или не терять время и найти его:⭐️ здесь или 💰 тут.
😃 iOS Dev
Вы же помните, что я просто обожаю необычные эффекты)
Вот как тут, например - с принтером и анимацией отчётов за пару десятков строк кода. Или в стиле tap to cash (до сих пор прилетают запросы где взять туториал).
Так вот, делюсь одним необычным и несложным эффектом - вдохновиться можете где-нибудь здесь.
А по факту у нас два текста кроссфейдятся с анимированным блюром, а с помощью шейдера поверх мы режем альфу по заданному порогу. В общем из-за этого размытые буквы «слипаются» и перетекают друг в друга, как жидкость)
Если разобраться, как такое сделать, можно удивиться, насколько все просто (это аналог feColorMatrix "0 0 0 255 -140" из примера выше):
#include <metal_stdlib>
#include <SwiftUI/SwiftUI_Metal.h>
using namespace metal;
[[stitchable]] half4 textMorphThreshold(float2 position,
SwiftUI::Layer layer,
float4 bounds,
float threshold,
float softness) {
half4 c = layer.sample(position);
float a = float(c.a);
if (a < 1e-4) {
return half4(0.0);
}
float na = smoothstep(threshold - softness, threshold + softness, a);
float3 rgb = float3(c.rgb) / a;
return half4(half3(rgb * na), half(na));
}Ну а если вам все-таки нужен исходный код, вы можете прям переписать его с гифки или не терять время и найти его:
Please open Telegram to view this post
VIEW IN TELEGRAM
4 20😍7😨3🔥2😎1
iOS Dev
⚡️ Приложения VK удалили из российского AppStore Пока что пропали Музыка, Мессенджер, Видео и Дзен. 😃 iOS Dev
⚡Приложения VK и МАХ исчезли из Google Play
Пресс-служба ВК сообщила, что пользователи Android-устройств продолжат получать пуш-уведомления о сообщениях, событиях и звонках в МАХ и приложениях VK.
😃 iOS Dev
Пресс-служба ВК сообщила, что пользователи Android-устройств продолжат получать пуш-уведомления о сообщениях, событиях и звонках в МАХ и приложениях VK.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥57🕊6😢5😈5😨4👍3😡3😴1🤝1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект липкого pull-to-refresh в SwiftUI
📺 На канале Kavsoft выложили полезный и несложный туториал для создания эффекта лоадера с морфингом из Dynamic Island.
📖 А ещё одну демонстрацию похожего стиля можно посмотреть в этом посте.
😃 iOS Dev
📺 На канале Kavsoft выложили полезный и несложный туториал для создания эффекта лоадера с морфингом из Dynamic Island.
📖 А ещё одну демонстрацию похожего стиля можно посмотреть в этом посте.
Please open Telegram to view this post
VIEW IN TELEGRAM
2 44🔥22⚡3✍1👍1🙏1
🫨 Проблемы с AppStore в РФ
По данным хабра магазин приложений AppStore начал нестабильно работать в России. У части пользователей сервисы AppStore не работают вовсе (без специальных сетевых средств).
Похоже, что проблемы с прошлой недели продолжаются.
😃 iOS Dev
По данным хабра магазин приложений AppStore начал нестабильно работать в России. У части пользователей сервисы AppStore не работают вовсе (без специальных сетевых средств).
Похоже, что проблемы с прошлой недели продолжаются.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢28👍12😨9🤯3🕊3👾3🔥2🤩2😍1😡1
Зарплаты IT-специалистов в первой половине 2026: Objective-C всё еще самый доходный
Уровень компенсации для топовых разрабов, знающих Objective-C не только возглавляет таблицу, но ещё и лидер по темпу, +13%.
Ощутимо зарплаты выросли и в Swift (на 7% до 326 000 ₽), котлин тоже прибавил на 5% до 320 000 ₽.
К слову, Авито больше не номер один среди компаний, перехватил эстафетную палочку Райффайзен Банк (+9%, 400 000 - медиана).
В целом, ситуация на рынке такая, что медианная зарплата на IT-рынке сейчас — 191 000.
📖 Остальная аналитика доступна на хабре.
Прошлые обзоры - вот тут.
😃 iOS Dev
Уровень компенсации для топовых разрабов, знающих Objective-C не только возглавляет таблицу, но ещё и лидер по темпу, +13%.
💰 Доход разработчиков на Objective-C: 400 000 рублей.
Ощутимо зарплаты выросли и в Swift (на 7% до 326 000 ₽), котлин тоже прибавил на 5% до 320 000 ₽.
К слову, Авито больше не номер один среди компаний, перехватил эстафетную палочку Райффайзен Банк (+9%, 400 000 - медиана).
В целом, ситуация на рынке такая, что медианная зарплата на IT-рынке сейчас — 191 000.
📖 Остальная аналитика доступна на хабре.
Прошлые обзоры - вот тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
5 19🏆8😱5🤯3👍2👾1
🫨 ИИ-модели от OpenAI вышли из-под контроля и устроили хакерскую атаку
Недавно компании OpenAI и Hugging Face (возможно, главный хаб для моделей, его я юзал например, вот тут) столкнулись с беспрецедентным инцидентом кибербезопасности, вызванным автономными действиями ИИ-агентов во время внутреннего тестирования.
Стремясь любой ценой решить поставленную задачу, модели смогли вырваться из песочницы и получить доступ к hugging face.
ИИ самостоятельно обнаружил и проэксплуатировал уязвимость нулевого дня во внутреннем прокси-сервере и использовал украденные учетки.
Службы безопасности Hugging Face сумели оперативно обнаружить аномальную активность и пресечь её после инцидента. OpenAI выпустили пресс-релиз со всеми подробностями.
Берегите свои креды с молоду, как говорится.
😃 iOS Dev
Недавно компании OpenAI и Hugging Face (возможно, главный хаб для моделей, его я юзал например, вот тут) столкнулись с беспрецедентным инцидентом кибербезопасности, вызванным автономными действиями ИИ-агентов во время внутреннего тестирования.
Стремясь любой ценой решить поставленную задачу, модели смогли вырваться из песочницы и получить доступ к hugging face.
ИИ самостоятельно обнаружил и проэксплуатировал уязвимость нулевого дня во внутреннем прокси-сервере и использовал украденные учетки.
Службы безопасности Hugging Face сумели оперативно обнаружить аномальную активность и пресечь её после инцидента. OpenAI выпустили пресс-релиз со всеми подробностями.
Берегите свои креды с молоду, как говорится.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🤯19😈6😨5🤓2👍1😢1 1
Мир прототипов
Я пилю приложения уже больше 15 лет и за это время увидел рассвет и закат многих проектов: от первых мессенджеров ВК до яндекс.музыки (последнее обновление никуда не годится) и крупных игровых тайтлов, да и вообще, если мы входим в эпоху, когда игры на плойке будут только в цифре - это уже не звоночек, это чёртов колокол.
Последние пару-тройку лет постоянно слышу: я сделал аналог ноушена, я запустил агрегатор новостей за день, я выпустил собственный браузер.
Ага, конечно.
Оказывается, что там надо немного допилить (процентов 90), скачиваний у ребят миллионы (1-2 в неделю), а графики так и вовсе нарисованы какой-нибудь нейросеткой.
Ну с графиками хотя бы будет повеселее: вы же в курсе, что крупные ии-игроки добавляют паттерны в свои изображения, по которым можно отличить ии-слоп? Если нет, теперь в курсе.
Я к тому, что всё что изменилось - только количество: если раньше плохих приложений было 10, то теперь их будет 1 000 000, но качество не улучшилось ни на йоту.
Лагающего, неповоротливого, одинакового стало ожидаемо намного больше.
Много ума не надо - отдать диз чего угодно клоду/кодексу (нужное подчеркнуть) и на выходе получить прототип.
А потом неделями, месяцами, годами допиливать до хотя бы какого-нибудь приемлемого уровня.
Это разве прорыв?
Даже телега в последнее время не радует. Что уж говорить об остальных.
Если кто-то смотрел ЧМ, то заметили что нейрослоп заполонил и рекламу. Так и представляю, как ушлые маркетологи говорят: ну мы сделаем почти похоже на настоящую, только дешевле, будет почти также. Нет, не почти - это беспросветный, вымученный, чудовищный, вырвиглазный со слабой аурой стиль, за реализацию которой наверняка кто-то получит премию.
Когда с таким количеством ресурсов пользователям отдают это - становится по-настоящему страшно за индустрию.
Страшно, что мы уже живём в мире прототипов.
😃 iOS Dev
Я пилю приложения уже больше 15 лет и за это время увидел рассвет и закат многих проектов: от первых мессенджеров ВК до яндекс.музыки (последнее обновление никуда не годится) и крупных игровых тайтлов, да и вообще, если мы входим в эпоху, когда игры на плойке будут только в цифре - это уже не звоночек, это чёртов колокол.
Последние пару-тройку лет постоянно слышу: я сделал аналог ноушена, я запустил агрегатор новостей за день, я выпустил собственный браузер.
Ага, конечно.
Оказывается, что там надо немного допилить (процентов 90), скачиваний у ребят миллионы (1-2 в неделю), а графики так и вовсе нарисованы какой-нибудь нейросеткой.
Ну с графиками хотя бы будет повеселее: вы же в курсе, что крупные ии-игроки добавляют паттерны в свои изображения, по которым можно отличить ии-слоп? Если нет, теперь в курсе.
Я к тому, что всё что изменилось - только количество: если раньше плохих приложений было 10, то теперь их будет 1 000 000, но качество не улучшилось ни на йоту.
Лагающего, неповоротливого, одинакового стало ожидаемо намного больше.
Много ума не надо - отдать диз чего угодно клоду/кодексу (нужное подчеркнуть) и на выходе получить прототип.
А потом неделями, месяцами, годами допиливать до хотя бы какого-нибудь приемлемого уровня.
Это разве прорыв?
Даже телега в последнее время не радует. Что уж говорить об остальных.
Если кто-то смотрел ЧМ, то заметили что нейрослоп заполонил и рекламу. Так и представляю, как ушлые маркетологи говорят: ну мы сделаем почти похоже на настоящую, только дешевле, будет почти также. Нет, не почти - это беспросветный, вымученный, чудовищный, вырвиглазный со слабой аурой стиль, за реализацию которой наверняка кто-то получит премию.
Когда с таким количеством ресурсов пользователям отдают это - становится по-настоящему страшно за индустрию.
Страшно, что мы уже живём в мире прототипов.
Please open Telegram to view this post
VIEW IN TELEGRAM
9❤🔥57💯21🔥12😢11 6🍓1🆒1
Пересмотр модульной архитектуры iOS-приложения компании JET в 2026 году
Незначительная проблема с одним из UI-компонентов выявила проблемы существующей прежде модели и это стало триггером к пересмотру концепта целиком.
В обновленном подходе каждый компонент классифицируется по своей роли, а не по тому, где он находится в графе зависимостей.
Как следствие, в JET ввели пять категорий. Три из них относятся к собственным компонентам (App, Feature, Foundation); две - к сторонним зависимостям (SDK, Utility).
📖 Про то, что у них получилось, и как работает всё вместе - можно почитать в техническом блоге.
😃 iOS Dev
Незначительная проблема с одним из UI-компонентов выявила проблемы существующей прежде модели и это стало триггером к пересмотру концепта целиком.
В обновленном подходе каждый компонент классифицируется по своей роли, а не по тому, где он находится в графе зависимостей.
Как следствие, в JET ввели пять категорий. Три из них относятся к собственным компонентам (App, Feature, Foundation); две - к сторонним зависимостям (SDK, Utility).
📖 Про то, что у них получилось, и как работает всё вместе - можно почитать в техническом блоге.
Please open Telegram to view this post
VIEW IN TELEGRAM
5 13✍5🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
В Яндексе бьют людей?
Добрался до разбора доклада про внедрение AI, в котором руководитель мобильной разработки заявляет на весь зал, что у них бьют людей (не буквально, это важно) за то, что при использовании ИИ-агентов они отдают вопросы при комментах в пулл-реквестах для LLM.
Ну, даже не знаю как это комментировать.
В целом, все прогнозы сбываются. Вроде и продвигают ИИ в массы, а вроде и с оговорками.
😃 iOS Dev
Добрался до разбора доклада про внедрение AI, в котором руководитель мобильной разработки заявляет на весь зал, что у них бьют людей (не буквально, это важно) за то, что при использовании ИИ-агентов они отдают вопросы при комментах в пулл-реквестах для LLM.
Ну, даже не знаю как это комментировать.
В целом, все прогнозы сбываются. Вроде и продвигают ИИ в массы, а вроде и с оговорками.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35🤣15👍6😱6 3🔥1👏1🤯1
Пасхалки в крашлогах Apple с помощью hexspeak
Помните, когда-то на калькуляторах можно было писать всякие прикольные слова с помощью цифр?
Оказывается, есть специальный термин hexspeak, целая форма правописания с использованием шестнадцатеричных цифр.
Apple не остался в стороне и несколько кодов завершения также написаны в этом стиле:
Да и вообще, рекомендую посмотреть вики, там много любопытных отсылок, есть даже Ace of Base 🎵
😃 iOS Dev
Помните, когда-то на калькуляторах можно было писать всякие прикольные слова с помощью цифр?
Оказывается, есть специальный термин hexspeak, целая форма правописания с использованием шестнадцатеричных цифр.
Apple не остался в стороне и несколько кодов завершения также написаны в этом стиле:
0xdead10cc(dead lock) - приложение удерживает системный ресурс во время работы в фоновом режиме.0x8badf00d(ate bad food) - watchdog убивает за слишком долгую блокировку основного потока при запуске или возобновлении.0xc00010ff(cool off) - используется Apple в отчетах о крашах iOS, когда приложение было закрыто в ответ на термическое событие.0xdeadfa11(dead fall) - юзер принудительно закрыл зависшее приложение.0xbad22222(bad too repeatedly) - VoIP-приложуху крашнул iOS, поскольку оно возобновлялось слишком часто.0xbaaaaaad(baaaaad) - лог представляет собой снимок состояния всей системы, не отчет о краше.0xdeadfeed(dead feed) - краш из-за превышения таймаута при запуске службы.
Да и вообще, рекомендую посмотреть вики, там много любопытных отсылок, есть даже Ace of Base 🎵
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥50 13❤🔥6👍3👏2🎉1😨1👾1
Создание адаптивных немодальных панелей в SwiftUI
📖 В этой статье рассказано, как создать собственные стили для таких панелей, а также описаны решения, которые позволили обеспечить поддержку и потретного, и альбомного режимов.
😃 iOS Dev
📖 В этой статье рассказано, как создать собственные стили для таких панелей, а также описаны решения, которые позволили обеспечить поддержку и потретного, и альбомного режимов.
Please open Telegram to view this post
VIEW IN TELEGRAM
3 18🔥8✍6👍1👏1👾1
This media is not supported in your browser
VIEW IN TELEGRAM
Библиотека лоадеров для работы с Foundation Models
Когда-то я делился примерами красоты с помощью математики. Но если подрубить TimelineView, Canvas и немного воображения, сейчас можно создать намного более весёлые и интересные кейсы.
Например, скорее всего если вы отдаете юзерам инфу поэтапно (или генерите изображения), а ваши модельки крутятся долго, и как раз в этот момент совершенно точно что-то нужно показывать.
Для этого можно создать библиотеку компонентов и юзать любую комбинацию, хоть разбивать поэтапно и показывать последовательность, хоть показывать какой-то один из них.
Вот, например, кит, который используется на гифке, которую вы видите:
А целиком примеры уже доступны:⭐️ здесь или 💰 тут.
😃 iOS Dev
Когда-то я делился примерами красоты с помощью математики. Но если подрубить TimelineView, Canvas и немного воображения, сейчас можно создать намного более весёлые и интересные кейсы.
Например, скорее всего если вы отдаете юзерам инфу поэтапно (или генерите изображения), а ваши модельки крутятся долго, и как раз в этот момент совершенно точно что-то нужно показывать.
Для этого можно создать библиотеку компонентов и юзать любую комбинацию, хоть разбивать поэтапно и показывать последовательность, хоть показывать какой-то один из них.
Вот, например, кит, который используется на гифке, которую вы видите:
enum LoaderKit {
static let goldenAngle = Double.pi * (3 - (5.0).squareRoot())
static func fibonacciSphere(_ count: Int) -> [LDVec3] {
guard count > 1 else { return [LDVec3(x: 0, y: 0, z: 0)] }
var pts: [LDVec3] = []
pts.reserveCapacity(count)
for i in 0..<count {
let y = 1 - (Double(i) / Double(count - 1)) * 2 // 1 … -1
let r = (1 - y * y).squareRoot()
let phi = Double(i) * goldenAngle
pts.append(LDVec3(x: cos(phi) * r, y: y, z: sin(phi) * r))
}
return pts
}
static func rotateY(_ p: LDVec3, _ a: Double) -> LDVec3 {
let c = cos(a), s = sin(a)
return LDVec3(x: p.x * c + p.z * s, y: p.y, z: -p.x * s + p.z * c)
}
static func rotateX(_ p: LDVec3, _ a: Double) -> LDVec3 {
let c = cos(a), s = sin(a)
return LDVec3(x: p.x, y: p.y * c - p.z * s, z: p.y * s + p.z * c)
}
static func rotateZ(_ p: LDVec3, _ a: Double) -> LDVec3 {
let c = cos(a), s = sin(a)
return LDVec3(x: p.x * c - p.y * s, y: p.x * s + p.y * c, z: p.z)
}
static func dot(_ x: CGFloat, _ y: CGFloat, _ r: CGFloat) -> Path {
Path(ellipseIn: CGRect(x: x - r, y: y - r, width: r * 2, height: r * 2))
}
static func hash(_ i: Int, _ salt: Double = 0) -> Double {
let v = sin(Double(i) * 12.9898 + salt * 78.233 + 0.5) * 43758.5453
return v - v.rounded(.down)
}
static func lerp(_ a: Double, _ b: Double, _ t: Double) -> Double { a + (b - a) * t }
static func smoothstep(_ t: Double) -> Double { let x = min(max(t, 0), 1); return x * x * (3 - 2 * x) }
static func easeOut(_ t: Double) -> Double { 1 - pow(1 - min(max(t, 0), 1), 3) }
}А целиком примеры уже доступны:
Please open Telegram to view this post
VIEW IN TELEGRAM
6😍28🔥9 8👍2👏2👾1
Как в Apple переписывают проекты на Swift
Анализаторы шрифтов обрабатывают данные из ненадежных источников, в результате чего TrueType оказывается уязвимым местом, критически важным с точки зрения безопасности.
Чтобы повысить отказоустойчивость формата на платформах Apple, инженеры приняли решение обновить проект с языка C на Swift.
Перед командой стояла амбициозная задача: обеспечить полную безопасность памяти, сохранить 100% попиксельную совместимость рендеринга и не допустить падения производительности.
Для проверки точности инженеры покрыли код тестами на 99,7% и прогнали 27 миллионов глифов из реальных PDF, сравнивая каждый битмап с эталоном.
📖 В этой статье можно посмотреть, какие трюки они использовали для работы с памятью и каких результатов достигли.
😃 iOS Dev
Анализаторы шрифтов обрабатывают данные из ненадежных источников, в результате чего TrueType оказывается уязвимым местом, критически важным с точки зрения безопасности.
Чтобы повысить отказоустойчивость формата на платформах Apple, инженеры приняли решение обновить проект с языка C на Swift.
Перед командой стояла амбициозная задача: обеспечить полную безопасность памяти, сохранить 100% попиксельную совместимость рендеринга и не допустить падения производительности.
Для проверки точности инженеры покрыли код тестами на 99,7% и прогнали 27 миллионов глифов из реальных PDF, сравнивая каждый битмап с эталоном.
📖 В этой статье можно посмотреть, какие трюки они использовали для работы с памятью и каких результатов достигли.
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥19 14🏆4👍1
On-demand resources будут задепрекейчены в iOS 27
📖 Ресурсы по запросу (on-demand) это контент, который размещался в App Store и находился отдельно от соответствующего бандла. Они позволяли уменьшить размер приложения, ускорить загрузку и расширить функциональность.
Вместе с ними под deprecated попал и NSBundleResourceRequest.
Теперь Apple рекомендует использовать только Background Assets.
😃 iOS Dev
📖 Ресурсы по запросу (on-demand) это контент, который размещался в App Store и находился отдельно от соответствующего бандла. Они позволяли уменьшить размер приложения, ускорить загрузку и расширить функциональность.
Вместе с ними под deprecated попал и NSBundleResourceRequest.
Теперь Apple рекомендует использовать только Background Assets.
Please open Telegram to view this post
VIEW IN TELEGRAM
4😢17 7😨6😎3👏1🕊1
А помните, как появился клод и кодекс, и сразу стало миллион инновационных приложений, каждое запускается за 0.25 секунд, 120 фпс у каждого, сам апстор очистился, и программисты все такие светлые вокруг и все друг другу улыбаются.
Вот и я не помню.
😃 iOS Dev
Вот и я не помню.
Please open Telegram to view this post
VIEW IN TELEGRAM
5😁112🤣18🔥7😢3 2👍1
Давно себе хотел пополнить коллекцию необычных девайсов и в этот раз добавил себе trmnl - e-ink экран на максималках.
Ребята когда-то на кикстартере собрали 150к вместо требуемых 5к, а потом ещё и выиграли хакатон с решением в виде отдельной читалки (можно чекнуть на гитхабе) для контента в телеге.
Из особенностей: есть гигантская коллекция плагинов на любой вкус, но меня привлекла возможность самому пилить любые нужные фичи (да хоть крашлитикс или апметрику можно прикрутить, кому что нравится).
⭐️ А у вас есть аналоги? Хотите поделиться? Или может даже делаете сами?
😃 iOS Dev
Ребята когда-то на кикстартере собрали 150к вместо требуемых 5к, а потом ещё и выиграли хакатон с решением в виде отдельной читалки (можно чекнуть на гитхабе) для контента в телеге.
Из особенностей: есть гигантская коллекция плагинов на любой вкус, но меня привлекла возможность самому пилить любые нужные фичи (да хоть крашлитикс или апметрику можно прикрутить, кому что нравится).
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥25 10🤩3👍2💯2
Практическое руководство по совместимости Liquid Glass с UIKit
Осень приближается, а вместе с ней и новые требования к приложениям.
📖 В связи с этим делюсь подходом к некоторым важным моментам при обновлении диза и переезде на жидкое стекло.
В реальной жизни все равно все сложнее, но некоторые из описанных кейсов в любом случае полезны.
😃 iOS Dev
Осень приближается, а вместе с ней и новые требования к приложениям.
📖 В связи с этим делюсь подходом к некоторым важным моментам при обновлении диза и переезде на жидкое стекло.
В реальной жизни все равно все сложнее, но некоторые из описанных кейсов в любом случае полезны.
Please open Telegram to view this post
VIEW IN TELEGRAM
3✍16 7⚡3🙏1👻1