{"id":460074,"date":"2025-05-18T15:00:19","date_gmt":"2025-05-18T15:00:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=460074"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=460074","title":{"rendered":"<span>\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e #586 (12 \u2014 18 \u043c\u0430\u044f)<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041d\u043e\u0432\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u0430 \u2014 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043b\u0438\u043d\u0442\u0438\u043d\u0433 \u0438 Material 3 Expressive, \u0442\u0451\u043c\u043d\u044b\u0435 \u0443\u0433\u043e\u043b\u043a\u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u0438 Compose Multiplatform \u0434\u043b\u044f iOS, \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435 OTP \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438, UI-\u0434\u0438\u0437\u0430\u0439\u043d \u0441 ChatGPT \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u0435!<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ro\/h5\/om\/roh5om0iytos_nxi7qhf6ltmz6m.jpeg\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ro\/h5\/om\/roh5om0iytos_nxi7qhf6ltmz6m.jpeg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ro\/h5\/om\/roh5om0iytos_nxi7qhf6ltmz6m.jpeg 781w\" loading=\"lazy\" decode=\"async\"\/><a name=\"habracut\"><\/a><\/p>\n<p> <b>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043c\u043e\u0439 Telegram-\u043a\u0430\u043d\u0430\u043b <a href=\"https:\/\/t.me\/apptractor\" rel=\"nofollow noopener noreferrer\">Mobile Insights<\/a>, \u0433\u0434\u0435 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.<\/b><\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/f19\/30a\/c49\/f1930ac4945596eb9707bc7a01bc5bdc.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/post_images\/f19\/30a\/c49\/f1930ac4945596eb9707bc7a01bc5bdc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/f19\/30a\/c49\/f1930ac4945596eb9707bc7a01bc5bdc.png 781w\" loading=\"lazy\" decode=\"async\"\/> <b>iOS<\/b><\/p>\n<p> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/articles\/arhitekturnyy-linting-dlya-swift-chast-4.html\" rel=\"nofollow noopener noreferrer\">\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043b\u0438\u043d\u0442\u0438\u043d\u0433 \u0434\u043b\u044f Swift: \u0447\u0430\u0441\u0442\u044c 4<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/articles\/ispolzuem-core-motion-v-swiftui-prilozhenii.html\" rel=\"nofollow noopener noreferrer\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Core Motion \u0432 SwiftUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/articles\/909558\/\">XCUITest \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445: \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 iOS \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c \u0441 Allure<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/lamoda\/articles\/902038\/\">GPT, DeepSeek \u0438 Qwen: \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0435 unit-\u0442\u0435\u0441\u0442\u044b \u0432 \u044d\u0445\u043e-\u043a\u0430\u043c\u0435\u0440\u0435<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/novye-funktsii-dostupnosti-apple-dlya-iphone-ipad-mac-i-apple-vision-pro.html\" rel=\"nofollow noopener noreferrer\">\u041d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 Apple \u0434\u043b\u044f iPhone, iPad, Mac \u0438 Apple Vision Pro<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/uchim-metal-i-image-processing-lish-by-ne-verstat-na-ios.html\" rel=\"nofollow noopener noreferrer\">\u0423\u0447\u0438\u043c Metal \u0438 image processing \u043b\u0438\u0448\u044c \u0431\u044b \u043d\u0435 \u0432\u0435\u0440\u0441\u0442\u0430\u0442\u044c \u043d\u0430 iOS<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/race-condition-problema-gonki-potokov-chto-eto-i-kak-izbezhat.html\" rel=\"nofollow noopener noreferrer\">Race Condition: \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0433\u043e\u043d\u043a\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2014 \u0447\u0442\u043e \u044d\u0442\u043e \u0438 \u043a\u0430\u043a \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c?<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/pod-kapotom-ios-kreshey.html\" rel=\"nofollow noopener noreferrer\">\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c iOS-\u043a\u0440\u0435\u0448\u0435\u0439<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/textfield-s-avtodopolneniem.html\" rel=\"nofollow noopener noreferrer\">TextField \u0441 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/swiftui-navigatsiya-prosto-nativno-i-deklarativno.html\" rel=\"nofollow noopener noreferrer\">SwiftUI-\u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f: \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/udivitelnyy-mir-vnutri-ipa.html\" rel=\"nofollow noopener noreferrer\">\u0423\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 .ipa<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/core-motion-framework-v-finansovyh-prilozheniyah.html\" rel=\"nofollow noopener noreferrer\">Core Motion framework \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/tanaschita.com\/ios-local-notification-triggers\/\" rel=\"nofollow noopener noreferrer\">Scheduling notifications with time, calendar, and location triggers in iOS<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/danielsaidi.com\/blog\/2025\/05\/02\/adding-dependencies-to-binary-swift-packages\" rel=\"nofollow noopener noreferrer\">Adding dependencies to binary Swift packages<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.mobiledevdiary.com\/posts\/concurency-safe-testing-in-swift-6-1\/\" rel=\"nofollow noopener noreferrer\">Concurrency-Safe Testing in Swift 6.1 with @TaskLocal and Test Scoping<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/chris-mash.medium.com\/knowing-when-the-battle-is-lost-with-xcuitests-d8ada4d118a5\" rel=\"nofollow noopener noreferrer\">Knowing when the battle is lost with XCUITests<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.artemnovichkov.com\/blog\/demystifying-picture-in-picture-on-ios\" rel=\"nofollow noopener noreferrer\">Demystifying Picture in Picture on iOS<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/chris.eidhof.nl\/post\/swiftui-view-model\/\" rel=\"nofollow noopener noreferrer\">SwiftUI View Model Ownership<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.iro.umontreal.ca\/~lapalme\/RegexInSwift\/index.html\" rel=\"nofollow noopener noreferrer\">Regular Expressions in Swift<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/nilcoalescing.com\/blog\/FormattingDataInsideSwiftUITextViews\/\" rel=\"nofollow noopener noreferrer\">Formatting data inside SwiftUI Text views<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/tuist.dev\/blog\/2025\/05\/13\/vibe-xcoding\" rel=\"nofollow noopener noreferrer\">Vibe Xcoding your apps<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/swiftwithmajid.com\/2025\/05\/13\/optimized-mathematical-computations-in-swift\/\" rel=\"nofollow noopener noreferrer\">Optimized mathematical computations in Swift<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.createwithswift.com\/customizing-an-app-intent\/\" rel=\"nofollow noopener noreferrer\">Customizing an App Intent<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/useyourloaf.com\/blog\/swiftui-picker-with-optional-selection\/\" rel=\"nofollow noopener noreferrer\">SwiftUI Picker With Optional Selection<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/ohmyswift.com\/blog\/2025\/05\/08\/debug-crashes-in-ios-using-metrickit\/\" rel=\"nofollow noopener noreferrer\">Debug crashes in iOS using MetricKit<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.createwithswift.com\/synthesizing-text-into-speech\/\" rel=\"nofollow noopener noreferrer\">Synthesizing text into speech<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/fatbobman.com\/en\/posts\/demystifying-swiftuis-ignoredbylayout\/\" rel=\"nofollow noopener noreferrer\">Demystifying SwiftUI\u2019s .ignoredByLayout()<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.massicotte.org\/default-isolation-swift-6_2\" rel=\"nofollow noopener noreferrer\">Default isolation with Swift 6.2<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/levelup.gitconnected.com\/the-power-of-keypath-in-swiftui-aff57dc5afdd\" rel=\"nofollow noopener noreferrer\">The Power of KeyPath in SwiftUI<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/nju-3dv.github.io\/projects\/matrix3d\/\" rel=\"nofollow noopener noreferrer\">Matrix3D: Large Photogrammetry Model<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.devfright.com\/using-scrollviewreader-for-programmatic-scrolling-in-swiftui-a-tutorial\/\" rel=\"nofollow noopener noreferrer\">Using ScrollViewReader for Programmatic Scrolling in SwiftUI: A Tutorial<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.createwithswift.com\/change-a-map-viewpoint-with-mapkit\/\" rel=\"nofollow noopener noreferrer\">Change a map viewpoint with MapKit<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/swiftandmemes.com\/ultimate-guide-to-dependency-injection-for-modular-ios-apps\/\" rel=\"nofollow noopener noreferrer\">Ultimate Guide to Dependency Injection for Modular iOS app<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/medium.com\/@szwicker\/create-a-simple-theming-architecture-with-swiftui-510df4c20c8e\" rel=\"nofollow noopener noreferrer\">Create a Simple Theming Architecture with SwiftUI<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=Y6SUfz9f7fU\" rel=\"nofollow noopener noreferrer\">Resizable ScrollView Header | Scroll To Hide Header \u2014 SwiftUI<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=rI8b_qiLq-0\" rel=\"nofollow noopener noreferrer\">SwiftUI Theme Switcher in 3 Minutes \u2013 Light &amp; Dark Mode Made Easy<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=P_0K3SDN8F4\" rel=\"nofollow noopener noreferrer\">Building emoji reactions in 5 minutes with SwiftUI<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=a-jQ_5yEfUc\" rel=\"nofollow noopener noreferrer\">Customized Paywall using Native SwiftUI StoreKit APIs<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=B2Wswm8v6UQ\" rel=\"nofollow noopener noreferrer\">Apple Engineer Shows How To Build a SwiftUI Sleep Tracker<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=BEHoCIs5iS4\" rel=\"nofollow noopener noreferrer\">3 Ways to Initialize @State in SwiftUI<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=NdJ_y1c_j_I\" rel=\"nofollow noopener noreferrer\">Apple\u2019s Widget Backdoor<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/apptractor.ru\/info\/github\/swiftopenai.html\" rel=\"nofollow noopener noreferrer\">SwiftOpenAI \u2014 \u043f\u0430\u043a\u0435\u0442 Swift \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c API OpenAI<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/apptractor.ru\/info\/github\/progressui.html\" rel=\"nofollow noopener noreferrer\">ProgressUI \u2014 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0438 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0434\u043b\u044f SwiftUI<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/apptractor.ru\/info\/github\/prefire.html\" rel=\"nofollow noopener noreferrer\">Prefire \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Xcode Preview<\/a><\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/e1a\/3cf\/2a8\/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/post_images\/e1a\/3cf\/2a8\/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/e1a\/3cf\/2a8\/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png 781w\" loading=\"lazy\" decode=\"async\"\/> <b>Android<\/b><\/p>\n<p> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/articles\/rukovodstvo-po-potrebleniyu-pamyati-android-studio.html\" rel=\"nofollow noopener noreferrer\">\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u0438 Android Studio<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/wildberries\/articles\/905238\/\">\u0422\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u044d\u043a\u0440\u0430\u043d\u0430\u043c\u0438 \u0432 Compose \u0441 Jetpack Navigation<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/material-3-expressive-2.html\" rel=\"nofollow noopener noreferrer\">Google \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0437\u0430\u0439\u043d Material 3 Expressive<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/habr_rutube\/articles\/902306\/\">\u041c\u0430\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0444\u043e\u043a\u0443\u0441\u043e\u0432 \u043d\u0430 Compose (\u0447\u0430\u0441\u0442\u044c 2): \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0444\u043e\u043a\u0443\u0441\u0430<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/articles\/909638\/\">\u041f\u0440\u044f\u0447\u0435\u043c \u043a\u043e\u0434 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443: \u0442\u0451\u043c\u043d\u044b\u0435 \u0443\u0433\u043e\u043b\u043a\u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 R8 \u0438 ProGuard<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/articles\/908772\/\">ML KIT \u2014 \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/jetpack-compose-1-8-uzhe-zdes-i-on-menyaet-pravila-igry.html\" rel=\"nofollow noopener noreferrer\">Jetpack Compose 1.8 \u0443\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u2014 \u0438 \u043e\u043d \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/podgotovte-svoi-android-prilozheniya-dlya-stranitsy-pamyati-v-16-kb.html\" rel=\"nofollow noopener noreferrer\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435 \u0441\u0432\u043e\u0438 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 16 \u041a\u0411<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/testirovanie-compose-po-novomu-prostota-nadezhnost-gibkost.html\" rel=\"nofollow noopener noreferrer\">\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Compose \u043f\u043e-\u043d\u043e\u0432\u043e\u043c\u0443: \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430, \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c, \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/puteshestvie-k-tsentru-kompozitsii.html\" rel=\"nofollow noopener noreferrer\">\u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u043a \u0446\u0435\u043d\u0442\u0440\u0443 \u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/scout.html\" rel=\"nofollow noopener noreferrer\">Scout: \u043d\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0438 \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/kompilyatornye-plaginy-modifikatsiya-i-analiz-sompose.html\" rel=\"nofollow noopener noreferrer\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b: \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0421ompose<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/kak-ya-code-coverage-vnedryal-da-gradle-plugin-dlya-baseline-pisal.html\" rel=\"nofollow noopener noreferrer\">\u041a\u0430\u043a \u044f code coverage \u0432\u043d\u0435\u0434\u0440\u044f\u043b \u0434\u0430 Gradle plugin \u0434\u043b\u044f baseline \u043f\u0438\u0441\u0430\u043b<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/proandroiddev.com\/how-to-load-data-kotlin-898f9add9c6f\" rel=\"nofollow noopener noreferrer\">Stale Data &amp; Leaks were killing my Kotlin apps for 5 years. Here\u2019s the fix.<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/eevis.codes\/blog\/2025-05-10\/does-junie-create-accessible-android-apps\/\" rel=\"nofollow noopener noreferrer\">Does Junie Create Accessible Android Apps?<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/medium.com\/@keyboardr\/simpler-gradle-plugin-loading-761601bd651f\" rel=\"nofollow noopener noreferrer\">Simpler Gradle plugin loading<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/crushingcode.nisrulz.com\/blog\/blazing-fast-app-uninstall-for-lazy-android-devs\/\" rel=\"nofollow noopener noreferrer\">Blazing fast app uninstalls for lazy Android Devs<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/proandroiddev.com\/kotlins-builder-functions-a-better-way-to-create-lists-maps-strings-sets-77ddbe706303\" rel=\"nofollow noopener noreferrer\">Kotlin\u2019s Builder Functions: A Better Way to Create Lists, Maps, Strings &amp; Sets<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/android-developers.googleblog.com\/2025\/05\/building-delightful-android-camera-media-experiences.html\" rel=\"nofollow noopener noreferrer\">Building delightful Android camera and media experiences<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/levelup.gitconnected.com\/fast-feedback-winning-back-60-of-our-ci-time-3c56b7dfc1e2\" rel=\"nofollow noopener noreferrer\">Fast Feedback: Winning Back 60% of Our CI Time<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/carrion.dev\/en\/posts\/coroutine-testing-patterns\/\" rel=\"nofollow noopener noreferrer\">Effective Strategies for Testing Asynchronous Kotlin Code<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/tanishranjan.medium.com\/compose-ui-performance-secrets-part-1-5-core-optimizations-every-developer-should-know-e3d17f4d3f3b\" rel=\"nofollow noopener noreferrer\">Compose UI Performance Secrets (Part 1): 5 Core Optimizations Every Developer Should Know<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/tanishranjan.medium.com\/compose-ui-performance-secrets-part-2-5-advanced-techniques-for-ultra-smooth-apps-3dd7d65311c4\" rel=\"nofollow noopener noreferrer\">Compose UI Performance Secrets (Part 2): 5 Advanced Techniques for Ultra-Smooth Apps<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/victorbrandalise.com\/using-movablecontentof\/\" rel=\"nofollow noopener noreferrer\">Using movableContentOf for shared transitions in Jetpack Compose<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/medium.com\/google-developer-experts\/how-to-use-firebase-remote-config-in-server-dynamic-control-and-ai-parameter-management-0af49a4cf824\" rel=\"nofollow noopener noreferrer\">How to Use Firebase Remote Config in Server: Dynamic Control and AI Parameter Management<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/proandroiddev.com\/securing-android-behind-a-few-seconds-of-payment-transaction-630b65905b9a\" rel=\"nofollow noopener noreferrer\">Securing Android: Behind a few seconds of payment transaction \u2026<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/itnext.io\/why-is-modern-android-development-so-hard-d6ffa9efb0f0\" rel=\"nofollow noopener noreferrer\">Why is Modern Android Development So Hard?<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/artemasoyan.medium.com\/how-to-run-local-llm-ai-in-android-studio-6bb142ee64ec\" rel=\"nofollow noopener noreferrer\">How to Run Local LLM (AI) in Android Studio<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/proandroiddev.com\/avoid-using-array-in-the-data-class-constructor-in-kotlin-ebc308e46a95\" rel=\"nofollow noopener noreferrer\">Avoid using Array in the data class constructor in Kotlin<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/medium.com\/design-bootcamp\/modern-android-app-architecture-with-clean-code-principles-2025-edition-95f4c2afeadb\" rel=\"nofollow noopener noreferrer\">Modern Android App Architecture with Clean Code Principles (2025 Edition)<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/m3.material.io\/blog\/building-with-m3-expressive\" rel=\"nofollow noopener noreferrer\">Start building with Material 3 Expressive<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/itnext.io\/imperative-vs-declarative-in-android-the-real-difference-bd9bdce1c358\" rel=\"nofollow noopener noreferrer\">Imperative vs Declarative in Android \u2014 The Real Difference<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/proandroiddev.com\/tooltips-in-compose-material-3-14b49cbaf4dd\" rel=\"nofollow noopener noreferrer\">Tooltips in Compose Material 3<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/itnext.io\/builder-factory-patterns-in-kotlin-a-walk-through-object-creation-e592fe72d6c5\" rel=\"nofollow noopener noreferrer\">Builder &amp; Factory patterns in Kotlin \u2014 A Walk-Through Object<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/m3.material.io\/components\/navigation-drawer\/overview\" rel=\"nofollow noopener noreferrer\">The navigation drawer is being deprecated in the Material 3 expressive update<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/youtu.be\/l3yDd3CmA_Y\" rel=\"nofollow noopener noreferrer\">The Android Show: I\/O Edition<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=YOvD5nQe7Bk\" rel=\"nofollow noopener noreferrer\">Now in Android: 116 \u2013 Google I\/O, Gemini, and Jetpack Compose 1.8<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=uZsFi7OehVU\" rel=\"nofollow noopener noreferrer\">What\u2019s new in Android Studio Meerkat Feature Drop<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=qeFWCYc7u3E\" rel=\"nofollow noopener noreferrer\">Android Testing Strategies<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=9SlKPtUtv6o\" rel=\"nofollow noopener noreferrer\">Tools and patterns for scalable Android app testing<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=JyBq76N4Zc4\" rel=\"nofollow noopener noreferrer\">5 Anti-Patterns With Coroutines &amp; Flows You MUST Avoid!<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=SRaVtWFOUw4\" rel=\"nofollow noopener noreferrer\">How Kotlin is Powering TV Broadcasts Worldwide<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=blKkRoZPxLc\" rel=\"nofollow noopener noreferrer\">Android &amp; Kotlin Development Masterclass \u2013 Full Course<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=r39D_qHifOk\" rel=\"nofollow noopener noreferrer\">Build your App from Scratch without Material 3 Color System<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/apptractor.ru\/info\/github\/compose-unstyled-2.html\" rel=\"nofollow noopener noreferrer\">Compose Unstyled \u2014 \u043d\u0430\u0431\u043e\u0440 \u0434\u0438\u0437\u0430\u0439\u043d-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Compose<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/apptractor.ru\/info\/github\/haze.html\" rel=\"nofollow noopener noreferrer\">Haze \u2014 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0433\u043b\u0430\u0441\u0441\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430 \u0434\u043b\u044f Compose<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/files\/967\/16b\/cb9\/96716bcb926741e79bb1c284a88083ca.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/apptractor.ru\/info\/github\/night-clock.html\" rel=\"nofollow noopener noreferrer\">Night Clock \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0447\u0430\u0441\u044b \u0434\u043b\u044f Android<\/a><\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ma\/lx\/8h\/malx8hbgozt6lee8rmxmg96_s6a.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ma\/lx\/8h\/malx8hbgozt6lee8rmxmg96_s6a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ma\/lx\/8h\/malx8hbgozt6lee8rmxmg96_s6a.png 781w\" loading=\"lazy\" decode=\"async\"\/> <b>\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/b><\/p>\n<p> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/compose-multiplatform-dlya-ios-stabilen-i-zhdet-vashih-prilozheniy.html\" rel=\"nofollow noopener noreferrer\">Compose Multiplatform \u0434\u043b\u044f iOS \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d \u0438 \u0436\u0434\u0435\u0442 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/articles\/908690\/\">\u041a\u043e\u0433\u0434\u0430 JavaScript \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e: \u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f React Native<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/kotlin-compose-multiplatform-2.html\" rel=\"nofollow noopener noreferrer\">Kotlin Multiplatform vs Compose Multiplatform: \u043e\u0442\u043b\u0438\u0447\u0438\u044f, \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 iOS<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/gotov-li-compose-ios-k-prodakshenu.html\" rel=\"nofollow noopener noreferrer\">\u0413\u043e\u0442\u043e\u0432 \u043b\u0438 Compose iOS \u043a \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0443?<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/carrion.dev\/en\/posts\/datastore-in-kmp\/\" rel=\"nofollow noopener noreferrer\">Implementing DataStore in Kotlin Multiplatform Projects<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.reddit.com\/r\/FlutterDev\/comments\/1kg1ff6\/i_use_this_clean_architecture_setup_for_all_my\/\" rel=\"nofollow noopener noreferrer\">I use this clean architecture setup for all my Flutter projects \u2014 finally made it public<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/apparencekit.dev\/flutter-tips\/\" rel=\"nofollow noopener noreferrer\">Flutter Tips<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/medium.com\/@vikranthsalian\/flutter-isolates-multithreading-made-easy-in-dart-fb38f2d9f497\" rel=\"nofollow noopener noreferrer\">Flutter Isolates: Multithreading Made Easy in Dart<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/medium.com\/@ssshubham660\/5-react-native-truths-i-wish-i-knew-before-building-10-apps-9c1bc5de4198\" rel=\"nofollow noopener noreferrer\">5 React Native Truths I Wish I Knew Before Building 10+ Apps<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/medium.com\/reversebits\/the-ultimate-guide-to-flutters-most-useful-packages-e39a5334451f\" rel=\"nofollow noopener noreferrer\">The Ultimate Guide to Flutter\u2019s Most Useful Packages<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=DP7O_a8wIwQ\" rel=\"nofollow noopener noreferrer\">\u200b\u200bKotlin Multiplatform: Have your code and eat it too<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/youtu.be\/-JKifT44NAM\" rel=\"nofollow noopener noreferrer\">MCP Explained for Flutter Developers: Everything You Should Know<\/a><\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/708\/1c6\/34e\/7081c634ec176ab6b953d9d19e82a09a.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/post_images\/708\/1c6\/34e\/7081c634ec176ab6b953d9d19e82a09a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/708\/1c6\/34e\/7081c634ec176ab6b953d9d19e82a09a.png 781w\" loading=\"lazy\" decode=\"async\"\/> <b>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/b><\/p>\n<p> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/articles\/kak-slomannye-otp-i-otkrytye-konechnye-tochki-mogli-prevratit-prilozhenie-dlya-znakomstv-v-koshmar.html\" rel=\"nofollow noopener noreferrer\">\u041a\u0430\u043a \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435 OTP \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432 \u0432 \u043a\u043e\u0448\u043c\u0430\u0440<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/articles\/ui-dizayn-s-chatgpt-4o.html\" rel=\"nofollow noopener noreferrer\">UI-\u0434\u0438\u0437\u0430\u0439\u043d \u0441 ChatGPT 4o<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/articles\/907578\/\">Left Shift Testing: \u043a\u0430\u043a \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u0441\u0442\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u043b\u0438<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/yougile\/articles\/909362\/\">\u041a\u0430\u043a \u043c\u044b \u0432 YouGile \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0435 \u043a\u0440\u0443\u0447\u0435, \u0447\u0435\u043c Telegram. \u0418\u0445 \u043f\u043e\u043b\u044e\u0431\u044f\u0442 \u0434\u0430\u0436\u0435 \u0445\u0435\u0439\u0442\u0435\u0440\u044b<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/sberbank\/articles\/906882\/\">\u0418\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/friflex\/articles\/909090\/\">\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 HarmonyOS \u2014 \u043c\u043e\u0439 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u0441 \u043d\u0443\u043b\u044f<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/otpbank\/articles\/909442\/\">\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0438\u0437\u0430\u0439\u043d\u0430. \u042d\u043a\u0440\u0430\u043d \u043a\u0430\u0440\u0442\u044b \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u041e\u0422\u041f \u0411\u0430\u043d\u043a\u0430<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/stm_labs\/articles\/908540\/\">\u041f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0443\u0448\u0438. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0432\u043e\u044e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 Push<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/razrabotchik-harmonyos-next-pro-arkts-i-harmonyos.html\" rel=\"nofollow noopener noreferrer\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a HarmonyOS Next \u043f\u0440\u043e ArkTS \u0438 HarmonyOS<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/yazyk-programmirovaniya-groovy.html\" rel=\"nofollow noopener noreferrer\">\u042f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Groovy: JVM \u044f\u0437\u044b\u043a\u0438, Java, Kotlin, Gradle, DSL<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/media\/kak-rabotayut-neyrointerfeysy.html\" rel=\"nofollow noopener noreferrer\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u0439\u0440\u043e\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b: \u043a\u0438\u0431\u043e\u0440\u0433\u0438, Neuralink, brain-computer interface<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/figma-vypuskaet-novye-instrumenty-s-iskusstvennym-intellektom-dlya-sozdaniya-saytov-prototipov-prilozheniy-i-marketingovyh-resursov.html\" rel=\"nofollow noopener noreferrer\">Figma \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0430\u0439\u0442\u043e\u0432, \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/blog.jetbrains.com\/education\/2025\/05\/12\/five-lessons-for-novice-programmers-ai-world\/\" rel=\"nofollow noopener noreferrer\">Learning to Think in an AI World: 5 Lessons for Novice Programmers<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/lauratacho.com\/blog\/dumb-leadership-mistakes-ive-made\" rel=\"nofollow noopener noreferrer\">Dumb Leadership Mistakes I\u2019ve Made<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/buttondown.com\/hillelwayne\/archive\/write-the-most-clever-code-you-possibly-can\/\" rel=\"nofollow noopener noreferrer\">Write the most clever code you possibly can<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/krossovochkin.com\/posts\/2025_05_05_when_solid_breaks_choose_clarity\/\" rel=\"nofollow noopener noreferrer\">When SOLID breaks: Choose CLARITY<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/emilkowal.ski\/ui\/good-vs-great-animations\" rel=\"nofollow noopener noreferrer\">Good vs Great Animations<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/blog.prototypr.io\/duolingo-just-ended-the-term-ux-design-acc0dfeaec8d\" rel=\"nofollow noopener noreferrer\">Duolingo Just Ended The Term \u201cUX Design\u201d<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=m6ab37t2ypQ\" rel=\"nofollow noopener noreferrer\">Design Messenger \u2014 Mobile System Design Mock Interview<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/gt\/u1\/ia\/gtu1iaz0-ajkbqpeq8n6dmql4zq.png 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/www.youtube.com\/watch?v=G4A5T3y5bJM\" rel=\"nofollow noopener noreferrer\">C++ Course: Build an Audio Plugin<\/a><\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/509\/dc9\/bde\/509dc9bde69347ecbe0c21ff2973d7e7.jpg\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/post_images\/509\/dc9\/bde\/509dc9bde69347ecbe0c21ff2973d7e7.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/509\/dc9\/bde\/509dc9bde69347ecbe0c21ff2973d7e7.jpg 781w\" loading=\"lazy\" decode=\"async\"\/> <b>\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433 \u0438 \u043c\u043e\u043d\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u044f<\/b><\/p>\n<p> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/marketing-monetization\/app-promotion-campaign-analytics\/sravnenie-konversiy-iap-i-veb-platezhey-v-ios-prilozhenii.html\" rel=\"nofollow noopener noreferrer\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u0439 IAP \u0438 \u0432\u0435\u0431 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u0432 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/measure\/app-store-analytics\/prilozheniya-dlya-znakomstv-sdelali-luchshiy-mesyats-po-dohodam-za-vsyu-istoriyu.html\" rel=\"nofollow noopener noreferrer\">\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043b\u0443\u0447\u0448\u0438\u0439 \u043c\u0435\u0441\u044f\u0446 \u043f\u043e \u0434\u043e\u0445\u043e\u0434\u0430\u043c \u0437\u0430 \u0432\u0441\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/v-novom-prilozhenii-airbnb-vse-chto-nuzhno-dlya-otdyha-v-odnom-meste.html\" rel=\"nofollow noopener noreferrer\">\u0412 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 Airbnb \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u0434\u044b\u0445\u0430, \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/duolingo-zamenyaet-serdechki-energiey.html\" rel=\"nofollow noopener noreferrer\">Duolingo \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0438 \u044d\u043d\u0435\u0440\u0433\u0438\u0435\u0439<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/marketing-monetization\/emulyator-delta-sdelal-patreon-glavnoy-sistemoy-monetizatsii-v-app-store.html\" rel=\"nofollow noopener noreferrer\">\u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 Delta \u0441\u0434\u0435\u043b\u0430\u043b Patreon \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043c\u043e\u043d\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 App Store<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/measure\/app-store-analytics\/samye-skachivaemye-i-zarabatyvayuschie-prilozheniya-v-rossii-v-aprele-2025.html\" rel=\"nofollow noopener noreferrer\">\u0421\u0430\u043c\u044b\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0438 \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0432 \u0430\u043f\u0440\u0435\u043b\u0435 2025<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/measure\/app-store-analytics\/samye-skachivaemye-i-zarabatyvayuschie-prilozheniya-v-mire-v-aprele-2025.html\" rel=\"nofollow noopener noreferrer\">\u0421\u0430\u043c\u044b\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0438 \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043c\u0438\u0440\u0435 \u0432 \u0430\u043f\u0440\u0435\u043b\u0435 2025<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/epic-games-oderzhala-krupnuyu-pobedu-i-apple-bylo-predpisano-vypolnit-sudebnoe-reshenie-po-app-store.html\" rel=\"nofollow noopener noreferrer\">Epic Games \u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043a\u0440\u0443\u043f\u043d\u0443\u044e \u043f\u043e\u0431\u0435\u0434\u0443 \u0438 Apple \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0443\u0434\u0435\u0431\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e App Store<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/analytics\/stoit-li-razrabotchikam-ios-prilozheniy-perehodit-na-veb-platezhi.html\" rel=\"nofollow noopener noreferrer\">\u0421\u0442\u043e\u0438\u0442 \u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u0431-\u043f\u043b\u0430\u0442\u0435\u0436\u0438?<\/a><br \/> \u2022 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 780w,&#10;       https:\/\/habrastorage.org\/files\/377\/ae0\/333\/377ae0333d0f4b7b97307c9eea5ee21a.gif 781w\" loading=\"lazy\" decode=\"async\"\/> <a href=\"https:\/\/news.ycombinator.com\/item?id=43970837\" rel=\"nofollow noopener noreferrer\">Ask HN: How are you acquiring your first hundred users?<\/a><\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/853\/812\/9f5\/8538129f5e7b404a720121cb9c3814db.jpg\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/post_images\/853\/812\/9f5\/8538129f5e7b404a720121cb9c3814db.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/853\/812\/9f5\/8538129f5e7b404a720121cb9c3814db.jpg 781w\" loading=\"lazy\" decode=\"async\"\/> <b>AI, \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, IoT<\/b><\/p>\n<p> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/bastion\/articles\/907362\/\">\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0431\u044d\u043a\u0434\u043e\u0440 \u0432 ESP32<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/ruvds\/articles\/903002\/\">\u0427\u0442\u043e \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 IoT-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u2014 \u0438 \u043a\u0430\u043a Edge \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/avito\/articles\/908650\/\">\u041a\u0430\u043a \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430: \u043e\u043f\u044b\u0442 \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f\u043c\u0438 \u0421\u0422\u0421<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/910056\/\">\u0413\u0430\u043b\u043b\u044e\u0446\u0438\u043d\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0418\u0418, \u0438 \u043a\u0430\u043a \u0441 \u043d\u0438\u043c\u0438 \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/windsurf-vypustil-svoi-ii-modeli-dlya-programmnoy-inzhenerii.html\" rel=\"nofollow noopener noreferrer\">Windsurf \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u0432\u043e\u0438 \u0418\u0418-\u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438\u0438<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/stable-audio-open-small.html\" rel=\"nofollow noopener noreferrer\">Stability AI \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0432\u0443\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/openai-os.html\" rel=\"nofollow noopener noreferrer\">OpenAI \u0445\u043e\u0447\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u041e\u0421 \u0432\u0441\u0435\u0439 \u0436\u0438\u0437\u043d\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0418\u0418<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/fastvlm.html\" rel=\"nofollow noopener noreferrer\">Apple \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043d\u043e\u0432\u044b\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043d\u043a\u043e\u0434\u0435\u0440 FastVLM<\/a><br \/> \u2022\u00a0<a href=\"https:\/\/apptractor.ru\/info\/news\/legogpt-ii-model-dlya-sborki-modeley-lego.html\" rel=\"nofollow noopener noreferrer\">LegoGPT \u2014 \u0418\u0418-\u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 Lego<\/a><\/p>\n<p> \u2190 <a href=\"https:\/\/habr.com\/ru\/articles\/902526\/\">\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442<\/a>. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438\u043b\u0438 \u0432\u044b \u043d\u0430\u0448\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u2014 \u043f\u0440\u0438\u0448\u043b\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432 <a href=\"mailto:lbogolubov@gmail.com\">\u043f\u043e\u0447\u0442\u0443<\/a>.<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/910376\/\"> https:\/\/habr.com\/ru\/articles\/910376\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041d\u043e\u0432\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u0430 \u2014 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043b\u0438\u043d\u0442\u0438\u043d\u0433 \u0438 Material 3 Expressive, \u0442\u0451\u043c\u043d\u044b\u0435 \u0443\u0433\u043e\u043b\u043a\u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u0438 Compose Multiplatform \u0434\u043b\u044f iOS, \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435 OTP \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438, UI-\u0434\u0438\u0437\u0430\u0439\u043d \u0441 ChatGPT \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u0435!<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ro\/h5\/om\/roh5om0iytos_nxi7qhf6ltmz6m.jpeg\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ro\/h5\/om\/roh5om0iytos_nxi7qhf6ltmz6m.jpeg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ro\/h5\/om\/roh5om0iytos_nxi7qhf6ltmz6m.jpeg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-460074","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/460074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=460074"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/460074\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=460074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=460074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=460074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}