<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Мобильная разработка</title>
    <description>Новости мобильной разработки, статьи о тонкостях Android и iOS, а ещё обучающие материалы для начинающих программистов</description>
    <link>https://tproger.ru/tag/mobiledev</link>
    <atom:link href="https://tproger.ru/tag/mobiledev/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sun, 04 Oct 2026 12:28:50 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Мобильная разработка</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Как тестировать пуши и диплинки в финансовом приложении</title>
      <link>https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii</link>
      <comments>https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii</guid>
      <description><![CDATA[<p>Разбираем четыре сценария перехода по пушу, повторный вход и недоступный экран. Как проверить диплинки из разных каналов и организовать проверки?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii">Как тестировать пуши и диплинки в финансовом приложении</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Sep 2026 07:23:15 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пользователь получает уведомление об изменении цены акции, открывает его, вводит пароль и оказывается на главной странице. Теперь ему приходится искать акцию, о которой только что сообщило приложение. На примерах нашей команды Centicore Group разберём подробности.</p><h2>Куда должен вести пуш</h2><p>Диплинк ведёт на определённый экран приложения — целевую посадочную страницу. Когда такая ссылка приходит в пуше, текст уведомления подсказывает пользователю, что откроется после нажатия.</p><p>Допустим, приложение отправляет уведомление о статусе перевода, из которого должен открываться экран подтверждения этой операции. При нажатии на пуш пользователь рассчитывает сразу увидеть нужный перевод. Если переход заканчивается на главной, человеку приходится самостоятельно восстанавливать путь к операции.</p><p>Поэтому, перед тестированием сопоставьте текст уведомления с целевым экраном и зафиксируйте ожидаемый результат. Во время проверки нужно тестировать, что открылась именно та операция, о которой говорится в сообщении.</p><h2>Как проверить переход при разном состоянии приложения</h2><p>Один и тот же пуш нужно открыть в разных условиях. Например, на момент нажатия приложение полностью закрыто, телефон заблокирован и пользователю ещё предстоит пройти вход. Чтобы разобраться, на каком этапе теряется переход, сначала рассмотрим запуск и возвращение в приложение.</p><ul><li>Приложение закрыто. При холодном старте оно запускается и загружается, после чего должно продолжить переход к экрану из уведомления. Во время проверки проследите, куда пользователь попадает по завершении запуска.</li><li>Приложение работает в фоне. Здесь проверяют возвращение из свёрнутого приложения и открытие целевого экрана. При действующей сессии пользователь должен продолжить работу в приложении; дополнительную перезагрузку при открытии пуша стоит разобрать с командой.</li><li>Телефон заблокирован. Откройте уведомление с экрана блокировки и разблокируйте устройство с помощью Face ID или PIN-кода. После этого маршрут к нужному экрану должен сохраниться.</li><li>Пользователь уже работает в приложении. Полученное уведомление открывают во время активной работы. Проверьте, как переход вписывается в текущую навигацию и вызывает ли он перезагрузку приложения.</li></ul><p>Разблокировка телефона и вход в приложение могут оказаться отдельными этапами одного перехода. Если приложение запрашивает пароль, проверку продолжают до экрана, на который вело уведомление. При потере маршрута зафиксируйте, после какого действия открылся неожиданный экран.</p><h2>Что происходит после повторного входа</h2><p>В инвестиционном приложении сессия может завершаться после некоторого времени бездействия. Тогда пользователь открывает пуш и сначала попадает на экран входа. У команды должны быть согласованные требования к тому, как приложение поведёт себя после ввода пароля.</p><p>Вернёмся к примеру с акцией. Человек получает уведомление о резком росте её цены, открывает его спустя час и проходит повторный вход. Если в этот момент приложение возвращает его на главную, поиск нужной акции приходится начинать заново.</p><p>Чтобы продолжить переход после входа, приложение сохраняет его цель. Приложение и сервер передают сведения о том, какой экран хотел открыть пользователь, и после проверки пароля маршрут продолжается. Такой сценарий проверяют с завершившейся сессией: открывают уведомление, проходят вход и смотрят, какой экран появился.</p><p>Повторный запрос PIN-кода или возврат на главную нужно разбирать с учётом требований безопасности конкретного продукта. Если такое поведение предусмотрено, команда должна понимать, как оно влияет на переход по уведомлению. QA фиксирует результат проверки и обсуждает его с менеджером продукта.</p><p>Проверять нужно и параметры маршрута, передаваемые между приложением и сервером. С помощью отладочного прокси можно попробовать перехватить и изменить эти параметры, затем проверить, как приложение обработало переход. Отдельно нужно определить в требованиях, какие данные маршрута должны очищаться при выходе из аккаунта или удалении приложения, и проверить выполнение этих требований.</p><h2>Что показать, если нужный экран недоступен</h2><p>К моменту открытия уведомления целевой раздел может оказаться недоступен. Например, актив уже исключён из торгов или чат поддержки временно перестал работать. Для каждого случая приложению нужен понятный способ завершить переход.</p><p>На экране актива можно сообщить, что он больше не торгуется. В случае с поддержкой сообщение должно объяснить временную недоступность раздела и предложить вернуться позднее. Команде также нужно определить, куда перенаправить человека, чтобы он мог продолжить работу в приложении с сохранением контекста.</p><p>При тестировании воспроизведите недоступность целевого раздела и откройте ведущую к нему ссылку. Посмотрите, соответствует ли сообщение причине сбоя и куда человек может перейти с этого экрана.</p><p>Плохое интернет-соединение тоже нужно включить в условия проверки: оно может помешать загрузить содержимое после нажатия. Здесь нужно проследить, что происходит с переходом при проблемах с сетью и какое состояние приложения видит пользователь.</p><h2>Как проверить одну ссылку в разных каналах</h2><p>Один диплинк может использоваться в пушах, рекламных баннерах, письмах и СМС. Ссылку также размещают в QR-кодах, социальных сетях и мессенджерах. Команда должна проверить переход из каждого канала, где эта ссылка используется.</p><p>Ошибка может проявляться при открытии баннера: ссылка приводит на другой экран. Проверка этой же ссылки из пуша в таком случае проходит успешно. Чтобы найти проблему, нужно пройти оба пути и сопоставить результат с ожидаемым экраном.</p><p>При проверке сохраняйте связь между источником перехода и его результатом. Если ошибка воспроизводится из баннера, эту деталь нужно зафиксировать вместе с самой ссылкой. Тогда команда сможет повторить тот путь, на котором возникла проблема.</p><p>В проверках участвуют и люди, которые размещают и меняют ссылки. Ссылки из рекламы передают на валидацию продуктовым инженерам, обновления логики пушей согласовывают с аналитиками.</p><h2>Как организовать работу с диплинками</h2><p>Когда ссылки используют разные команды, их удобно собрать в общем реестре. Он помогает найти нужный диплинк и увидеть, для чего тот создан, кто за него отвечает и когда его проверяли. Для ведения реестра подойдёт таблица в Excel или встроенный инструмент сервиса, в котором создаются ссылки.</p><p>В запись о каждом диплинке можно включить следующие поля:</p><ul><li>название или ID диплинка;</li><li>цель перехода;</li><li>тип диплинка;</li><li>параметры;</li><li>статус;</li><li>ответственный;</li><li>дата создания;</li><li>дата последней проверки;</li></ul><p>Когда диплинк перестаёт работать, в реестре можно найти его ответственного и договориться о замене. После изменения логики перехода ссылку проверяют повторно и обновляют дату проверки.</p><p>Подготовленные требования к переходам и реестр ссылок помогут сформулировать задачу для внешней команды QA. <a href="https://centicore.ru/services/software-quality/functional-test/">Centicore Group</a> проводит функциональное тестирование приложений на соответствие требованиям и разрабатывает тестовые сценарии под задачи проекта.</p><h2>Итого</h2><p>Проверку перехода завершают на экране, ради которого пользователь открыл уведомление, с учётом всех промежуточных шагов. Для недоступного раздела заранее согласуют содержание сообщения и дальнейший переход. Эти результаты нужно зафиксировать для каждого условия проверки, включая повторный вход и открытие ссылки из разных каналов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Google Play задерживал уведомления о покупках на два и четыре часа</title>
      <link>https://tproger.ru/news/google-play-zaderzhival-uvedomleniya-o-pokupkah-na-dva-i-chetyre-cha</link>
      <comments>https://tproger.ru/news/google-play-zaderzhival-uvedomleniya-o-pokupkah-na-dva-i-chetyre-cha?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-play-zaderzhival-uvedomleniya-o-pokupkah-na-dva-i-chetyre-cha</guid>
      <description><![CDATA[<p>Две покупки, где eventTimeMillis в RTDN появился через 3 ч 55 мин и 2 ч 11 мин после оплаты; официальный инцидент Play Billing 1 сентября длился три часа.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-play-zaderzhival-uvedomleniya-o-pokupkah-na-dva-i-chetyre-cha">Google Play задерживал уведомления о покупках на два и четыре часа</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Google Play]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Sep 2026 06:00:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчик под ником Park112 2 сентября <a href="https://support.google.com/googleplay/android-developer/thread/464494337">опубликовал</a> в сообществе Google Play разбор задержек Real-time Developer Notifications (RTDN), уведомлений, которыми Play сообщает серверу приложения о покупках и подписках. В двух случаях поле eventTimeMillis появилось через 3 часа 55 минут и 2 часа 11 минут после того, как пользователь заплатил. Сам платёж при этом проходил штатно, а Developer API позже подтверждал покупку.</p><p>Для приложения с серверной выдачей контента это означает, что пользователь заплатил и несколько часов не получает подписку или покупку. Google <a href="https://status.play.google.com/incidents/n5md7YLZQsKV6rFXFXDG">зафиксировала</a> инцидент Play Billing 1 сентября с 08:54 до 11:43 UTC и объявила о решении в 13:59 UTC, но по данным отчёта задержки продолжались и после закрытия инцидента. Официального комментария Google к отчёту на момент публикации нет.</p><ul><li>Две задержанные транзакции: от покупки до RTDN 3 ч 55 мин 40 с и 2 ч 11 мин 55 с; доставка уже созданного события на сервер заняла 0,6 и 1,4 с.</li><li>Девять нормальных транзакций того же периода: 0,086–0,148 с до eventTimeMillis, доставка 0,3–2,3 с.</li><li>Pub/Sub со стороны разработчика работал: максимум одно неподтверждённое сообщение возрастом до 3 с, push-запросы завершались ack_200, максимальная задержка push 4,5 с.</li><li>Затронуты и одноразовые покупки, и подписки, в нескольких странах и валютах; Россия в отчёте не названа.</li><li>Официальный инцидент Play Billing: 1 сентября, 08:54–11:43 UTC; отчёт утверждает, что задержки были и позже.</li></ul><h2>Где именно терялось время</h2><p>Автор отчёта разложил путь уведомления на два отрезка. Первый: от завершения покупки до момента, когда Google создала событие (это и есть eventTimeMillis, время события в миллисекундах Unix). Второй: от создания события до получения его сервером через Pub/Sub. Второй отрезок оставался быстрым, 0,6 и 1,4 секунды в проблемных случаях. Всё время ушло на первый: уведомление не доходило часами, при том что метрики Pub/Sub со стороны разработчика чистые: очередь пустая, подтверждения приходят, задержка доставки в пределах секунд. На каком именно внутреннем этапе у Google застревало событие, по этим данным установить нельзя.</p><p>Есть оговорка, которую автор делает сам: он не сохраняет внешнее поле publishTime из конверта Pub/Sub, поэтому не может доказать, где именно внутри инфраструктуры Google лежала задержка, до публикации в Pub/Sub или после. Вывод о том, что событие создавалось поздно, сделан по eventTimeMillis.</p><h2>Почему RTDN нельзя считать единственным источником правды</h2><p>Документация Google <a href="https://developer.android.com/google/play/billing/rtdn-reference">требует</a> после получения RTDN вызывать Developer API: уведомление не содержит полного состояния покупки. Этот случай добавляет к этому редакционный вывод: уведомление может прийти поздно или, в худшем сценарии, не прийти вовремя вообще. Если сервер выдаёт доступ только по RTDN, при задержке пользователь остаётся без оплаченного. Если клиент после покупки сам сообщает серверу токен покупки, а сервер проверяет его через Developer API, задержка RTDN ни на что не влияет.</p><h2>Что проверить в своём приложении</h2><ol><li>Убедиться, что клиент после успешной покупки отправляет purchase token на сервер, а сервер подтверждает его через Google Play Developer API, не дожидаясь RTDN.</li><li>Логировать eventTimeMillis и publishTime из конверта Pub/Sub вместе с временем получения, чтобы при следующем инциденте было видно, на каком отрезке задержка.</li><li>Проверить логи за 1–2 сентября на покупки, у которых разница между временем оплаты в клиенте и RTDN больше нескольких минут.</li><li>Не завязывать acknowledge покупки только на RTDN: неподтверждённая в течение трёх дней покупка возвращается пользователю автоматически.</li></ol><p>Отчёт говорит о нескольких странах и валютах, но Россию не называет; учитывая, что оплата в Google Play российскими картами не работает с 2022 года, задержки касаются в первую очередь приложений с зарубежной аудиторией. Что ещё менялось в правилах Play в последние дни: <a href="https://tproger.ru/news/google-play-zastavil-ankidroid-ubrat-ssylku-na-pozhertvovaniya-k">требование к AnkiDroid</a> убрать ссылку на пожертвования и стабильный релиз <a href="https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm">Android Studio Quail 4</a>. Появится ли по этому отчёту официальный ответ Google или новая запись в статусе Play Billing, мы проверим.</p><p>Источники: <a href="https://support.google.com/googleplay/android-developer/thread/464494337">Отчёт разработчика в сообществе Google Play</a>, <a href="https://status.play.google.com/incidents/n5md7YLZQsKV6rFXFXDG">Google Play Status Dashboard: инцидент Play Billing</a>, <a href="https://developer.android.com/google/play/billing/rtdn-reference">Справочник RTDN</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Google Play заставил AnkiDroid убрать из приложения ссылку на пожертвования</title>
      <link>https://tproger.ru/news/google-play-zastavil-ankidroid-ubrat-ssylku-na-pozhertvovaniya-k</link>
      <comments>https://tproger.ru/news/google-play-zastavil-ankidroid-ubrat-ssylku-na-pozhertvovaniya-k?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-play-zastavil-ankidroid-ubrat-ssylku-na-pozhertvovaniya-k</guid>
      <description><![CDATA[<p>Google Play отклонил обновления AnkiDroid из-за ссылки на Open Collective и пригрозил удалением приложения везде, кроме Индии и России. Хронология переписки, какое правило сработало, что решили мейнтейнеры и что проверить в своём приложении.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-play-zastavil-ankidroid-ubrat-ssylku-na-pozhertvovaniya-k">Google Play заставил AnkiDroid убрать из приложения ссылку на пожертвования</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 01 Sep 2026 17:29:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мейнтейнеры <b>AnkiDroid</b>, открытого Android-клиента для карточек Anki, 29 августа <a href="https://github.com/ankidroid/Anki-Android/issues/21656">опубликовали</a> переписку с Google Play: магазин признал ссылку на страницу пожертвований Open Collective нарушением платёжной политики, отклонил обновления и пригрозил удалить приложение 11 сентября везде, кроме Индии и России. 1 сентября тему обсуждали на Hacker News, а команда объявила, что убирает ссылки на донаты из сборки для Play «под протестом».</p><p>История касается не только AnkiDroid. Правило, на которое ссылается Google, запрещает вести пользователей к оплате мимо Google Play Billing; пожертвования допускаются лишь для организаций с подтверждённым налоговым статусом благотворительной и на определённых условиях. У большинства open source-проектов таких документов нет.</p><ul><li>Google Play счёл ссылку AnkiDroid на Open Collective нарушением Payments Policy; первое уведомление пришло 20 июля, документы проекта Google 7 августа не принял.</li><li>Требование: убрать ссылки на платежи вне Google Play Billing или подтвердить статус tax-exempt организации; сам Play Billing для пожертвований таких организаций запрещён.</li><li>Дата удаления при отсутствии исправления: сначала 3 августа, затем 11 сентября 2026 года, оба раза с оговоркой «везде, кроме Индии и России»; причина исключения не объяснена.</li><li>AnkiDroid связан с организацией статуса 501(c)(6), в приложении ничего не продаётся, Open Collective — единственный источник денег; мейнтейнеры убирают ссылки из Play-сборки ветки 2.24.x.</li><li>Разработчикам с кнопкой «поддержать» в бесплатном приложении: ссылка на внешнюю площадку без статуса благотворительной организации — ровно случай AnkiDroid.</li></ul><h2>Что именно нарушил AnkiDroid</h2><p>По тикету Google номер 9-2777000041594, нарушение относится к Payments Policy: внутри приложения была ссылка на Open Collective, платформу, через которую проект собирает пожертвования, а проблема помечена для сборки с version code 122400300. Google предложил два выхода: убрать все ссылки, «направляющие пользователей на оплату через системы, отличные от биллинга Google Play», либо доказать, что AnkiDroid — организация со статусом tax-exempt, освобождённая от налогов по американским правилам.</p><blockquote>Remove any links directing users to make payments using systems other than Google Play's billing system.</blockquote><p>Загвоздка в том, что политика Google одновременно запрещает использовать сам Google Play Billing для пожертвований освобождённым от налогов организациям, а AnkiDroid связан с организацией статуса 501(c)(6), профессиональной ассоциацией, а не благотворительным фондом. То есть донаты через Play невозможны, а ссылка наружу запрещена. Команда отдельно подчёркивает, что в приложении ничего не продаётся, Open Collective — единственный источник финансирования, а сам AnkiDroid не связан с Anki, AnkiWeb, AnkiMobile и AnkiHub.</p><h2>Хронология</h2><ul><li>20 июля 2026 года: первое автоматическое уведомление Google с датой удаления 3 августа «везде, кроме Индии и России».</li><li>7 августа: Google сообщил, что присланные документы нарушение не устранили.</li><li>Позднее уведомление: новая дата удаления 11 сентября 2026 года с той же региональной оговоркой.</li><li>29 августа: мейнтейнеры открыли issue #21656 с просьбой о помощи сообщества и решением убрать ссылки «под протестом».</li><li>1 сентября: обсуждение на Hacker News; изменений в позиции Google в issue нет.</li></ul><h2>Почему Индия и Россия отдельно</h2><p>В уведомлениях Google оба раза называл дату удаления приложения из Play «везде, кроме Индии и России». Причина исключения в переписке не объясняется; в issue нет и подтверждения, что удаление где-либо уже произошло. Для пользователей из России это означает лишь то, что из Play приложение не пропадёт. Для разработчиков, которые распространяют приложение и через RuStore или прямой установкой, напрашивается редакционный вариант: держать ссылки на пожертвования только вне Play-сборки; AnkiDroid подтвердил лишь удаление ссылок из сборки для Play.</p><h2>Что проверить в своём приложении</h2><ul><li>Найдите в приложении все ссылки на внешние платежи: Boosty, Patreon, Open Collective, «Купить кофе», номера кошельков, QR-коды. Ссылка на площадку пожертвований без подтверждённого статуса благотворительной организации — ровно случай AnkiDroid.</li><li>Разделите сборки: в версию для Google Play ссылки не включайте, в сборку для F-Droid, RuStore или прямой загрузки APK оставьте.</li><li>Не рассчитывайте на «объяснить в апелляции»: AnkiDroid отправлял документы, Google 7 августа ответил, что нарушение не устранено.</li><li>Если приложение платное или с подпиской, донаты как отдельный товар возможны только через Google Play Billing с его комиссией, и только если вы не благотворительная организация.</li><li>Держите под рукой историю уведомлений: первое письмо AnkiDroid получил 20 июля, а дедлайн подошёл через шесть недель.</li></ul><h2>Что дальше</h2><p>Ближайшая веха — сборка ветки 2.24.x без ссылок на донаты. Дата 11 сентября покажет, выполнит ли Google угрозу удаления в остальных странах. Реакцию Google на публичность ждать имеет смысл, но на момент публикации в issue никаких изменений позиции магазина нет, а сам Google на запросы в треде не отвечал.</p><p>Источники: <a href="https://github.com/ankidroid/Anki-Android/issues/21656">Issue #21656 в репозитории AnkiDroid</a>, <a href="https://news.ycombinator.com/item?id=49520022">Обсуждение на Hacker News</a></p><p>Изображение на обложке: AnkiDroid</p>]]></content:encoded>
    </item>
    <item>
      <title>Android Studio Quail 4 вышла в стабильной версии с локальной Gemma 4 внутри IDE</title>
      <link>https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm</link>
      <comments>https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm</guid>
      <description><![CDATA[<p>Google выпустила стабильную Android Studio Quail 4 (2026.1.4): локальная Gemma 4 прямо в IDE, офлайн-рефакторинг без отправки кода, 23 встроенных навыка агента. Требования к памяти, как включить, что ещё вошло в релиз и кому это подойдёт.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm">Android Studio Quail 4 вышла в стабильной версии с локальной Gemma 4 внутри IDE</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 01 Sep 2026 17:26:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Google 1 сентября <a href="https://android-developers.googleblog.com/2026/09/leverage-gemma-4-android-studio-quail.html">объявила</a> стабильной <b>Android Studio Quail 4</b>, версию 2026.1.4. Главное в релизе — локальная модель <b>Gemma 4</b>, которая запускается прямо внутри IDE: агент выполняет многофайловые рефакторинги без отправки исходников в облако и без квот на токены. Для команд, которым запрещено отдавать код наружу, это штатный способ пользоваться ИИ-агентом в официальной IDE Android; для остальных — способ не упираться в лимиты облачных моделей.</p><p>Quail 4 — финальный стабильный выпуск линейки Quail, и автор анонса, менеджер продукта Android Studio Амман Фасил Асфав, называет её «готовой к использованию в продакшене». Помимо локальной модели в IDE вошли 23 готовых «навыка» агента под типовые задачи Android, кликабельные ссылки на классы и методы в ответах, индикаторы состояния в списке чатов и сворачиваемый показ рассуждений модели.</p><ul><li>Android Studio 2026.1.4 (Quail 4) стабильна; это последний выпуск линейки Quail.</li><li>Gemma 4 работает локально через встроенный движок инференса; код не покидает машину, лимитов на токены нет.</li><li>Минимум 12 ГБ оперативной памяти для самых маленьких моделей; по словам Google, «машины с 32 ГБ и больше будут работать лучше всего».</li><li>23 встроенных навыка агента (AGP 9 Upgrade, Android Profiler, Navigation 3, Adaptive и другие) выбираются автоматически по запросу и отключаются одним переключателем.</li><li>Локальный режим включается в Agent model selector или в Settings, Tools, AI, Model Providers, Gemma; веса IDE скачивает, проверяет и обновляет сама.</li></ul><h2>Как устроена локальная модель</h2><p>Android Studio сама скачивает веса Gemma 4, проверяет их и обновляет. Внутри IDE работает лёгкий движок инференса, поэтому отдельный сервер вроде Ollama поднимать не нужно. Модель выбирается в переключателе Agent model selector или в настройках: Settings, Tools, AI, Model Providers, Gemma. После этого агент работает локально: анонс подтверждает многофайловые рефакторинги полностью офлайн; остальные сценарии облачного агента Google для локального режима отдельно не перечисляет. Google подчёркивает два свойства: исходный код не покидает локальную машину, и квоты на токены не действуют.</p><blockquote>Your source code never leaves your local machine and you never hit token quota limits.</blockquote><p>Требования к железу компания называет прямо: самые маленькие варианты Gemma 4 стартуют на 12 ГБ оперативной памяти, а лучше всего работают машины с 32 ГБ и больше. На ноутбуке с 16 ГБ, где рядом крутятся эмулятор и Gradle, стоит ожидать, что локальная модель окажется медленнее и заметно проще облачной. Это цена за приватность и отсутствие квот, и оценивать её нужно под свой проект: по нашему опыту, многофайловый рефакторинг на маленькой модели требует больше ручных проверок, чем на облачной.</p><h2>Что такое навыки агента</h2><p>«Навык» здесь — заранее написанная инструкция с контекстом под конкретную задачу Android: как обновить проект на Android Gradle Plugin 9, как читать данные профилировщика, как переехать на Navigation 3 или сделать адаптивную вёрстку под планшеты и складные устройства. В Quail 4 таких навыков 23, и IDE подбирает их по метаданным запроса сама. Если подбор мешает, навыки отключаются общим переключателем в настройках IDE.</p><h2>Что ещё изменилось в интерфейсе агента</h2><ul><li>Ссылки на классы, функции, методы и пути файлов в ответах агента стали кликабельными.</li><li>В списке Recent Chats появились индикаторы: загрузка, ожидание ввода, завершение фоновой задачи.</li><li>Вкладки Task и Walkthrough объединены во вкладку Summary of Changes; по ней стоит проверять правки перед применением.</li><li>Рассуждения моделей с режимом reasoning показываются сворачиваемым блоком.</li></ul><h2>Что менять в проекте и процессе</h2><ul><li>Обновите Android Studio до 2026.1.4 через Check for Updates; проект менять не нужно.</li><li>Если в компании запрещено отправлять код во внешние сервисы, включите Gemma в Model Providers и убедитесь, что облачный провайдер в настройках не выбран.</li><li>Проверьте память: 12 ГБ — заявленный минимум для самых маленьких моделей, 32 ГБ и больше — рекомендация Google; на 16 ГБ закройте эмулятор перед работой агента или пользуйтесь физическим устройством.</li><li>Для миграции на AGP 9 попробуйте одноимённый навык: это задача с сотней мелких правок, где агент экономит время.</li><li>Региональных оговорок в анонсе нет, но доступность загрузки весов из России Google не подтверждает; проверяйте на своей машине. Локальный режим не требует подписки на облачные модели.</li></ul><h2>Контекст</h2><p>Линейка Quail шла к этому весь цикл: в Quail 2 появились параллельные чаты с агентом, затем навыки, интеграция с Firebase и первая поддержка локальных моделей в Canary-сборках. Quail 4 закрывает линейку и делает локальный режим штатным в стабильной версии. Следующая линейка Android Studio получит новое кодовое имя; сохранится ли в ней локальная Gemma как основной сценарий, Google не говорит, и это предположение редакции по тону анонса.</p><p>Источники: <a href="https://android-developers.googleblog.com/2026/09/leverage-gemma-4-android-studio-quail.html">Leverage Android skills and Gemma 4 in Android Studio Quail 4 (Android Developers Blog)</a>, <a href="https://developer.android.com/studio/releases">Android Studio release notes</a></p><p>Изображение на обложке: Google, Android Developers Blog</p>]]></content:encoded>
    </item>
    <item>
      <title>Локализация через Enum, неожиданный Дзен, быстрее только телепатия</title>
      <link>https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat</link>
      <comments>https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Самир Гёзалов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat</guid>
      <description><![CDATA[<p>Надоело плодить JSON/ARB файлы при локализации Flutter-приложения? Автор делился личным опытом и показал, как элегантно настроить локализацию через Enum без внешних зависимостей, генераторов кода и боли в рантайме.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat">Локализация через Enum, неожиданный Дзен, быстрее только телепатия</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Массивы и строки]]></category>
      <category><![CDATA[Красивый хак]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 04 Jun 2026 04:45:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Решил давеча добавить локализацию в свое приложение на Flutter. Задачка-то простая: пара кнопок, пару десятков переменных. Казалось бы, делов на пять минут. Но Flutter «из коробки» сразу попытался всучить мне какую-то дичь в виде ARB и JSON файлов. Хмм, из прошлого с такими реализациями лишь печаль, так что…</p><h2>Попытка №1. Путь в лоб: Классы и интерфейсы</h2><p>Самый очевидный способ - создать родительский класс с переменными, а языки сделать его наследниками. Но это просто… фиаско. Даже если не писать from/toJson, процесс выглядит так:</p><ol><li>Объявил переменную в родителе.</li><li>Прописал её в конструкторе.</li><li>Повторил то же самое для всех дочерних классов (всех языков).</li></ol><p>Если бы я работал на аутсорсе в Индии и мне платили за количество строк кода - это был бы идеальный вариант. Но я хотел, чтобы одной строки при объявлении было достаточно.</p><h2>Попытка №2. Стандарт (ARB/JSON)</h2><p>Я поплевался, но решил попробовать - «стандарт» всё-таки. Мало ли, может чего поменялось за годы. Вроде всё завелось, но сам процесс… это боль. Бегать по разным файлам, чтобы добавить одну строчку - так себе удовольствие.</p><p>Почему я от него окончательно отказался? Когда данных становится реально много (десятки языков, тысячи строк), ты попадаешь в ловушку: тебе нужно эту махину либо целиком держать в памяти, либо постоянно подгружать и парсить. Ради смены одного слова на кнопке заставлять девайс ворочать тяжелые JSON-ы в рантайме - так себе затея для производительности.</p><h2>Попытка №3. Таблицы и костыли</h2><p>Подумал: «Окей, почему бы не подтянуть старый добрый CSV или вообще закинуть всё в табличку?». И тут официальный пакет локализации сказал: «Извини, мужик, тут наши полномочия всё».</p><p>Ну, я тоже не пальцем деланный. Решил припахать нейросеть, чтобы она написала мне собственный генератор. Флоу получился такой:</p><ol><li>Добавляю строку в таблицу.</li><li>Запускаю генератор.</li><li>Он лепит «родительский» файл.</li><li>После Freezed генерит toJson, fromJson…</li></ol><p>Короче, весело не было. Мало того, я понимал: если языков станет много, мне придется добавлять их все разом и единовременно, иначе в рантайме всё начнет плеваться ошибками. Плюс та же проблема с памятью: таблица - это структура, которую надо парсить и хранить.</p><h2>Красный флаг для программиста</h2><p>Но главная проблема даже не в этом. Необходимость запускать генератор после добавления каждой переменной - это для любого программиста красный флаг.</p><p>Что происходит на практике? Когда ты пишешь код и тебе нужно добавить одну несчастную строку, тебе лень (читать: нехочется выходить из потока творения) запускать весь этот цикл с генерацией. Ты просто её хардкодишь в надежде «потом скопом всё добавлю одним махом». А «потом» наступает тогда, когда уже весь проект завален хардкодом, и вычищать его - то еще удовольствие. Даже нейросетки с такими запросами помогают не с первого раза, и с сомнительной эффективностью.</p><p>Нутром чуял - флоу неправильный. В итоге я пришел к тому, что называю идеальной локализацией.</p><h2>Эволюция лени: почему Enum победил интерфейсы</h2><p>Я начал мучить нейросеть разными вариантами реализации. Для меня в первую очередь был важен флоу работы: мне было тупо лень писать больше одной строки кода, чтобы добавить переменную.</p><p>Моя философия проста: строку захардкодить - моментально. Добавление даже одной строки в другом файле требует доп. действий. НО, если действий минимум, то кодер поймет, что выигрыш во времени сейчас мизерный против больших потерь в будущем, и исправно добавит строку в правильное место. Этого не произойдет, если для добавления строки нужно «отчитаться» в десяти местах.</p><h2>Попытка №4. Рекорды (Records)</h2><p>Присматривался к рекордам. С ними удобно: не нужно писать конструкторы. Но есть подвох: как только ты добавил переменную в один язык, компилятор тут же сходит с ума и требует добавить её во все остальные прямо сейчас. Никакой гибкости и возможности оставить «на потом».</p><h2>Идеальный костыль: Enum</h2><p>В итоге я пришел к самому, казалось бы, «неправильному» способу, который оказался идеальным. Enum. Само название намекает на перечисления и цифры, но оказалось, что хранить в нем буквы и целые фразы - это лучший путь для локализации.</p><p>Знаете, мне моё решение так понравилось, что я пошел к нейросетям и проверил его со всех сторон. Все модели  остались в полном восторге. Под это дело я даже подготовил монументальную «нейро-статью» на полтора часа внимательного чтения, со всеми графиками, бенчмарками и анализом производительности.</p><p>Но потом я заглянул в правила Хабра, прислушался к голосу разума и понял: никто не хочет читать полтора часа сухой статистики. Лучше я просто расскажу вам свою историю «от первого лица», как я докатился до такой жизни. Ну, а если вы совсем уж фанаты цифр - просто скормите этот текст любой нейронке, она вам перескажет всё в лучших академических тонах с графиками на любой вкус.</p><p>А здесь мы будем говорить по делу.</p><p>Ниже я выкатываю сам код. Код тут не для зубрежки, а лишь чтобы указать направление / идею. Самая большая прелесть этой системы в том, что она оставляет гигантское пространство для любого типа реализации. Это архитектурный каркас, который чертовски сложно сломать. Главное — уловить принцип.</p><h2>Реализация</h2><p>Принцип разделения:</p><ul><li>enum Strings → типизированный контракт (что существует).</li><li>translator → источник данных (откуда берётся текст).</li></ul><p>Структура файлов - минимальная. Никаких внешних зависимостей:</p><h2>Ядро - strings.dart</h2><p>Весь контракт локализации в одном enum. Два режима - хардкод switch и серверный кеш - за одним и тем же</p><p>. Даже сообщения об ошибках локализации — сами локализованы:</p><h2>Список языков - languages_enum.dart</h2><p>Каждый язык - самодостаточная единица: знает свой код, название, направление текста и как себя загрузить:</p><p>Хотите грузить с сервера? Одна строка + loader. И</p><p>- тоже одна строка, потому что</p><p>уже является registry:</p><h2>Переводчик - i18n/russian.dart</h2><p>Как это выглядит в жизни (и почему я перестал хардкодить) Я намеренно не привожу здесь код оберток виджетов или конкретных стейт-менеджеров. Всё это - чистая «вкусовщина». Для работы системы нужен лишь элементарный вещатель событий (Notifier), повешенный на метод смены языка.</p><p>Но главное - это мой ежедневный флоу. Сейчас, чтобы добавить строку в UI, я просто вызываю нужный мне ключ: Strings.someKey(). Без контекста, везде.</p><p>А если ключа еще нет? Я тупо иду в Strings и добавляю одну строчку в Enum. Всё.</p><p>Благодаря дефолтному конструктору, приложению абсолютно плевать, что у меня там еще 100 языков не переведены. Оно компилируется и работает здесь и сейчас. А дальше в дело вступают гит-хуки: при комите нейросетка сама подхватывает изменения и заполняет недостающие поля в переводчиках.</p><p>Знаете, какое самое странное чувство? Мне сейчас реально проще и быстрее завести переменную в локализации, чем хардкодить строку в коде. Кажется, это и есть признак здоровой архитектуры - когда делать «правильно» становится физически удобнее, чем делать «быстро» и криво.</p><p>Собственно если в кратце это все о чем я хотел рассказать. Если тема зайдет или кто-то сам не сможет допереть, как прикрутить это к своей архитектуре - пишите в комментариях, разберемся.</p><p>Надеюсь, мой опыт сэкономит вам пару литров нервных клеток. Всех благ и чистого кода без «магических строк»!</p>]]></content:encoded>
    </item>
    <item>
      <title>ИТ-аутстаффинг: когда он выгоднее найма в штат</title>
      <link>https://tproger.ru/articles/it-autstaffing-kogda-on-vygodnee-najma-v-wtat</link>
      <comments>https://tproger.ru/articles/it-autstaffing-kogda-on-vygodnee-najma-v-wtat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Бойко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/it-autstaffing-kogda-on-vygodnee-najma-v-wtat</guid>
      <description><![CDATA[<p>Разбираем, чем ИТ-аутстаффинг отличается от штатного найма: скорость, затраты, риски. Когда провайдер выгоднее — и когда нет.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/it-autstaffing-kogda-on-vygodnee-najma-v-wtat">ИТ-аутстаффинг: когда он выгоднее найма в штат</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Фронтенд-разработка с нуля]]></category>
      <category><![CDATA[Фулстек-разработка: полный цикл]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 May 2026 05:44:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>ИТ-аутстаффинг — это модель найма, при которой специалист работает на заказчика и отвечает перед его менеджерами, но официально числится в штате другой компании — провайдера. Последний при этом берёт на себя кадровую часть: трудовой договор, налоги, страховые взносы, документооборот.</p><p>Почему эта схема вообще появилась? Из-за дефицита кадров в ИТ, который давно превратился в постоянный фон для компаний, занимающихся цифровыми продуктами. Найти миддла или синьора занимает два-три месяца, а в узких технологических стеках — и того дольше. Пока идёт поиск, проекты стоят или перегружают команду. И тогда возникает спрос на альтернативные способы работы с ИТ-персоналом.</p><p>Разберём, как устроен аутстаффинг, чем он отличается от аутсорсинга ИТ-специалистов и при каких задачах находить кадры через провайдера  – хорошее решение.</p><h2>ИТ-аутстаффинг и штат: в чем разница</h2><p>Штатный найм — это прямые трудовые отношения. Работодатель оформляет сотрудника к себе и ответственен за налоги, взносы, отпуска, больничные и кадровое сопровождение. Специалист становится частью корпоративной структуры и, как правило, видит своё дальнейшее развитие внутри этой компании. Это привычная схема для обеих сторон.</p><p>При ИТ-аутстаффинге компания-провайдер трудоустраивает специалиста у себя и передаёт его заказчику — на срок или под проект. Схема иначе выстраивается юридически, но с точки зрения ежедневной работы разницы нет. Заказчик ставит задачи и требует результатов. Провайдер отвечает за зарплату, кадровый учёт и трудовые гарантии.</p><p>Отличия двух моделей — в таблице:</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-04-29/47cc0077-fd40-4ec5-93ea-f60334dd6354.webp" alt="" /><figcaption>Отличия двух моделей</figcaption></figure><p>Ещё один вопрос, который нередко возникает: чем аутстаффинг отличается от аутсорсинга. При аутсорсинге заказчик отдаёт задачу внешней команде и принимает результат — без погружения в то, как команда работает изнутри. При аутстаффинге он получает конкретного человека и управляет им сам. Это разные форматы с разной логикой применения: первый — про готовый результат, второй — про ресурсы.</p><p>А как вообще контролировать человека, которого не нанимал? Да ровно так же — через задачи, метрики, совместные инструменты. Трудовой договор тут ни при чём. Меняется только то, кто его подписывает и кто несёт кадровые обязательства.</p><h2>Преимущества аутстаффинга разработчиков</h2><p>Классический рекрутинг никуда не уходит, но иногда аутстаффинг гораздо эффективнее. Итак, каковы же преимущества этой формы найма?</p><h2>Аутстаффинг в ИТ: быстрое масштабирование без кадровой нагрузки</h2><p>Найти сильного специалиста в команду в среднем занимает два-три месяца — и это при активном поиске. Часто бывает так, что людей в команде не хватает, потому что проект стремительно растет. Запуск нескольких параллельных процессов поиска кадров рискует затянуться. И тогда бизнес обращается к провайдеру, чтобы добрать нужное количество специалистов. Провайдер предлагает кандидатов, имеющих релевантный опыт в конкретном технологическом стеке, уже через одну-две недели, иногда – быстрее. Разница ощутима, особенно когда дата запуска проекта уже стоит в календаре.</p><p>Особенно это важно, когда приходится одновременно масштабировать несколько направлений. Привлечь четверых-пятерых специалистов через провайдера — это один договор и один процесс согласования, а не пять отдельных рекрутинговых потоков с непредсказуемыми сроками.</p><h2>Экономит бюджет и снижает операционные затраты</h2><p>Содержание штатного сотрудника — это не только зарплата. К ней добавляются расходы на рекрутинг (в среднем одна-три месячные выплаты), обустройство рабочего места, обучение, страховые взносы, налоги и кадровое администрирование. При аутстаффинге эти статьи уходят к провайдеру — заказчик платит прозрачную ставку по договору.</p><p>По завершении проекта не нужно думать о выходных пособиях или процедурах сокращения. Вопрос закрывается условиями договора с провайдером. При сравнимой квалификации специалиста совокупные расходы на аутстаффинге нередко оказываются ниже, чем на штатного сотрудника — если считать в полном объёме.</p><h2>Дает доступ к широкому пулу технических компетенций</h2><p>Провайдеры, предоставляющие аутстаф разработки, держат в базе специалистов самых разных профилей — серверные разработчики, системные</p><p>архитекторы, тестировщики, технические аналитики. Для заказчика это означает возможность подобрать человека с нужным стеком без ограничений локального рынка.</p><p>Именно поэтому аутстафф программистов особенно востребован у компаний, работающих с редкими или нестандартными технологиями. Найти такого специалиста «в штат» часто сложнее и дороже, чем привлечь через провайдера с обновляемой базой кандидатов — особенно если речь о нишевых стеках с ограниченным предложением на рынке труда.</p><h2>Специалисты с разнообразными опытом</h2><p>Разработчики на аутстаффинге, как правило, обладают более широким техническим кругозором, чем их штатные коллеги: они успели поработать в разных командах, с разными стеками и типами задач. Это даёт им гибкость мышления и насмотренность, которую сложно получить, годами работая в одном продукте.</p><p>Кроме того, проектный формат держит таких специалистов в тонусе: нет возможности погрязнуть в рутине.</p><h2>Снижение административной нагрузки</h2><p>Прежде чем новый штатный разработчик напишет первую задачу в трекере, кадровый отдел потратит время на оформление, бухгалтер — на налоговый учёт, юрист — проверит трудовой договор. Это нормально для штатного найма — но это реальные часы и ресурсы. При аутстаффинге вся эта работа остаётся за провайдером.</p><p>Для компаний, которые одновременно закрывают несколько направлений, это особенно ощутимо. Пятеро специалистов через провайдера — это пять ставок в одном договоре. Пятеро штатных — это пять кадровых дел, пять налоговых расчётов, пять пакетов документов. Разница в операционной нагрузке очевидна.</p><h2>Когда аутстаффинг выгоднее штатного найма</h2><p>Модель аутстаффинга в ИТ работает лучше всего в нескольких конкретных ситуациях — давайте суммируем, когда лучше всего задуматься именно об этом варианте найма.</p><ul><li>Проектная работа с ограниченным горизонтом. Нанимать разработчика в штат на полгода-год — нецелесообразно: по завершении проекта появляются расходы на сокращение или переобучение. Аутстаффинг закрывает задачу без лишних обязательств на выходе.</li><li>Срочный рост команды. Продукт запускается через три месяца, а нужны ещё три специалиста прямо сейчас. Классический рекрутинг не успеет. Провайдер может дать команду параллельно, без разрыва в темпе разработки.</li></ul><p>Нишевые технологии и редкие стеки. Когда нужен человек с узкой экспертизой, которых на локальном рынке единицы — провайдер с</p><ul><li>широкой базой найдёт быстрее и, скорее всего, дешевле, чем собственный подбор.</li><li>Тест гипотезы без обязательств. Компания запускает новое направление, но не уверена в его горизонте. Аутстаффинг позволяет собрать команду, быстро оценить гипотезу и выйти без кадровых последствий, если направление не пошло.</li></ul><p>У модели есть и ограничения, которые важно учитывать. Главный риск — зависимость от провайдера: если партнёрство прерывается досрочно, специалист уходит вместе с накопленным знанием о проекте. Для критически важных функций это серьёзно. Поэтому разумный подход — смешанный: ключевые роли закрывать штатом, а аутстаффинг подключать для расширения команды под конкретные задачи с понятным сроком.</p><h2>Штатный найм: когда он по-прежнему эффективен</h2><p>Задач, с которыми штатный найм справляется лучше, немало. Особенно это заметно, когда продукт живёт годами и ключевые решения принимаются людьми, которые понимают его историю. Посмотрим на преимущества найма.</p><ul><li>Погружение в продукт. Человек, который работает с одним продуктом год или два, знает его глубже, чем тот, кого привлекли на полгода. Этот контекст нельзя передать через документацию или онбординг — он накапливается постепенно, через участие во всех стадиях и решениях.</li><li>Лояльность. Штатный сотрудник думает о своей карьере внутри компании, заинтересован в её развитии. Это сложно воспроизвести в модели временного сотрудничества — здесь у специалиста другие приоритеты.</li><li>Корпоративная память. Внутренние специалисты накапливают базу знаний, обучают новых коллег, передают экспертизу. При аутстаффинге существует риск, что с окончанием контракта вместе со специалистом уйдут и знания о проекте — если не выстроить процесс передачи.</li><li>Стабильность команды. Долгие проекты требуют предсказуемого состава: меньше перестановок, меньше потерь контекста. Штатный найм даёт более высокую вероятность сохранить команду на горизонте нескольких лет.</li></ul><p>Штатная модель незаменима там, где важны стратегическая непрерывность и инженерная культура: развитие ключевого продукта, техническая архитектура, формирование внутренней экспертизы. Всё это требует людей, которые связывают своё развитие с компанией, — аутстаффинг эту связь не создаёт. При выборе формата стоит честно оценить горизонт задач и то, насколько важна долгосрочная вовлечённость специалиста.</p><h2>Не вместо, а вместе: гибкие форматы и штатный найм техкадров</h2><p>Аутстаффинг не вытеснит штатный найм, так как решает иные задачи. Когда нужны скорость, гибкость, доступ к экспертизе без долгосрочных обязательств — он работает. Когда важны глубина погружения, лояльность и накопление знаний внутри команды — штат не заменить.</p><p>Компании, прошедшие через опыт масштабирования технической команды, как правило, не задаются вопросом «аутстаффинг или штат» — они комбинируют. Устойчивое ядро в штате, расширение под конкретные задачи — через провайдера.</p><p>Подробнее о том, как организована работа с внешними техническими кадрами, — в профильных материалах компаний, например, в разделе <a href="https://selecty.ru/it-outsourcing" rel="follow">ИТ-аутсорсинг</a> на сайте Selecty, где описаны конкретные форматы взаимодействия заказчика с провайдером.</p><p>Гибкие форматы работы с техническими кадрами сегодня — уже не просто тренд, а устойчивая норма рынка. Компании, которые умеют подбирать инструмент под задачу, получают ощутимое операционное преимущество. ИТ-аутстаффинг при правильном применении — один из таких инструментов.</p><p>Реклама. ООО Селекти, ИНН 7736313541, erid: 2W5zFJYUtvD</p>]]></content:encoded>
    </item>
    <item>
      <title>Google обязала всех Android-разработчиков пройти верификацию — 62 организации выступили против</title>
      <link>https://tproger.ru/news/google-obyazala-vseh-android-razrabotchikov-projti-verifikaciyu---6</link>
      <comments>https://tproger.ru/news/google-obyazala-vseh-android-razrabotchikov-projti-verifikaciyu---6?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-obyazala-vseh-android-razrabotchikov-projti-verifikaciyu---6</guid>
      <description><![CDATA[<p>Google требует верификацию личности для всех Android-разработчиков — не только в Play Store. F-Droid под угрозой, 62 организации против. Разбираем последствия.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-obyazala-vseh-android-razrabotchikov-projti-verifikaciyu---6">Google обязала всех Android-разработчиков пройти верификацию — 62 организации выступили против</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Google Play]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 31 Mar 2026 06:26:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы публикуете Android-приложения за пределами Google Play — приготовьтесь к верификации. 30 марта 2026 года Google <a href="https://android-developers.googleblog.com/2026/03/android-developer-verification-rolling-out-to-all-developers.html">открыла регистрацию</a> в программе Android Developer Verification для всех разработчиков. С 30 сентября 2026 незарегистрированные приложения начнут блокироваться на сертифицированных устройствах.</p><p>Программа обязывает <b>всех</b> разработчиков Android-приложений пройти верификацию личности — независимо от того, распространяют ли они приложения через Google Play, сторонние магазины или напрямую через APK. 62 организации из 19 стран, включая EFF, F-Droid и Tor Project, <a href="https://keepandroidopen.org/open-letter/">подписали открытое письмо</a> против программы, назвав её угрозой открытости Android.</p><p>— Google требует верификацию личности для всех Android-разработчиков — не только в Play Store</p><p>— С 30 сентября 2026 незарегистрированные приложения блокируются в 4 странах, в 2027 — глобально</p><p>— F-Droid заявляет, что программа фактически уничтожает проект</p><p>— 62 организации (EFF, Tor Project, Proton, KDE) подписали открытое письмо против</p><p>— Для хобби-разработчиков предусмотрен бесплатный аккаунт с лимитом в 20 устройств</p><p>Android Developer Verification — программа верификации разработчиков, <a href="https://android-developers.googleblog.com/2026/03/android-developer-verification.html">анонсированная Google</a> во второй половине 2025 года. До сих пор верификация требовалась только для публикации в Google Play. Новая программа распространяет это требование на <b>все каналы дистрибуции</b>: сторонние магазины (F-Droid, Galaxy Store, Amazon Appstore), прямую загрузку APK и любой другой способ установки на сертифицированные Android-устройства (то есть практически все телефоны с Google Play Services — более 95% активных Android-устройств за пределами Китая).</p><h2>Что требуется для верификации</h2><p>Google предлагает два типа аккаунтов (регистрация — на <a href="https://developer.android.com/developer-verification">developer.android.com/developer-verification</a>):</p><ul><li><b>Full Distribution ($25)</b> — полная верификация: юридическое имя, адрес, email, телефон, загрузка государственного удостоверения личности. Для организаций — дополнительно D-U-N-S-номер (бесплатный бизнес-идентификатор Dun &amp; Bradstreet, но получение занимает до 28 рабочих дней)</li><li><b>Limited Distribution (бесплатно)</b> — упрощённая верификация без госдокументов, только email. Ограничение: не более 20 устройств. Запуск в июне 2026</li></ul><p>Для разработчиков, уже верифицированных в Google Play Console, ничего не меняется — Google автоматически зарегистрирует подавляющее большинство существующих приложений.</p><h2>Что происходит с незарегистрированными приложениями</h2><p>С <b>30 сентября 2026</b> года в Бразилии, Индонезии, Сингапуре и Таиланде незарегистрированные приложения будут <b>заблокированы для установки и обновления</b> на сертифицированных Android-устройствах. В 2027 году требование распространится глобально.</p><p>В апреле 2026 на все сертифицированные устройства (Android 7+) через Google Play Services будет установлен системный сервис <b>«Android Developer Verifier»</b> — он и будет проверять регистрацию разработчика при каждой установке.</p><p>Для установки незарегистрированных приложений пользователю нужно пройти <b>«расширенный режим»</b> (advanced flow):</p><ol><li>Включить режим разработчика в настройках</li><li>Подтвердить, что установка добровольная (защита от социальной инженерии)</li><li>Перезагрузить телефон (обрывает потенциальный удалённый доступ)</li><li>Подождать <b>24 часа</b> (обязательный «период охлаждения»)</li><li>Пройти биометрическую аутентификацию</li><li>Установить приложение — с постоянной меткой «от неверифицированного разработчика»</li></ol><p>Установка через ADB (для разработки и тестирования) по-прежнему работает без ограничений.</p><h2>Почему Google это делает</h2><p>Google ссылается на собственное исследование: вредоносное ПО из сайдлоуд-источников <a href="https://android-developers.googleblog.com/2026/03/android-developer-verification-rolling-out-to-all-developers.html">встречается в 90 раз чаще</a>, чем из Google Play. Главная проблема — анонимность: разработчик, пойманный на распространении малвари, может удалить аккаунт и мгновенно зарегистрировать новый. Верификация привязывает дистрибуцию к реальной личности. 24-часовой «период охлаждения» в advanced flow направлен против сценариев социальной инженерии — когда жертву дистанционно вынуждают установить вредоносное приложение под давлением:</p><blockquote>В течение этих 24 часов атакующему становится значительно сложнее удержать жертву. За это время вы, вероятно, выясните, что ваш близкий на самом деле не в тюрьме и что ваш банковский счёт не под угрозой.</blockquote><h2>Почему 62 организации против</h2><p>В феврале 2026 года коалиция из 62 организаций опубликовала <a href="https://keepandroidopen.org/open-letter/">открытое письмо</a> на имя Сундара Пичаи, Ларри Пейджа и Сергея Брина. Среди подписантов:</p><ul><li><a href="https://www.eff.org/">EFF</a> (Electronic Frontier Foundation)</li><li><a href="https://f-droid.org/">F-Droid</a> — крупнейший альтернативный магазин свободного ПО</li><li><a href="https://www.torproject.org/">Tor Project</a></li><li><a href="https://proton.me/">Proton</a> (ProtonMail, ProtonVPN)</li><li><a href="https://kde.org/">KDE</a>, <a href="https://www.gnome.org/">GNOME Foundation</a></li><li><a href="https://lineageos.org/">LineageOS</a>, <a href="https://nextcloud.com/">Nextcloud</a>, <a href="https://vivaldi.com/">Vivaldi</a></li><li><a href="https://www.fsf.org/">FSF</a>, <a href="https://fsfe.org/">FSFE</a>, Software Freedom Conservancy</li><li>Chaos Computer Club, La Quadrature du Net, Privacy Guides</li></ul><h3>Главная претензия: F-Droid под угрозой закрытия</h3><p><a href="https://f-droid.org/">F-Droid</a> — альтернативный магазин приложений, который компилирует программы из открытого исходного кода и подписывает их собственным ключом. По новым правилам F-Droid <b>не может зарегистрировать чужие приложения от своего имени</b> (это означало бы ложное заявление на владение), и <b>не может обязать тысячи волонтёров-разработчиков</b> лично регистрироваться в Google.</p><p>F-Droid <a href="https://f-droid.org/2026/02/24/open-letter-opposing-developer-verification.html">заявил напрямую</a>: если Google реализует программу в текущем виде, это <b>фактически уничтожает проект</b>. Аналогичная проблема у IzzyOnDroid и других репозиториев свободного ПО.</p><h3>Шесть претензий открытого письма</h3><ol><li><b>Гейткипинг за пределами Play</b> — Google становится единственным арбитром, кто может распространять ПО для Android</li><li><b>Барьеры входа</b> — D-U-N-S-номер, госдокументы, $25 — непропорциональная нагрузка на инди-разработчиков</li><li><b>Приватность</b> — централизация данных обо всех разработчиках у Google</li><li><b>Произвольное применение</b> — Google может отозвать верификацию по своему усмотрению</li><li><b>Антиконкурентная разведка</b> — Google получает данные обо всех приложениях конкурирующих экосистем</li><li><b>Регуляторные риски</b> — возможный конфликт с DMA (Digital Markets Act) в ЕС</li></ol><h2>Хронология</h2><ul><li><b>2025</b> — программа анонсирована</li><li><b>30 марта 2026</b> — регистрация открыта для всех разработчиков</li><li><b>Апрель 2026</b> — «Android Developer Verifier» устанавливается на все сертифицированные устройства через Play Services</li><li><b>Июнь 2026</b> — запуск бесплатных Limited Distribution аккаунтов</li><li><b>Август 2026</b> — глобальный запуск advanced flow для пользователей</li><li><b>30 сентября 2026</b> — <b>начало блокировок</b> в Бразилии, Индонезии, Сингапуре и Таиланде</li><li><b>2027</b> — глобальное распространение</li></ul><h2>Что не затронуто</h2><ul><li>Установка через <b>ADB</b> — без ограничений</li><li><b>Корпоративные managed-устройства</b> (Enterprise MDM) — освобождены</li><li><b>Альтернативные AOSP-прошивки</b> (GrapheneOS, LineageOS, /e/OS) — не затронуты (нет Play Services)</li><li><b>Разработка и тестирование</b> — не требует регистрации</li></ul><h2>Выводы</h2><p>Android Developer Verification — самое значительное ограничение открытости Android за всю историю платформы. Google аргументирует его борьбой с малварью (90x чаще из сайдлоуда), но критики указывают: программа превращает Android в подобие iOS, где единственный арбитр дистрибуции — владелец платформы.</p><p>Для разработчиков, публикующихся через Google Play, ничего не меняется. Для тех, кто распространяет приложения за его пределами — F-Droid, прямые APK, корпоративные решения — начинается обратный отсчёт до 30 сентября 2026.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разработчик декомпилировал приложение Белого дома — нашёл обход пейволлов, GPS-трекинг и JS с чужого GitHub</title>
      <link>https://tproger.ru/news/razrabotchik-dekompiliroval-prilozhenie-belogo-doma---nawyol-obhod-</link>
      <comments>https://tproger.ru/news/razrabotchik-dekompiliroval-prilozhenie-belogo-doma---nawyol-obhod-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/razrabotchik-dekompiliroval-prilozhenie-belogo-doma---nawyol-obhod-</guid>
      <description><![CDATA[<p>Разработчик декомпилировал приложение Белого дома: GPS-трекинг, обход GDPR-баннеров и пейволлов, загрузка JS с GitHub Pages. Полный технический разбор находок.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/razrabotchik-dekompiliroval-prilozhenie-belogo-doma---nawyol-obhod-">Разработчик декомпилировал приложение Белого дома — нашёл обход пейволлов, GPS-трекинг и JS с чужого GitHub</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Персональные данные]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 29 Mar 2026 04:30:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы думаете, что официальное приложение правительства США — это образец безопасности и приватности, у разработчика <a href="https://blog.thereallo.dev/blog/decompiling-the-white-house-app">thereallo.dev</a> есть для вас неприятные новости. Он декомпилировал Android-приложение Белого дома и нашёл инжектор обхода пейволлов, GPS-трекинг каждые 4,5 минуты и загрузку JavaScript с чьего-то персонального GitHub Pages.</p><p>Приложение <b>White House</b> (gov.whitehouse.app, версия 47.0.1) — официальный Android-клиент Белого дома, доступный в <a href="https://play.google.com/store/apps/details?id=gov.whitehouse.app">Google Play</a>. Под капотом — React Native на Expo SDK 54 с движком Hermes. Бэкенд — WordPress, который отдаёт контент через REST API на whitehouse.gov.</p><p>— Приложение содержит JavaScript-инжектор, который скрывает cookie-баннеры, GDPR-диалоги, пейволлы и логин-стены на любых сайтах, открытых через встроенный браузер</p><p>— В коде заложена инфраструктура GPS-трекинга через OneSignal: опрос координат каждые 4,5 минуты при активном использовании и каждые 9,5 минут в фоне</p><p>— YouTube-плеер загружает HTML-страницу с GitHub Pages мейнтейнера сторонней библиотеки — компрометация аккаунта позволит выполнить произвольный код</p><p>— В продакшен-сборке остались артефакты разработки: URL localhost, IP разработчика и экспортированная Activity</p><h2>Что из себя представляет приложение</h2><p>Приложение Белого дома — по сути, обёртка над WordPress. Весь контент загружается через REST API с эндпоинтами вида /wp-json/whitehouse/v1/*. Вот основные разделы:</p><ul><li>/home — главный экран</li><li>/news/articles — новости</li><li>/wire — лента «The Wire»</li><li>/live — прямые трансляции</li><li>/galleries — фотогалереи</li><li>/issues и /priorities — политические приоритеты</li><li>/achievements — «достижения»</li><li>/media-bias — раздел «предвзятость СМИ»</li><li>/social/x — прокси ленты X/Twitter</li></ul><p>Среди контента — разделы «THE TRUMP EFFECT», «Greatest President Ever!», «Text President Trump» (с номером 45470) и ссылки на TrumpRx.gov, TrumpAccounts.gov, а также форма доноса ICE. Конфиг Expo указывает владельца forty-five-press — судя по всему, это медиа-команда, а не государственное агентство.</p><h2>Инжектор обхода cookie-баннеров и пейволлов</h2><p>Самая неожиданная находка — JavaScript-код, который <b>инжектируется в каждый сайт</b>, открытый через встроенный WebView приложения. Пейволл (paywall) — это платная стена, блокирующая доступ к контенту для неподписчиков. Скрипт использует механизм injectedJavaScript в React Native WebView.</p><p>Что именно скрывает инжектор:</p><ul><li>Cookie-баннеры (по CSS-селекторам *cookie*, *Cookie*)</li><li>GDPR-диалоги согласия (*consent*, *gdpr*, *GDPR*)</li><li>Баннеры OneTrust (*onetrust*)</li><li>Баннеры приватности (*privacy-banner*)</li><li>Логин-стены (*login-wall*, *loginWall*)</li><li>Стены регистрации (*signup-wall*, *signupWall*)</li><li>Апсейл-блоки (*upsell*, *Upsell*)</li><li>CMP-боксы (.cmpboxBtnYes, .cmpbox)</li><li>Любые элементы с aria-label, содержащим «cookie» или «consent»</li></ul><p>Скрипт работает в два этапа. Сначала создаёт CSS-правило display: none !important для всех элементов, соответствующих селекторам. Затем устанавливает MutationObserver, который отслеживает любые изменения DOM и скрывает новые элементы с соответствующими классами. Дополнительно принудительно снимает блокировку прокрутки: body { overflow: auto !important }.</p><p>По сути, приложение Белого дома <b>обходит GDPR-требования и пейволлы</b> на сторонних сайтах. Для государственного приложения это, мягко говоря, неожиданно.</p><h2>Инфраструктура GPS-трекинга</h2><p>В конфиге Expo есть плагин withNoLocation, который, казалось бы, отключает геолокацию. Однако в скомпилированном коде присутствует полноценная инфраструктура трекинга через <b>OneSignal SDK</b>.</p><h3>Константы опроса координат</h3><p>В классе LocationConstants жёстко заданы интервалы опроса:</p><ul><li>FOREGROUND_UPDATE_TIME_MS = 270000 — <b>4,5 минуты</b> при активном использовании</li><li>BACKGROUND_UPDATE_TIME_MS = 570000 — <b>9,5 минут</b> в фоне</li><li>TIME_FOREGROUND_SEC = 300 — 5-минутный порог для переднего плана</li><li>TIME_BACKGROUND_SEC = 600 — 10-минутный порог для фона</li></ul><h3>Как работает трекинг</h3><p>Класс GmsLocationController использует Google Fused Location API. При каждом опросе запрашивает координаты с приоритетом PRIORITY_BALANCED_POWER_ACCURACY (код 102) и устанавливает maxWaitTime в полтора раза больше интервала.</p><p>Перехваченные координаты обрабатывает LocationCapturer: широта, долгота, точность, временная метка, флаг фоновой работы и тип (грубый/точный). Всё сохраняется в PropertiesModel и отправляется на серверы OneSignal (api.onesignal.com).</p><p>Есть и фоновый сервис LocationBackgroundService, который продолжает собирать координаты даже когда приложение свёрнуто.</p><h3>Защита — есть, но условная</h3><p>Формально GPS-трекинг защищён гейтом: флаг _isShared по умолчанию false. Трекинг активируется только после вызова setLocationShared(true). Плагин withNoLocation по идее не должен его включать. Но вся инфраструктура скомпилирована в приложение. Поскольку трекинг реализован в нативном коде (Java), простое OTA-обновление JavaScript-бандла его не активирует. Однако если в приложении есть bridge-вызов к setLocationShared из JS — достаточно серверного конфига для включения без обновления через Google Play.</p><h2>Риски цепочки поставок</h2><h3>JavaScript с чужого GitHub Pages</h3><p>Для YouTube-плеера используется библиотека react-native-youtube-iframe, которая загружает HTML-страницу с GitHub Pages пользователя <b>lonelycpp</b> — мейнтейнера этой библиотеки:</p><p>Если аккаунт lonelycpp на GitHub будет скомпрометирован, злоумышленник сможет подменить эту страницу и <b>выполнить произвольный JavaScript</b> в WebView приложения Белого дома. Это классическая supply-chain атака (атака через цепочку поставок — компрометация стороннего компонента для проникновения в целевую систему). Хостинг ресурсов на GitHub Pages вместо CDN с <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity">Subresource Integrity</a> — плохая практика для любого приложения, тем более государственного.</p><h3>Виджеты Elfsight</h3><p>Приложение загружает JavaScript-платформу Elfsight с CDN:</p><p>Elfsight — это виджет-платформа для социальных сетей. Никакой песочницы — скрипт исполняется в том же контексте, что и основное приложение.</p><h3>Сторонние сервисы вместо госинфраструктуры</h3><p>Ни один из сторонних сервисов не является государственной инфраструктурой:</p><ul><li><b>Mailchimp</b> (whitehouse.us10.list-manage.com) — обработка email-подписок. Адреса пользователей уходят на серверы Mailchimp</li><li><b>Uploadcare</b> (ucarecdn.com) — хостинг контентных изображений через 6 захардкоженных UUID</li><li><b>Truth Social</b> — захардкоженный embed с профилем Трампа, аватаркой со static-assets-1.truthsocial.com и кнопкой «Follow»</li><li><b>Facebook</b> — плагин страницы через iframe facebook.com/plugins/page.php</li></ul><h2>Профилирование пользователей через OneSignal</h2><p><a href="https://documentation.onesignal.com/docs">OneSignal</a> SDK в приложении — это не просто пуш-уведомления. Платформа предоставляет широкие возможности для профилирования пользователей:</p><ul><li>addTag — тегирование пользователей для сегментации</li><li>addSms — привязка номеров телефонов к профилям</li><li>addAliases — кросс-девайсная идентификация пользователей</li><li>addOutcomeWithValue / addUniqueOutcome — отслеживание действий и конверсий</li><li>Полный цикл in-app сообщений: WillDisplay, DidDisplay, WillDismiss, DidDismiss, inAppMessageClicked</li><li>Отслеживание изменений состояния: подписки, разрешения, пользовательский профиль</li></ul><p>Локальная SQLite-база хранит таблицы notification (с полями notification_id, opened, dismissed, title, message, full_data) и in_app_message (с отслеживанием показов и кликов).</p><h2>Артефакты разработки в продакшен-сборке</h2><p>В релизной версии приложения остались следы, которых там быть не должно:</p><ul><li>URL http://localhost:8081/wp-json/whitehouse/v1/galleries?page= — захардкоженный адрес локального дев-сервера</li><li>IP-адрес разработчика 10.4.4.109 — прописан в strings.xml как react_native_dev_server_ip</li><li>Пакеты expo-dev-client, expo-devlauncher, expo-devmenu — средства разработки Expo</li><li>Иконка дев-меню dev_menu_fab_icon.png</li><li>Экспортированная PreviewActivity из Compose UI Tooling — <b>доступна другим приложениям</b> через android:exported="true"</li></ul><p>Экспортированная Activity — это потенциальный вектор атаки. Любое приложение на устройстве может запустить PreviewActivity через Intent.</p><h2>Отсутствие certificate pinning</h2><p>Certificate pinning (закрепление сертификата) — это метод защиты от атак «человек посередине» (MITM), при котором приложение принимает только заранее известные сертификаты сервера. Приложение Белого дома использует стандартный Android Trust Manager <b>без закрепления сертификатов</b>. Это означает, что при использовании скомпрометированного Wi-Fi или корпоративного прокси трафик между приложением и серверами whitehouse.gov может быть перехвачен и прочитан.</p><h2>Разрешения и файловый доступ</h2><p>Манифест запрашивает следующие разрешения:</p><ul><li>INTERNET — доступ к сети</li><li>VIBRATE — вибрация</li><li>ACCESS_NETWORK_STATE — состояние сети</li><li>POST_NOTIFICATIONS — отправка уведомлений</li><li>WAKE_LOCK — предотвращение засыпания</li><li>RECEIVE_BOOT_COMPLETED — автозапуск при загрузке</li><li>C2DM.RECEIVE — облачные пуш-уведомления</li><li>CHECK_LICENSE — проверка лицензии Google Play</li></ul><p>Конфигурация FileProvider описывает путь external-path name="shared" path="." — приложение может <b>предоставлять любые файлы из внешнего хранилища</b> другим приложениям через FileProvider. Это не означает чтение чужих данных, но расширяет поверхность атаки при взаимодействии между приложениями.</p><h2>Полный стек зависимостей</h2><p>Список SDK внутри приложения впечатляет:</p><ul><li><b>Фреймворк:</b> React Native, Expo SDK 54, Hermes JS engine</li><li><b>Пуш/вовлечение:</b> OneSignal, Firebase Cloud Messaging, Firebase Installations</li><li><b>Аналитика:</b> Firebase Analytics, Google Data Transport, OpenTelemetry</li><li><b>Сеть:</b> OkHttp 3, Apollo GraphQL, Okio</li><li><b>Изображения:</b> Fresco, Glide, Coil 3, Uploadcare CDN</li><li><b>Видео:</b> ExoPlayer (Media3), Expo Video</li><li><b>ML:</b> Google ML Kit Vision (сканирование штрих-кодов), модель Barhopper</li><li><b>Криптография:</b> Bouncy Castle</li><li><b>Хранилище:</b> Expo Secure Store, React Native Async Storage</li><li><b>WebView:</b> React Native WebView (с инжектором)</li><li><b>DI:</b> Koin</li><li><b>Сериализация:</b> GSON, Wire (Protocol Buffers)</li><li><b>Лицензия:</b> PairIP license check (Google Play Verification)</li></ul><h2>Что делать пользователям</h2><ol><li>Не открывать ссылки через встроенный браузер приложения — копировать URL и открывать в Chrome/Firefox, где cookie-баннеры отображаются корректно</li><li>Проверить разрешения приложения в настройках Android: Настройки → Приложения → White House → Разрешения — убедиться, что геолокация отключена</li><li>Учитывать, что RECEIVE_BOOT_COMPLETED запускает сервисы приложения при каждой загрузке устройства — даже если вы не открывали приложение</li><li>Для параноиков: использовать отдельный рабочий профиль Android (Настройки → Система → Несколько пользователей) для изоляции</li></ol><h2>Чеклист для разработчиков: что не должно попадать в прод</h2><p>Этот случай — хороший повод проверить собственные приложения. Вот что стоит убрать перед релизом:</p><ol><li>URL localhost и IP-адреса разработчиков — искать в strings.xml, конфигах и коде</li><li>Дев-пакеты (expo-dev-client, devmenu) — исключать из релизных сборок через build flavors</li><li>Экспортированные Activity для отладки — убирать android:exported="true" у дев-компонентов</li><li>Внешние JS-зависимости без SRI — хостить критичные ресурсы на собственном CDN</li><li>Избыточные SDK-модули — если не используете геолокацию, исключить модуль из сборки, а не просто «отключить» флагом</li><li>Широкие пути в FileProvider — ограничивать до конкретных директорий вместо path="."</li><li>Certificate pinning — добавить для всех критичных эндпоинтов через network_security_config.xml</li></ol><h2>Выводы</h2><blockquote>Приложение Белого дома — это React Native обёртка над WordPress с инжектором обхода cookie и пейволлов, инфраструктурой GPS-трекинга через OneSignal и JavaScript-зависимостями с GitHub Pages стороннего разработчика. Без certificate pinning.</blockquote><p>Этот разбор показывает, что даже государственные приложения могут содержать сомнительные практики: от обхода GDPR-баннеров до supply-chain зависимостей от случайных разработчиков. Полная инфраструктура GPS-трекинга, встроенная в код, но формально «отключённая» — это бомба замедленного действия, которая может быть активирована без обновления приложения.</p><p>Оригинальный анализ доступен в <a href="https://blog.thereallo.dev/blog/decompiling-the-white-house-app">блоге thereallo.dev</a>.</p><p>А вы проверяли, какие разрешения у государственных приложений на вашем телефоне?</p>]]></content:encoded>
    </item>
    <item>
      <title>Как решать любые задачи распознавания в миниаппах</title>
      <link>https://tproger.ru/articles/kak-rewat-lyubye-zadachi-raspoznavaniya-v-miniappah</link>
      <comments>https://tproger.ru/articles/kak-rewat-lyubye-zadachi-raspoznavaniya-v-miniappah?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Smart Engines]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-rewat-lyubye-zadachi-raspoznavaniya-v-miniappah</guid>
      <description><![CDATA[<p>Рассказываем, как быстро интегрировать технологии распознавания (OCR) в мессенджеры. Сканирование паспорта и других документов в miniapp</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-rewat-lyubye-zadachi-raspoznavaniya-v-miniappah">Как решать любые задачи распознавания в миниаппах</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 24 Nov 2025 09:20:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всем привет! Как вы уже знаете, мы в <a href="https://smartengines.ru/">Smart Engines</a> вот уже десять лет занимаемся разработкой высокоточных технологий распознавания паспортов и других документов. За это время наша команда перенесла возможности компьютерного зрения практически на все существующие платформы и операционные системы. В последнее время мы наблюдаем всплеск интереса к мини-приложениям в Telegram, Max и других известных мессенджерах. Сегодня рассказываем, как и зачем мы перенесли наш ИИ в миниаппы.</p><h2>В чем секрет привлекательности миниаппов</h2><p>Миниаппы (мини-приложения) – это встроенные в мессенджер веб-приложения, которые позволят воспользоваться тем или иным сервисом без установки отдельных программ. Миниаппы дают возможность пользователям взаимодействовать с цифровыми продуктами, совершать покупки или играть в игры, не покидая интерфейса мессенджера. Такие приложения интегрируются с экосистемой мессенджера, используя его API для авторизации, платежей и уведомлений.</p><p>Популярность миниаппов нетрудно объяснить. Во-первых, это просто удобно: пользователь мгновенно преодолевает путь до услуги или инструмента. Во-вторых, мини-приложения крайне просты в интеграции и подходят для внедрения сервисов, маркетплейсов и других востребованных платформ. В-третьих, разработка миниаппов значительно проще и дешевле, чем создание и дистрибуция классических нативных приложений. Наконец, многие мессенджеры уже имеют встроенные механизмы платежей или поддерживают их через сторонние системы. В результате от использования миниаппов выигрывает и бизнес, и разработчик, и эндюзер.</p><p>Что будущее за интернетом, мы поняли еще несколько лет назад – и сразу адаптировали наши системы для веб-среды. Сделать это нам удалось благодаря технологии WebAssembly (Wasm), с помощью которой можно создавать прогрессивные веб-приложения (PWA). Уже в 2021 году мы смогли добиться видимых результатов: <a href="https://smartengines.ru/smart-idreader/">распознавание паспорта РФ</a>, распознавание документов и QR-кодов, а также сверка лиц стали доступны непосредственно в браузере. Притом все вычисления происходят непосредственно на пользовательском устройстве, а для распознавания не требуется GPU.</p><figure><img src="https://media.tproger.ru/user-uploads/110363/2025-11-21/0943bec6-a805-42de-a2ec-604e83753a09.gif" alt="" /><figcaption>Распознавание паспорта РФ в браузере с помощью Smart ID Engine</figcaption></figure><p>Эти возможности сразу оценили в банках – когда после удаления их приложений из сторов возникла необходимость перенести привычный пользовательский функционал в интернет.</p><h2>Как использовать технологии распознавания в вебе</h2><p>Сегодня наши решения на базе WebAssembly применяются во многих ключевых пользовательских сценариях. Для иллюстрации назовем некоторые из них.</p><ul><li><b>Цифровой онбординг</b>. Распознавание паспорта сегодня позволяет осуществлять онбординг и проверки KYC прямо через браузер. Чтобы открыть счет, оформить продукт или подключить услугу, клиенту нужно просто просканировать документ, или загрузить его изображение из галереи. Благодаря этому отпала необходимость личного посещения офисов или отделений и стало возможно получить доступ к сервисам в любое удобное время. Наша система работает и с паспортами СНГ, мы <a href="https://tproger.ru/articles/kak-vstroit-raspoznavanie-pasporta-sng-v-brauzer">рассказывали</a> об этом <a href="https://tproger.ru/articles/kak-vstroit-raspoznavanie-pasporta-rf-v-brauzer">тут</a>.</li><li><b>Платежи и переводы</b>. Благодаря автоматическому распознаванию стало возможно реализовать ежедневные платежи в онлайн-банках. Пользователь наводит камеру мобильника на QR, номер телефона или квитанцию и может моментально совершить оплату или перевод. Система уверенно работает даже в “экстремальных” случаях: когда треть QR-кода перекрыта или он находится на расстоянии или под углом. Здесь мы <a href="https://tproger.ru/articles/raspoznavanie-bankovskoj-karty-v-brauzere--kak-s-pomoshhyu-tehnologii-webassembly-integrirovat-raspoznavanie-v-veb-stranicu">рассказывали</a>, как в вебе реализовать распознавание банковской карты.</li></ul><ul><li><b>Сервисы бухгалтерии.</b> Сегодня большой популярностью пользуются сервисы аутсорсинга бухгалтерии для обслуживания юридических лиц. В особенности эта возможность полезна для малого бизнеса и индивидуальных предпринимателей – там, где для работы с документами просто нет штатного сотрудника. <a href="https://smartengines.ru/intelligent-document-recognition/">Распознавание документов</a> (акты, УПД, счета-фактуры, формы ТОРГ-12, накладные и другие) позволяет решать задачи ввода и структуризации данных прямо в браузере. Быстро и удобно.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/110363/2025-11-21/56568e26-7d69-450e-97b4-d8a66d6f9e39.gif" alt="" /><figcaption>Распознавание банковской карточки в вебе с помощью Smart Code Engine</figcaption></figure><p>Благодаря возможностям Wasm эту функциональность можно легко перенести и в мессенджер. Некоторые наши клиенты так и поступили. Например, ВТБ уже <a href="https://www.kommersant.ru/doc/7975432">запустил</a> оплату по QR в мессенджере MAX. Говорят, что работает даже на парковке (наша распознавалка уж точно – интернет для этого не требуется).</p><h2>Как это реализовать</h2><p>Перейдем от теории к практике. Как мы писали выше, добавить распознавание в мини-приложения мессенджеров нам удалось благодаря технологии WebAssembly.</p><p>Наш основной продукт – библиотека компьютерного зрения. Поскольку она написана на С++, для переноса кодовой базы в браузер мы используем инструмент emscripten, поддерживаемый google. На выходе мы получаем wasm файл и js файл для работы с ним. Добавляем бизнес логику и распознавание, например, банковской карты реализуется вот так:</p><p>В браузере для захвата изображений с камеры необходимо сначала отрисовать видеопоток на canvas, аналогичным образом клиент может  отрисовывать на canvas  PDF и HEIC, если вам необходимо распознавания фотографии или документа из галереи, например.</p><p>Код выше показывает работу распознавания одного изображения, но если вы в цикле будете передавать изображения с камеры и дальше в spawnedSession.Process(image), то воспользуетесь преимуществами распознавания документов в видеопотоке. <b>Кстати, мы недавно получили на это  патент США</b>.</p><p>Для распознавания в браузере паспорта РФ, реализация очень похожа.</p><p>Указываем режим распознавания и маску документа. Можно указать маску звездочкой “*”, а режим “anydoc”, тогда поиск будет осуществляться по всем доступным документам.</p><p>Следующая настройка позволяет вернуть в результате изображение документа, исправленное по перспективе (утюг) и обрезанным по пропорциям физического документа.</p><p>Результат распознавания представляет из себя объект с именованными полями документа и его изображения (лицо, подпись, шаблон документа). Мы не ограничиваем в структуре ответа, поэтому вы можете сформировать для себя ответ в json в любом удобном виде: с картинками или без, с метаданными, с коэффициентами уверенности и т.п.</p><h2>Напоследок</h2><p>Как можно убедиться, интеграция систем <a href="https://smartengines.ru">Smart Engines</a> в миниаппы осуществляется быстро и абсолютно безболезненно. Гибкость наших технологий позволяет решать любые задачи распознавания хоть в Telegram, хоть в MAX, хоть в любом другом мессенджере с возможностью создания мини-приложений.</p><p>Скорость и качество работы технологий распознавания паспорта и других документов, а также кодифицированных объектов в веб-среде сопоставима с нативными библиотеками. Охват широкой аудитории мессенджеров и положительный пользовательский опыт обеспечены. Smart Engines – распознаем даже на парковке!</p>]]></content:encoded>
    </item>
    <item>
      <title>CameraX 1.5: Как обеспечить совместимость функций камеры в Android-приложениях</title>
      <link>https://tproger.ru/articles/camerax-1-5--kak-obespechit-sovmestimost-funkcij-kamery-v-android-prilozheniyah</link>
      <comments>https://tproger.ru/articles/camerax-1-5--kak-obespechit-sovmestimost-funkcij-kamery-v-android-prilozheniyah?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/camerax-1-5--kak-obespechit-sovmestimost-funkcij-kamery-v-android-prilozheniyah</guid>
      <description><![CDATA[<p>CameraX 1.5 упрощает разработку Android-приложений для камеры с новым API Feature Group. Узнайте, как гарантировать поддержку комбинаций HDR, 60 FPS и стабилизации для создания надежных и мощных приложений.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/camerax-1-5--kak-obespechit-sovmestimost-funkcij-kamery-v-android-prilozheniyah">CameraX 1.5: Как обеспечить совместимость функций камеры в Android-приложениях</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 21 Oct 2025 12:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Эта статья — </i><a href="https://android-developers.googleblog.com/2025/10/beyond-single-features-guaranteeing.html">перевод</a><i> оригинального материала о новых возможностях CameraX 1.5, адаптированный для русскоязычной аудитории с сохранением смысла и стиля оригинала.</i></p><p>Современные приложения для камеры должны сочетать мощные функции: пользователи хотят снимать видео в HDR, с частотой 60 кадров в секунду и стабилизацией изображения — и всё это одновременно. Но как разработчику гарантировать, что устройство поддерживает такую комбинацию?</p><p>Ранее совмещение нескольких функций было рискованным: проверка поддержки каждой функции по отдельности не гарантировала их совместной работы. Это могло привести к нестабильной работе камеры или её полному сбою. Чтобы избежать проблем, разработчики ограничивали функциональность, лишая пользователей с мощными устройствами, такими как Pixel 10 Pro, полноценного опыта.</p><p>CameraX 1.5 решает эту проблему с помощью нового API Feature Group. Теперь вы можете заранее проверить поддержку комбинации функций или задать приоритеты, а библиотека сама подберёт оптимальную конфигурацию для устройства.</p><h2>Что такое CameraX?</h2><p>CameraX — это библиотека Jetpack, которая упрощает разработку приложений для камеры на Android. Она предлагает удобный и единообразный API, совместимый с большинством устройств, начиная с Android 6.0 (API level 23). Для новичков рекомендуем изучить <a href="https://developer.android.com/media/camera/camerax?hl=ru">официальную документацию</a> и пройти практический <a href="https://developer.android.com/codelabs/camerax-getting-started#0">codelab.</a></p><h2>Возможности API Feature Group</h2><p>Новый API позволяет создавать продвинутые приложения для камеры, избегая проблем с совместимостью. Вы сможете:</p><ul><li>Создавать адаптивные интерфейсы: Динамически включать или отключать настройки в зависимости от возможностей устройства. Например, если пользователь включает HDR, опция 60 FPS автоматически станет недоступной, если комбинация не поддерживается.</li><li>Реализовать режим “Максимальное качество”: Укажите желаемые функции с приоритетами, и CameraX выберет лучшую комбинацию, поддерживаемую устройством, без сложной логики.</li><li>Избежать сбоев: Проверка поддержки комбинаций заранее предотвращает ошибки при настройке камеры, обеспечивая стабильную работу.</li></ul><h2>Как это работает: основные компоненты</h2><p>API построен на обновленных классах SessionConfig и CameraInfo.</p><ul><li><b>GroupableFeature:</b> Включает набор функций, таких как HDR_HLG10, FPS_60, PREVIEW_STABILIZATION и IMAGE_ULTRA_HDR. Список пока ограничен из-за вычислительных требований, но будет расширен в следующих версиях.</li><li><b>Новые параметры SessionConfig:</b>requiredFeatureGroup: Для обязательных функций. Если комбинация не поддерживается, вызов bindToLifecycle завершится ошибкой IllegalArgumentException.preferredFeatureGroup :Для необязательных функций. Укажите список с приоритетами, и CameraX выберет лучшую комбинацию.</li><li><b>requiredFeatureGroup:</b> Для обязательных функций. Если комбинация не поддерживается, вызов bindToLifecycle завершится ошибкой IllegalArgumentException.</li><li><b>preferredFeatureGroup: </b>Для необязательных функций. Укажите список с приоритетами, и CameraX выберет лучшую комбинацию.</li><li><b>CameraInfo#isFeatureGroupSupported():</b> Метод для проверки поддержки комбинации функций. Передайте SessionConfig, чтобы узнать, поддерживается ли набор функций, и настройте интерфейс соответственно.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-21/2ca60fbb-4915-40de-945d-6469aeccd243.png" alt="" /></figure><h2>Практическое применение</h2><p>Рассмотрим два сценария использования API.</p><h3>Сценарий 1: Режим "Максимальное качество"</h3><p>Чтобы автоматически включить лучшие функции, задайте список приоритетов в preferredFeatureGroup. Например, приоритет: HDR, затем 60 FPS, затем стабилизация. CameraX сам выберет оптимальную комбинацию.</p><p>CameraX проверит комбинации в порядке приоритета, выбрав первую поддерживаемую:</p><ol><li>HDR + 60 FPS + Стабилизация</li><li>HDR + 60 FPS</li><li>HDR + Стабилизация</li><li>HDR</li><li>60 FPS + Стабилизация</li><li>60 FPS</li><li>Стабилизация</li><li>Ничего</li></ol><h2>Сценарий 2: Адаптивный интерфейс</h2><p>Для интерфейса, реагирующего на выбор пользователя, проверяйте неподдерживаемые комбинации:</p><p>Интегрируйте логику в интерфейс для отключения неподдерживаемых опций и привязки стабильной конфигурации:</p><p>Ознакомьтесь с тестовым приложением CameraX для примера реализации (не для продакшена).</p><p>API Feature Group устраняет неопределенность при работе с продвинутыми функциями камеры, позволяя создавать надежные приложения. Он доступен как экспериментальный в CameraX 1.5 и станет стабильным в версии 1.6 с дополнительными улучшениями.</p>]]></content:encoded>
    </item>
    <item>
      <title>Google выпустила октябрьское обновление Pixel — оно исправляет шесть раздражающих багов с экраном и системой</title>
      <link>https://tproger.ru/news/google-vypustila-oktyabrskoe-obnovlenie-pixel---ono-ispravlyaet-west-razdrazhayushhih-bagov-s-ekranom-i-sistemoj</link>
      <comments>https://tproger.ru/news/google-vypustila-oktyabrskoe-obnovlenie-pixel---ono-ispravlyaet-west-razdrazhayushhih-bagov-s-ekranom-i-sistemoj?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-vypustila-oktyabrskoe-obnovlenie-pixel---ono-ispravlyaet-west-razdrazhayushhih-bagov-s-ekranom-i-sistemoj</guid>
      <description><![CDATA[<p>Google выпустила октябрьское обновление Pixel для всех устройств на Android 16. Оно устраняет шесть заметных багов — от мерцания экрана до проблем с Media Output Switcher и виджетами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-vypustila-oktyabrskoe-obnovlenie-pixel---ono-ispravlyaet-west-razdrazhayushhih-bagov-s-ekranom-i-sistemoj">Google выпустила октябрьское обновление Pixel — оно исправляет шесть раздражающих багов с экраном и системой</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 10 Oct 2025 13:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Google<a href="https://www.techradar.com/phones/google-pixel-phones/a-big-google-pixel-software-update-is-rolling-out-now-and-it-promises-to-fix-6-annoying-bugs-and-display-issues"> начала развёртывать</a> октябрьское обновление для устройств Pixel. Обновление доступно для всех смартфонов и планшета компании, работающих на Android 16 — от Pixel 7 до последней линейки Pixel 10, включая Pixel Fold и Pixel Tablet. Новых функций апдейт не приносит, зато устраняет шесть проблем, которые могли доставлять пользователям заметный дискомфорт.</p><h2>Что исправили</h2><p>Две ключевые правки касаются дисплея. Первая устраняет мерцание экрана и внезапные выключения устройства в определённых сценариях. Вторая — проблему с «замершим» или размытым изображением.</p><p>Системные баги тоже не обошли стороной. Google устранила редкую ошибку, вызывавшую нестабильность системы, а также артефакт полупрозрачного фона, который мог «зависать» после открытия камеры.</p><p>Отдельно компания починила отображение статуса фонарика в виджете At a Glance и баг, из-за которого могла происходить аварийная перезагрузка при старте или остановке трансляции через Media Output Switcher.</p><h2>Почему стоит установить обновление</h2><p>Многие из этих багов проявлялись не у всех пользователей и не на постоянной основе. Но именно такие мелкие глюки чаще всего раздражают в повседневном использовании — и их устранение улучшает общее впечатление от системы. Поэтому обновление стоит установить даже тем, кто не сталкивался с проблемами напрямую.</p>]]></content:encoded>
    </item>
    <item>
      <title>Android ждут большие перемены: Верховный суд отказал Google в приостановке решения по делу Epic</title>
      <link>https://tproger.ru/news/android-zhdut-bolwie-peremeny--verhovnyj-sud-otkazal-google-v-priostanovke-reweniya-po-delu-epic</link>
      <comments>https://tproger.ru/news/android-zhdut-bolwie-peremeny--verhovnyj-sud-otkazal-google-v-priostanovke-reweniya-po-delu-epic?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/android-zhdut-bolwie-peremeny--verhovnyj-sud-otkazal-google-v-priostanovke-reweniya-po-delu-epic</guid>
      <description><![CDATA[<p>Верховный суд США отказал Google в приостановке запрета по делу Epic. До 22 октября компания должна разрешить внешние платежи и ослабить правила Play — иначе нарушение закона.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/android-zhdut-bolwie-peremeny--verhovnyj-sud-otkazal-google-v-priostanovke-reweniya-po-delu-epic">Android ждут большие перемены: Верховный суд отказал Google в приостановке решения по делу Epic</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Epic Games]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 09 Oct 2025 12:36:35 GMT</pubDate>
      <content:encoded><![CDATA[<p>Верховный суд США <a href="https://www.theverge.com/news/793610/google-epic-android-supreme-court-stay-denied">отклонил</a> просьбу Google приостановить действие постоянного судебного запрета по делу Epic Games v. Google. Это означает, что у Google осталось чуть больше двух недель, чтобы перестроить правила экосистемы Android и выполнить предписания суда — иначе компания рискует быть признанной нарушившей закон. Крайний срок, на который указывает Epic, — 22 октября 2025 года.</p><p>Напомним, что в 2023 году жюри признало, что практики Google вокруг Play нарушают антимонопольное законодательство. В октябре 2024 г. судья Донато утвердил трёхлетний запрет, обязав Google открыть Play для конкуренции. Девятый округ летом 2025 г. подтвердил решение.</p><p>Сейчас судьи отклонили ходатайство Google о временной заморозке части судебного запрета. Верховный суд не стал замораживать ключевые части запрета судьи Джеймса Донато, которые были подтверждены Апелляционным судом Девятого округа летом.</p><p>Google планирует подать полноценную жалобу в Верховный суд до 27 октября, но это  будет уже после даты исполнения. На данный момент запрет действует, и Google обязан начать исполнение.</p><h2>Что Google должен сделать уже в октябре</h2><p>Согласно приказу суда и его трактовке в материалах дела и СМИ, Google обязан:</p><ul><li>Прекратить требовать от разработчиков обязательного использования Google Play Billing.</li><li>Разрешить разработчикам информировать пользователей (включая ссылки из приложений) о внешних способах оплаты без дополнительных комиссий и отпугивающих экранов.</li><li>Открыть путь к распространению приложений вне Play Store (включая указание способов загрузки).</li><li>Разрешить разработчикам устанавливать собственные цены.</li><li>Прекратить выплаты/бонусы производителям устройств, операторам и разработчикам за эксклюзивы в Play или предустановку.</li><li>Сотрудничать с Epic в рамках совместного технического комитета по безопасному доступу конкурирующих магазинов к каталогу Play.</li></ul><p>Google публично сообщил, что выполнит юридические обязательства, параллельно продолжая попытки обжаловать запрет в Верховном суде. Компания предупреждает о рисках для безопасности пользователей при ослаблении контроля в платежах и дистрибуции.</p>]]></content:encoded>
    </item>
    <item>
      <title>Запасы iPad Pro и MacBook Pro стремительно сокращаются — Apple готовит крупное обновление линеек</title>
      <link>https://tproger.ru/news/zapasy-ipad-pro-i-macbook-pro-stremitelno-sokrashhayutsya---apple-gotovit-krupnoe-obnovlenie-lineek</link>
      <comments>https://tproger.ru/news/zapasy-ipad-pro-i-macbook-pro-stremitelno-sokrashhayutsya---apple-gotovit-krupnoe-obnovlenie-lineek?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/zapasy-ipad-pro-i-macbook-pro-stremitelno-sokrashhayutsya---apple-gotovit-krupnoe-obnovlenie-lineek</guid>
      <description><![CDATA[<p>На фоне снижения запасов iPad Pro и MacBook Pro аналитики ожидают скорый анонс новых устройств Apple — вероятно, уже в октябре.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/zapasy-ipad-pro-i-macbook-pro-stremitelno-sokrashhayutsya---apple-gotovit-krupnoe-obnovlenie-lineek">Запасы iPad Pro и MacBook Pro стремительно сокращаются — Apple готовит крупное обновление линеек</a>»</p>]]></description>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Смартфоны]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 08 Oct 2025 13:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Apple, похоже, готовится к новому раунду анонсов уже в ближайшие недели. Запасы iPad Pro и MacBook Pro стремительно уменьшаются, что традиционно сигнализирует о скором выпуске обновлённых моделей.</p><p>По <a href="https://x.com/markgurman/status/1975306847302394349">данным</a> Bloomberg и источников в цепочке поставок, новые версии iPad Pro и MacBook Pro будут представлены в конце октября, а вместе с ними ожидается и обновлённый Apple Vision Pro.</p><h2>Дефицит в онлайн-магазине Apple намекает на скорое обновление</h2><p>Как <a href="https://x.com/markgurman/status/1975306847302394349">отметил</a> Марк Гурман, сроки доставки некоторых конфигураций iPad Pro M4 на сайте Apple уже достигают двух–трёх недель — особенно в версиях с большим объёмом памяти и дисплеем OLED.</p><figure><img src="https://media.tproger.ru/user-uploads/116654/2025-10-08/25619838-edd2-4bc9-952c-1eb275f26d7a.png" alt="" /></figure><p>Аналогичная ситуация и с MacBook Pro на M4: большинство конфигураций доступны, но базовая модель M4 временно исчезла из каталога и, по данным источников, вернётся в продаже ближе к концу месяца.</p><p>Такое поведение запасов обычно предшествует официальному анонсу, поскольку Apple сокращает поставки старых моделей перед запуском новых.</p><h2>Apple Vision Pro и другие обновления</h2><p>Ожидается, что Apple Vision Pro получит незначительное обновление характеристик — улучшение автономности, оптики и, возможно, новый вариант с увеличенным объёмом памяти.</p><p>Однако поставки гарнитуры остаются стабильными, что указывает на то, что компания не планирует кардинальных изменений в линейке до 2026 года.</p><p>Также до конца года Apple намерена представить:</p><ul><li>AirTag 2 с улучшенным чипом Ultra Wideband;</li><li>Apple TV 4K (A17 Pro) с поддержкой повышенной частоты кадров;</li><li>HomePod mini 2 с новым звуковым процессором.</li></ul><h2>Когда ждать анонса</h2><p>Apple традиционно проводит осенние презентации в середине или конце октября. В последние годы компания чередует полноправные мероприятия с видеотрансляцией и тихие релизы через пресс-релизы.</p><p>Пока неизвестно, выберет ли Тим Кук сцену в Apple Park или ограничится публикацией новинок на сайте, но одно ясно — период ожидания подходит к концу.</p><p>«Изменения в запасах почти всегда означают обновление оборудования. Похоже, до следующего раунда объявлений от Apple осталось всего несколько дней», — отмечает Гурман.</p><h2>Что думают пользователи</h2><p>Многие поклонники бренда в соцсетях признаются, что отложили покупку iPad Pro и MacBook Pro, ожидая выхода новых версий.</p><p>Если слухи подтвердятся, в продаже появятся устройства с чипом M4 Ultra, дисплеями OLED нового поколения и улучшенным время автономной работы.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что нового в октябрьских обновлениях Google System</title>
      <link>https://tproger.ru/articles/chto-novogo-v-oktyabrskih-obnovleniyah-google-system</link>
      <comments>https://tproger.ru/articles/chto-novogo-v-oktyabrskih-obnovleniyah-google-system?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-novogo-v-oktyabrskih-obnovleniyah-google-system</guid>
      <description><![CDATA[<p>Октябрьские обновления Google System приносят Play services v25.39 и Play Store v48.3: Quick Start для детских аккаунтов, улучшенный фильтр чувствительного контента в видео, апгрейд «Не беспокоить за рулём» и обновлённые иконки Play Protect. Как проверить версии и обновиться.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-novogo-v-oktyabrskih-obnovleniyah-google-system">Что нового в октябрьских обновлениях Google System</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Смартфоны]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 08 Oct 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<ul><li>Google Play services v25.39 (06.10.2025): улучшения для семейного контроля и аккаунтов под присмотром, новый дизайн аватарок, API для разработчиков, более умный фильтр «Чувствительный контент» в Google Messages для видео, апгрейд режима «Не беспокоить за рулём».</li></ul><ul><li>Google Play Store v48.3 (06.10.2025): обновленные иконки в некоторых уведомлениях Google Play Protect на телефонах, ПК, ТВ, Auto.</li></ul><p>Важно: функция в релиз-нотах не гарантирует её мгновенную доступность на всех устройствах. Google часто вводит функции постепенно, «поэтапно разворачивая» (staged rollout).</p><h2>Google Play services v25.39</h2><p>Через APKMirror задокументирован выпуск версии 25.39.30 (beta).</p><p>Разработчики из Google усилили возможности управления аккаунтами — теперь система работает гибче с профилями под присмотром, упрощая родительский контроль и настройку устройств для детей. Темы, используемые в интерфейсах поднадзорных аккаунтов, получили визуальное обновление и стали единообразнее, чтобы пользователи лучше ориентировались в настройках.</p><p>Отдельного внимания заслуживает и визуальная часть — привычные аватарки теперь оформлены в новом, более современном и чистом стиле. Для разработчиков Google добавила свежие инструменты и API, которые позволяют глубже интегрировать функции управления аккаунтами и безопасности в сторонние приложения, обеспечивая плавную работу и более высокий уровень конфиденциальности.</p><p>Особое улучшение касается защиты и безопасности: функция Sensitive Content Warnings в Google Messages научилась распознавать нежелательный контент не только на фотографиях, но и в видеороликах — шаг, который повышает безопасность общения в мессенджере. Параллельно был переработан и режим Driving Do Not Disturb — он стал работать стабильнее, меньше отвлекать водителя и лучше подстраиваться под дорожные ситуации.</p><p>В более ранних версиях (v25.37) Google уже вводил исправления стабильности при управлении аккаунтами, улучшения соединений устройств и дополнения к API. Droid Life. Версия 25.39, скорее, эволюция этих функций, сглаживающая баги и добавляющая новые интерфейсы.</p><h2>Google Play Store v48.3</h2><p>В релиз-нотах отмечено, что в уведомлениях Google Play Protect обновлены иконки на всех поддерживаемых платформах: Auto, ПК, телефон, ТВ.</p><h3>Безопасность: Android Security Bulletin (сентябрь 2025)</h3><p>Параллельно с системными обновлениями Google продолжает выпускать ежемесячные безопасностные бюллетени Android (Android Security Bulletin).</p><p>В бюллетене за сентябрь 2025 описано множество уязвимостей — например:</p><ul><li>CVE-2025-48543 — уязвимость в Android Runtime, позволяющая эскалацию привилегий, без необходимости дополнительного запуска кода.</li><li>Несколько уязвимостей в Framework и ядре классифицируются как высокие (High) — могут дать локальное повышение привилегий.</li><li>Устройства с Android 10 и выше могут получить обновления безопасности через Google Play system updates.</li></ul><h2>Что проверять и как обновиться?</h2><p>С учётом подтверждённых данных, рекомендуем:</p><ul><li>Проверять на вашем устройстве версии:<br />Google Play services — должна быть 25.39.x (или выше, если уже вышли патчи).<br />Google Play Store — версия v48.3 или выше.<br />Google Play system update (в Настройках телефона) — наличие новых системных патчей безопасности.</li><li>Google Play services — должна быть 25.39.x (или выше, если уже вышли патчи).</li><li>Google Play Store — версия v48.3 или выше.</li><li>Google Play system update (в Настройках телефона) — наличие новых системных патчей безопасности.</li><li>Если устройство не получает обновления автоматически — попробуйте вручную запустить обновление Google Play services через доступные источники (Play Store, Google Play System Update).</li><li>Следите за бюллетенями безопасности Android: версия безопасности (security patch level) должна быть актуальной.</li><li>У устройств с более старыми версиями Android (менее Android 10) возможности получать обновления безопасности через Google System могут быть ограничены.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Зачем нужны приложения, можно ли писать код на смартфоне — ответы эксперта на самые безумные вопросы о мобильной разработке</title>
      <link>https://tproger.ru/articles/zachem-nuzhny-prilozheniya--pochemu-android-ne--ajfon--mozhno-li-pisat-kod-na-smartfone---otvety-eksperta-na-samye-bezumnye-voprosy-o-mobilnoj-razrabotke</link>
      <comments>https://tproger.ru/articles/zachem-nuzhny-prilozheniya--pochemu-android-ne--ajfon--mozhno-li-pisat-kod-na-smartfone---otvety-eksperta-na-samye-bezumnye-voprosy-o-mobilnoj-razrabotke?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zachem-nuzhny-prilozheniya--pochemu-android-ne--ajfon--mozhno-li-pisat-kod-na-smartfone---otvety-eksperta-na-samye-bezumnye-voprosy-o-mobilnoj-razrabotke</guid>
      <description><![CDATA[<p>Ответы на самые странные и частые вопросы о мобильной разработке: в чем разница между iOS и Android, почему нужно платить $99 для тестирования на iPhone и можно ли писать код на смартфоне. Обсуждаем Flutter, нативную разработку, пуши и безумные требования менеджеров с экспертом Аней Жарковой. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zachem-nuzhny-prilozheniya--pochemu-android-ne--ajfon--mozhno-li-pisat-kod-na-smartfone---otvety-eksperta-na-samye-bezumnye-voprosy-o-mobilnoj-razrabotke">Зачем нужны приложения, можно ли писать код на смартфоне — ответы эксперта на самые безумные вопросы о мобильной разработке</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 18 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В юмористическом <a href="https://www.youtube.com/watch?v=q0PtYxsg03U">выпуске</a> подкаста «Спроси айтишника» <a href="https://darovska.com/">Маша Даровская</a>, шеф-редактор Tproger, автор телеграм-канала <a href="https://t.me/MashaDevRel">«Деврелишна»</a> и Аня Жаркова, руководитель мобильной разработки в USETECH, ищут ответы на самые странные и неожиданные вопросы подписчиков.</p><p><b>Смотреть подкаст на <a href="https://www.youtube.com/watch?v=q0PtYxsg03U">YouTube</a>, в <a href="https://vk.com/video-30666517_456246783">VK</a></b>.</p><p>Анна Жаркова пишет нативные приложения под iOS и Android и кросс-платформенные приложения на Xamarin, Xamarin.Forms и Kotlin Multiplatform. Написала книгу о Kotlin Multiplatform, которая выходит в сентябре. Пишет статьи, выступает на конференциях и митапах. Член программного комитета Mobius, CodeFest, «Стачка». Увлекается живописью и участвует в выставках.</p><p>Поговорили о безумных проджект-менеджерах, войне Android и iOS, о том, почему ИИ не заменит программистов, и что делать, если вам позарез нужно установить ВСЕ приложения из магазина. Добро пожаловать в абсурдный и увлекательный мир мобильных разработчиков!</p><h2>О смысле мобильных приложений</h2><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-09-01/5b4fca7c-0c3e-406b-982a-b7cef90e550f.jpg" alt="" /></figure><p><i>Какие нам вопросы задали наши прекрасные подписчики. Первый вопрос: «А зачем вообще нужны мобильные приложения? У меня вот компьютер, а у друга ноутбук». </i></p><p>Ну, да, вопросы бывают разные, мы к этому привыкли. Начнём с того, что это, конечно, здорово, что есть компы и ноутбуки, но с собой человек, скорее всего, носит именно смартфон, а не компьютер или ноутбук.</p><p>Если попробовать ответить на этот вопрос серьёзно: мобильное устройство — это не просто «звонилка», это ещё и полезные клиентские приложения, которые позволяют получить быстрый доступ к информации или услугам. Конечно, это всё можно сделать и с компьютера, но главное назначение мобильного устройства — дать вам максимум возможностей при минимуме затрат: ресурсов, времени и с минимальным размером самого устройства.</p><p><i>Ну да, взять то же банковское приложение, оплату с телефона… Ребята, с компьютером не походишь, чтобы это всё делать. Давай поедем к следующему. Можно делать так, чтобы приложение ставилось не из App Store?</i></p><p>Конечно. Если это приложение под Android, оно будет ставиться через Google Play, а также есть специальные магазины, например, AppGallery для Huawei или RuStore. Также у некоторых вендоров есть свои маркеты, например, у Samsung.</p><p>Если же говорить про iOS, то тут всё строго с App Store. Но кто знает, возможно, в будущем появятся и кастомные магазины для iOS. Хотелось бы, чтобы поскорее.</p><p><i>А скажи, пожалуйста, насколько широкий ассортимент приложений в этих альтернативных магазинах? У меня всё на яблоках, я не особо разбираюсь, что там происходит, особенно с Huawei, с RuStore. Можешь рассказать, насколько там всё хорошо или плохо?</i></p><p>Я думаю, если говорить про приложения, которые имеют ограничения в загрузке в App Store, они, в принципе, есть и в Google Play, но свободно грузятся в остальные магазины. Особых ограничений нет. Конечно, бывают ситуации, когда приложение пропадает из магазина по чьей-то жалобе. Но выбор приложений довольно большой. Например, в компании, где я работаю, мы свободно загружаем наши приложения в разные магазины, и всё в порядке.</p><p><i>Супер. А насколько вообще отличается разработка для, скажем, Huawei от классической Android? Там есть какая-то своя специфика, или всё тоже самое? Может, свой стэк?</i></p><p>Плюс-минус как Android, но есть определённые различия. У них своя среда разработки, свои сервисы, дополнительные технологии. Тема довольно обширная, но в принципе, всё это плюс-минус то же самое, и Android-разработчику освоить это несложно. Главное — поставить нужную IDE (Интегрированную среду разработки) и взять устройство для отладки.</p><p>А какие там специфические IDE?</p><p>Да, там есть, по-моему, собственная IDE, но я скажу честно, я с ней особо не работала. Я сейчас копаю немножко в другом направлении.</p><h2>О фантастическом девайсе</h2><p><i>«Пользователю позарез нужно установить вообще все мобильные приложения, которые существуют на маркете. Всё использует, всё жизненно важно. Вопрос: что представлял бы из себя девайс, который смог бы это выдержать?» Я с трудом представляю, интересно твоё мнение.</i></p><p>Что ж, ну, возникает вопрос: наверное, у этого пользователя очень много денег, он может позволить себе все платные приложения. Порадуемся за него!</p><p>Но если говорить про аппарат, то это должен быть какой-то супермощный с параметрами из серии «Чёрная дыра». Современное приложение, тот же самый «суперап», который объединяет кучу сервисов, может занимать сотни мегабайт. Обычное банковское приложение — тоже несколько сотен мегабайт.</p><p>Поэтому если у пользователя есть какой-то супермощный компьютер, возможно, он причастен к каким-то научным, суперсекретным, может быть, даже военным разработкам, и у него память на каком-то кристалле из чёрной дыры… то, возможно, это и сработает.</p><p>В реальности, конечно, это похоже на шутку «я сейчас все игры установлю». Но ни одного нормального девайса даже с супервозможностями не хватит. Сейчас максимум — это 512 ГБ внутреннего хранилища, часто без возможности расширения. Но даже с картой памяти вам точно не хватит.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-09-01/d12496af-061b-410d-af88-6a36063e3ef1.jpg" alt="" /></figure><p><i>Да, вот у меня даже на айфоне он сгружает в облако всё, что не нужно. И у меня стоит довольно много приложений, в том числе детские, с ИИ, чтобы звёзды смотреть, цветы диагностировать… Куча странных приложений, которые я использую очень ситуативно. Я не представляю, сколько надо времени, чтобы скачать себе даже десятую часть всех существующих приложений в Store. Ну, это невозможно.</i></p><p>Ну, может, человек решил стать суперблогером по приложениям, решил сделать краш-тест всего маркета и всех возможных аппаратов. Удачи ему и успехов.</p><h2>О разработке на мобильном телефоне</h2><p><i>«Раз для компов проги пишут на компах, разве не уместнее для мобилок писать на мобилках?»</i></p><p>Кстати, очень хороший вопрос. На заре энтузиазма, когда только появлялись смартфоны, все считали: «Сейчас они будут настолько мощные, что не понадобится настоящий комп, чтобы писать программы».</p><p>Но это столкновение с реальностью. Девайс довольно слабенький, и ресурсов не хватит. Это сложный процесс: чтобы скомпилировать приложение, необходимо несколько гигабайт свободной памяти и много вычислительных ресурсов.</p><p>Конечно, на мобильном устройстве можно скомпилировать какие-то простые, легковесные приложения, например, на скриптовых языках. Есть такие технологии. И в том числе можно использовать мобильные устройства как инструмент для разработки. У того же GitHub такое было.</p><p>Но честно говоря, если есть желание что-то писать на мобильном аппарате, то лучше работать с облачными средами разработки. Потому что даже на компе та же Android Studio может кушать очень много памяти и сохранять много кэша. Облачная среда, конечно, в какой-то степени небезопасна, потому что вы что-то загружаете на сторонние сервера. Но если это ваше собственное, настроенное место, то вполне можно по удалёнке получать доступ. Другой вопрос, что вам тогда необходим хороший интернет.</p><p><i>Ну, ты знаешь, у меня вот был странный опыт. Когда я училась на Python-разработчика, у меня был старый макбук. Он у меня сдох через полгода, просто потому что не вывез: ты ставишь все эти библиотеки, прописываешь команды, подгружаешь версии… В общем, у меня просто сдох жесткий диск. Поэтому да, хороший вопрос. Не всякий даже ноут это выдержит, как выяснилось.</i></p><p>Более того, даже для сборки мощных мобильных приложений на Mac сейчас часто требуется 32, а то и 64 ГБ памяти. Были бы, конечно, такие крутые мобильные устройства, полноценные мини-компьютеры… Но это уже из области фантазии наших зрителей.</p><h2>О Keycloak и мобильной безопасности</h2><p><i>Так, следующий вопрос. «Подскажите, кто-нибудь пользуется Keycloak для SSO (стандарт единого входа)?»</i></p><p>Интересный, конечно, вопрос про Keycloak. Я слышала такое слово от бэкендеров — это механизм, который используют для безопасности на бэкенд-части. Но что примечательно, с вопросом про Keycloak часто приходят именно к нам, мобильным разработчикам.</p><p>Тебе говорят слово «Keycloak», и ты думаешь: «Хорошо, а я тут причём?» Так что да, это довольно часто задаваемый не по адресу вопрос. Ответ — спросите у аналитика или у бэкенд-разработчика.</p><p><i>А как ты думаешь, почему к мобильным разработчикам приходят с этим вопросом?</i></p><p>Я думаю, потому что говорят, что это какой-то механизм, необходимый для безопасной разработки. И часто люди путают, с чьей стороны должно быть внедрение того или иного решения.</p><p>Keycloak — это система идентификации и управления доступом с единой точкой входа. Мобильное приложение — это фронтенд-клиент, который обращается к API вашего сервера. Поэтому вся система должна быть реализована на бэкенде. Мобильщик будет лишь использовать готовое API. Если вам говорят, что вы должны это сделать сами на мобилке, ну тогда вы, получается, не мобильщик, а фуллстэк. Я вас поздравляю!</p><h2>О выборе технологии: натив vs Flutter</h2><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-09-01/1a7ae6af-57d6-433a-8a89-adddc189ab51.png" alt="" /></figure><p><i>Так, переходим к следующему вопросу. «Стоит ли погружаться в нативную разработку или сразу учить Flutter?»</i></p><p>Очень хороший вопрос. Flutter — это отдельная технология со своим языком Dart. Но тут есть маленький нюанс. Да, Flutter — технология отличная, но вы разрабатываете под Android и iOS, и поэтому вам необходимы знания нативной разработки, хотя бы в минимальном объёме. Есть проекты, где пишут код Flutter-разработчики, но от них требуют хороших, крепких знаний по нативу хотя бы одной платформы.</p><p>Когда у вас есть такой базис, вы понимаете, что вам необходимо сделать: как работать с жизненным циклом, с памятью, с сенсорами, с моделью разрешений. Всё это — знания натива, и без этого не обойтись. Это необходимо.</p><p><i>То есть, сначала учим какую-то одну платформу как базу, а потом уже идём во всякие Flutter’ы с ними.</i></p><p>Безусловно. Вы исходите из того, что пишете под Android (или iOS). И уже смотрите: как я могу это делать? Я могу писать на нативе, а могу на Flutter’е. Но Flutter всё равно будет опираться на натив, поэтому получается такая ступень по изучению технологий.</p><h2>О роли ИИ в мобильной разработке</h2><p><i>Что сейчас можно сделать с помощью ИИ в мобильной разработке?</i></p><p>Довольно много. Но тут возникает уточняющий вопрос: использовать ИИ как инструмент или внедрять ИИ в приложение? Есть возможности по внедрению ИИ, чтобы оно что-то генерировало в вашем приложении: умные ассистенты, генерация изображений и т.д.</p><p>Есть также возможности с помощью ИИ генерировать код. Но это явно не для начинающих. Почему? Потому что ошибок в таком коде довольно много. Чтобы этот код работал, нужен человек, который понимает, как такой код писать самому. То есть ИИ может помочь сократить время, выступить инструментом генерации, но не более.</p><p>К тому же сейчас есть технологии, которые позволяют разместить у себя модель нейросети, обучить её под свои нужды и использовать. Да, это дорого и ресурсоёмко, но возможность есть. В целом, возможности широкие, но они не заменят нормального разработчика. Все помнят мем про кружку, которую ИИ не догадался перевернуть? Это показательно.</p><p><i>Вопрос от этого же задавателя вопросов. «Используют ли Kotlin Multiplatform React Native (технологии для кроссплатформенной разработки) и так далее? Если да, бывают ли задачи с адаптацией под мобильный веб?»</i></p><p>Хм, хороший вопрос. Если говорить про работу с искусственным интеллектом в контексте этих технологий… Вы можете попробовать сгенерировать код под любую платформу. Для этого нужно писать много промтов и иметь много ресурсов для обучения модели.</p><p>Но если говорить о продакшене, то тут имеет смысл использовать только то, что безопасно. Есть компании, которые разрабатывают свои инструменты на основе LLM-моделей, как, например, Яндекс. Есть те, кто берут открытые модели, разворачивают их и используют.</p><p>А вот публичные сервисы вроде ChatGPT я не рекомендую использовать для продакшена. Они могут залогировать ваш код и потом выдать его кому-то. Это крайне небезопасно. В прошлом или позапрошлом году был скандал, когда ChatGPT выдавал куски кода одной компании, вплоть до креденшиалов. Так что в продакшене — только собственные решения.</p><h2>О сегментации рынков Android и iOS</h2><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-09-01/401fce44-6d95-4999-b01d-dbe53c1609ca.jpg" alt="" /></figure><p><i>Насколько реально сегментированы рынки Android и iOS?</i></p><p>Если говорить про iOS, то тут всё просто: один вендор — Apple. Вся экосистема: iOS, iPadOS, watchOS, специальная OS для авто. Минимальная сегментация. А вот с Android вендоров много. Это и гиганты типа Samsung, большой кусок рынка у Xiaomi и её суббрендов вроде Poco или Redmi.</p><p>Но стоит не забывать, что есть страны Латинской Америки, Африки, Юго-Восточной Азии, где ситуация с разработкой и устройствами совершенно другая, чем в Штатах, Европе или СНГ. Там до сих пор используют такие технологии, как Cordova, PhoneGap, потому что это дёшево, а iPhone там очень непопулярны — банально не по карману.</p><h2>О самых сложных задачах</h2><p><i>Какие задачи в мобильной разработке самые сложные?</i></p><p>Всё зависит от того, что считать задачами. Есть интересные фичевые задачи, которые дают возможность разрабатывать что-то новое. Есть рутинные, неинтересные, но простые задачи, которые просто отнимают много времени.</p><p>А есть задачи-челленджи, когда ты создаёшь что-то на основе сложной библиотеки или, наоборот, из простых исходников делаешь суперсложное решение — например, для работы со звуком, видео, сканеры и т.д.</p><p>Но многие скажут, что самая сложная задача — это работа с заказчиком, с ТЗ, работа между командами. То есть, есть элемент технического челленджа, а есть — психологического. Разработчику надо уметь преодолевать и те, и другие, потому что это позволяет потом работать проще и интереснее.</p><h2>Об ассемблере в 2025 году</h2><p><i>«Какое место в Android и, видимо, iOS-разработке занимает ассемблер в 2025 году?» Вообще ассемблер и мобильная разработка, мне кажется, две немножко разные сущности.</i></p><p>Честно говоря, я не пользовалась ассемблером для мобильной разработки. Если у того, кто это задал, есть наработки, пусть пришлёт, посмотрим. Или придёт на Mobius и расскажет про это — у нас ещё открыт CFP. Если это будет супер-хардовый доклад, это будет здорово!</p><p>Например, пару лет назад у нас был человек, который встроил Doom (а он написан на ассемблере) в SwiftUI. То есть низкоуровневое что-то встраивается через C, C++ (например, через NDK для Android). Всё это можно сделать.</p><p>Но возникает вопрос: зачем? Потому что есть решение «потому что могу» — и это круто. А есть принцип разумной достаточности: не надо усложнять решение там, где это не нужно. Мы экономим и делаем оптимальной не только архитектуру приложения, но и время разработчика. Так что, отвечая на вопрос: есть Doom UI. Можете посмотреть: где только Doom не запускали.</p><h2>О дизайне под Android и iOS</h2><p><i>«Почему менеджеры и дизайнеры всегда хотят, чтобы на Android всё выглядело точно так же, как на iOS?»</i></p><p>Я думаю, потому что это красиво. У iOS долгое время очень много вкладывалось в визуал, в неповторимые жесты и систему. Это было просто супер. Затем Google решил догнать. Сначала появился Material Design, потом более продвинутый. И теперь, если посмотреть на доклады Google и Apple, можно заметить, что в какой-то момент предложения инженеров Google превращают Android в iOS, а у iOS есть тенденция становиться визуально похожим на Android.</p><p>Основная причина, почему хочется использовать iOS-подобный дизайн на Android, — «потому что красиво». Но Android не повезло: красивые вещи довольно затратны. Изначально Android затачивался под аппараты для всех, включая страны с дешёвыми устройствами малой мощности. Тащить туда всю красоту — вредить пользователям. Там действует принцип «максимум возможностей при минимальных затратах».</p><p><i>Ну да, Apple всегда стремились делать очень красиво. Так, скоро же выйдут новые модели Apple, они там всё выкатят в сентябре. Там какие-то изменения по разработке будут под iOS?</i></p><p>Я думаю, не без этого. Изменения идут каждый год, иногда несколько раз в год. Но что хорошо у Apple и Google — нет таких радикальных изменений, чтобы все бросали работу и шли переписывать приложение под новую парадигму.</p><p>Были у них такие периоды, но это было связано скорее с языками (Swift у Apple, Jetpack Compose у Google), которые сильно менялись. Но кардинальной смены инструментов или парадигмы в ближайшее время не планируется.</p><h2>Крик души мобильного разработчика</h2><p><i>Так, ещё у нас остался один большой вопрос, прямо крик души. Цитирую: </i><i>«Почему на симуляторе всё работает, а на телефоне нет? Телефон тупее? Если отключу фоновые процессы, батарейка начнёт заряжаться в обратную сторону? А можно сделать так, чтобы приложение работало одинаково на всех 19 тысячах моделей телефонов? Почему я должна платить 99 долларов в год, чтобы тестировать на своем же телефоне? Почему пуши приходят только тогда, когда я уже сама все проверила вручную? Почему SwiftUI делает все проще, но я все равно страдаю?»</i></p><p>Я так понимаю, это крик души. Мы пойдём по частям. Судя по желанию, «чтобы оно работало везде одинаково», — это PM или Product Owner detected. «Нехорошо, неправильно не делайте, делайте правильно». Вот такой тезис.</p><p>Давай пройдёмся по частям.</p><p><b>Про симулятор и телефон.</b> Эмулятор имеет ограниченные ресурсы и параметры ОС. Он запускается на вашем компьютере, где ресурсов больше, и вы можете настроить сеть, например, прокси. А телефон — это реальное железо с ограниченными ресурсами, которых может не хватить. Кроме того, на эмуляторе некоторые вещи могут игнорироваться или, наоборот, не воспроизводиться. Тестировать на эмуляторе безопаснее для вашего телефона, его ресурсы просто сожрутся. Хотя тестировщик, конечно, должен проверять на реальных устройствах.</p><p><b>Про 99 долларов.</b> Вы платите не мне, а компании Apple. А компания Apple считает, что вы должны платить, «потому что они красивые». Вот. Такова жизнь.</p><p><b>Про пуши и SwiftUI.</b> Можно сказать, что страданиями душа совершенствуется, а также навыки разработчика. У каждой технологии есть подводные камни, главное — правильно её использовать. Но даже если вы знаете, как правильно, вы не застрахованы от багов и питфолов.</p><p>С пушами отдельная история. Доставка пуш-уведомлений — вещь негарантированная. Многое зависит от сервиса, который вы используете (Firebase часто капризничает, try RuStore, они стабильнее), от территориальных особенностей, от того, как настроена рассылка. На Android и iOS разные политики работы с пушами. Иногда, если понизить приоритет пушам, они дойдут гарантированнее, чем с высоким приоритетом. Всё индивидуально.</p><p>А по SwiftUI... Я очень сочувствую вашему опыту. Если вы посмотрите WWDC последних двух лет, особенно этот год, они даже не прикладывают исходники тех примеров, которые показывают. То есть покажут сниппет, а целиком приложение не дают. Так что, возможно, это всё на их совести. Пусть они спят плохо.</p><h2>О собеседованиях и офферах</h2><p><i>«Почему для получения оффера недостаточно, что в своём телефоне я разработчик?»</i></p><p>Хороший вопрос. Когда вы приходите на собеседование и у вас проверяют знания, это не потому что мы редиски и хотим попить вашу кровушку. Мы выбираем человека, с которым будем работать.</p><p>Это как на стройке: есть прораб и рабочие. Каждый делает свою операцию. Человек, которого мы ждём в коллектив, будет брать часть нашей работы. А вы меняете ваше время, усилия и навыки на денежки. Вот так работает экономика.</p><p>Чтобы вы получили оффер, мы должны понимать, что вы придёте и сможете делать задачи. 90% вопросов на собеседовании — это либо общая теория, либо обсуждение кейсов. Тестовые задания сейчас практически не дают, особенно на миддлов и сеньоров. Мы надеемся, что человек с опытом может мысленно разложить задачу и рассказать, как бы он это сделал. Чтобы показать, что он сможет с этим работать.</p><p><i>Скажи, а вот такие тест-кейсы на собеседованиях помогают вычислить и не допустить тех, кто опыт накручивает?</i></p><p>Ох, на самом деле да. Бывает, людей вводят в заблуждение разные кураторы, и они считают, что если суперуверенно рассказать что-то HR, то он уже прошёл. Вот эти кейсы, где предлагается подумать и рассказать, как бы ты это делал, — довольно показательны.</p><p>Тем более, человек может запнуться на теории, войти в ступор. У меня самой такое было лет шесть назад. А когда просишь рассказать, как бы ты это делал, это показывает, как человек думает, как решает задачи на практике, с какими технологиями он умеет работать.</p><p>Если человек говорит: «Это всё гуглится», — возникает вопрос: «Зачем ты тогда тут?» Кейсы экономят время, не у всех может открыться среда для лайвкодинга, и они помогают понять, как человек мыслит и насколько он адекватен.</p><h2>Об автомобильной разработке</h2><p><i>Так, и вот последний странненький, на мой взгляд, вопрос. «Зачем нужны специалисты по мобильной разработке, если есть уже автомобильная?»</i></p><p>Хороший вопрос. Можно обыграть, что автомобильная — это разработка на vibe-кодинге, just for fun. Если говорить серьёзно, то автомобильную разработку тоже делают мобильные разработчики! Так что можно быть автомобильным разработчиком, но не сужайте себе поле, попробуйте другие девайсы, вам тоже понравится.</p><p>Например, брать с собой в карман автомобиль — это, конечно, шикарно, но не везде реализуемо. Он тяжёлый.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как освоить ассемблер для разработчиков Swift: первые шаги</title>
      <link>https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi</link>
      <comments>https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi</guid>
      <description><![CDATA[<p>Освойте основы ассемблера для Swift: узнайте, как работают регистры, настройте Xcode для компиляции .s-файлов и напишите первую программу на ассемблере. Практическое руководство для iOS-разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi">Как освоить ассемблер для разработчиков Swift: первые шаги</a>»</p>]]></description>
      <category><![CDATA[Низкоуровневое программирование]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Xcode]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 17 Sep 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Статья <a href="https://arturgruchala.com/assembler-for-swift-developers/">переведена</a> с оригинала польского iOS-разработчика Артура Грачаты, который делится практическими советами по низкоуровневому программированию для улучшения навыков Swift-разработчиков.</i></p><h2>Зачем разработчику Swift изучать ассемблер</h2><p>Ассемблер — это не просто низкоуровневое программирование, а способ понять, как код на Swift или Objective-C преобразуется в инструкции процессора. Он помогает разобраться в движении данных, оптимизировать производительность и отлаживать сложные ошибки. Изучение ассемблера не требует писать целые приложения на нем, но дает уверенность и глубокое понимание работы системы. К тому же, умение работать на уровне процессора добавляет разработчику уникальности и открывает новые карьерные перспективы.</p><h2>Регистры: основа работы процессора</h2><p>Регистры — это быстрые ячейки памяти процессора, своего рода «рабочий стол» для данных. На архитектуре Apple Silicon (ARM64) они выполняют следующие роли:</p><ul><li>x0–x7: передача аргументов и возвращаемых значений.</li><li>x8: регистр косвенных результатов (используется редко).</li><li>x9–x15: временные регистры для промежуточных вычислений.</li><li>x16–x17: для системных вызовов (например, указание номера вызова).</li><li>x18: регистр платформы, сохраняемый между вызовами.</li><li>x19–x28: регистры, которые нужно сохранять при вызове функций.</li><li>sp (x31): указатель стека, хранящий локальные данные.</li><li>pc: счетчик программы, указывающий на следующую инструкцию.</li></ul><p>При выполнении системного вызова (например, для вывода текста в консоль) аргументы загружаются в регистры x0, x1 и далее, номер вызова — в x16, а команда svc 0 передает управление ядру системы.</p><h2>Настройка Xcode для работы с ассемблером</h2><p>Чтобы начать писать код на ассемблере, нужно настроить проект в Xcode:</p><ol><li>Откройте Xcode и создайте новый проект: File → New → Project….</li><li>Выберите Command Line Tool в разделе macOS, затем нажмите Next.</li><li>Назовите проект, например, HelloAsm, выберите язык C (его позже заменим) и нажмите Create.</li><li>В Project Navigator удалите файл main.c.</li><li>Добавьте новый пустой файл: File → New → File… → Other → Empty, назовите его main.s и нажмите Create.</li><li>В настройках проекта откройте Build Phases и убедитесь, что main.s добавлен в Compile Sources.</li></ol><p>Теперь Xcode будет компилировать файл main.s как точку входа для программы на ассемблере.</p><h2>Первая программа: «Hello, Assembly!»</h2><p>Рассмотрим минимальную программу, которая выводит «Hello, Assembly!» в терминал. Вот ее структура с пояснениями:</p><ul><li>.section __TEXT,__text &amp; .global _main: указывает, что это исполняемый код, а _main — точка входа.</li><li>mov x0, 1: задает 1 (stdout) как первый аргумент системного вызова.</li><li>adrp/add: загружает адрес строки msg в регистр x1 (с учетом разбиения на страницы).</li><li>mov x2, #0x11: задает длину сообщения (включая символ новой строки и нулевой терминатор).</li><li>mov x16, #0x4: указывает номер системного вызова для записи в macOS.</li><li>svc 0: выполняет системный вызов, передавая управление ядру.</li><li>Повторение для вызова выхода.</li></ul><p>Примечание: в коде используются шестнадцатеричные числа. Знание преобразования между десятичными, двоичными и шестнадцатеричными числами пригодится.</p><h2>Сборка и запуск</h2><p>Соберите и запустите проект в Xcode. При успешной компиляции в терминале появится:</p><p>Hello, Assembly!</p><p>Если вывод не появился, проверьте:</p><ul><li>Файл main.s добавлен в Compile Sources.</li><li>Нет лишних C-файлов, которые могут переопределить main.</li><li>Архитектура проекта соответствует вашему оборудованию (Intel или Apple Silicon).</li></ul><h2>Что дальше</h2><p>Написав первую программу на ассемблере, вы сделали шаг к пониманию работы процессора. Продолжайте изучать регистры — это упростит отладку и поможет лучше понимать, где находятся данные в вашем коде.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что можно накодить на телефоне и какие приложения для этого подходят</title>
      <link>https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat</link>
      <comments>https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat</guid>
      <description><![CDATA[<p>Подборка топовых мобильных IDE и редакторов, которые помогают фронтенд и бэкенд разработчикам писать код прямо со своего телефона.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat">Что можно накодить на телефоне и какие приложения для этого подходят</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Смартфоны]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 11 Aug 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>К сожалению, в смартфонах нет среды разработки по типу VS Code, которая одинаково хорошо работает с Python, C++, Java и другими ЯП. Приходится выбирать между десятками приложений, упираясь в ограниченный функционал.</p><p>Мы собрали лучшие инструменты для мобильного программирования: от простых редакторов до IDE с компиляторами и отладчиками. Вы узнаете про приложения для фронтенда и бэкенда. Мы затронем тему вайб-кодинга и даже расскажем, как установить Linux-терминал поверх Android или iOS.</p><p><i>Ссылки на приложения опубликовали в комментариях.</i></p><h2>CodePen</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/360b9812-798c-4579-a75e-f7d86bc630b4.jpg" alt="" /></figure><ul><li>Приложение для браузера: ✅</li><li>Приложение для Android: ✅</li><li>Приложение для iOS: ❌</li></ul><p>Обзор начнём с онлайн-платформы для фронтендеров <b>CodePen</b>. Песочница работает с HTML, CSS, JS. С её помощью разработчики обмениваются идеями, создают прототипы и обучаются вёрстке. CodePen ценят за простоту – открыл песочницу, написал код, увидел результат.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/561609f4-d3be-44bf-9849-6abb016e0934.jpg" alt="" /><figcaption>Страница разработчика с популярными пэнами</figcaption></figure><p>Проекты называются «пэнами», ими можно делиться с другими пользователями. Ещё есть лента, где публикуют интересные работы с открытым кодом. Проекты можно копировать себе, оценивать и комментировать.</p><p>CodePen поддерживает 7 фреймворков, 5 библиотек и 24 набора UI-компонентов. Возможности ограничены только мощностью устройства: превью тяжёлых пэнов на телефоне будет лагать.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/45678e1b-f327-4666-90b7-467485a3da08.jpg" alt="" /><figcaption>Пример тяжёлого пэна, его превью не тянет даже ноутбук с 16 Гб ОЗУ</figcaption></figure><p>На бесплатном тарифе можно создавать неограниченное количество пэнов, коллекций и шаблонов. Единственное неудобство – добавлять картинки нужно через альтернативный хостинг. За $8 в месяц можно грузить картинки напрямую, работать в команде с коллегами, создавать личные пэны, которые закрыты от других пользователей.</p><h2>Code Editor</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/7c54b2a9-24e2-432c-b1dd-2273b30bf749.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ✅</li></ul><p>Универсальный редактор <b>Code Editor</b> подсвечивает синтаксис 110+ языков. В приложении есть поиск и замена символов, отображение и скрытие строк, выделение совпадающих скобок, автоматические отступы.</p><p>Фронтендеры скачивают Code Editor  ради предпросмотра HTML и плагина <a href="https://tproger.ru/articles/kak-plagin-emmet-pomogaet-uskorit-rabotu-s-programmnym-kodom">Emmet</a>. Также через встроенную консоль удобно тестировать и отлаживать JS-скрипты.</p><p>Приложение распознает комбинации клавиш, поэтому к телефону можно подключить физическую клавиатуру и кодить как за маленьким монитором.</p><p>Code Editor поддерживает FTP, FTPS, SFTP и WebDAV для работы с удалёнными серверами. Ещё в приложение добавили Google Диск, Dropbox и GitHub, чтобы синхронизировать файлы между устройствами.</p><h2>Acode</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/75cf8fe0-b50f-409d-ae14-e452e2c8b833.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ❌</li></ul><p>Редактор <b>Acode </b>охватывает 100+ языков программирования. Приложение оптимизировано для работы с файлами до 50000 строк. Acode выбирают для мобильной разработки, быстрых правок и обучения программированию.</p><p>Встроенный просмотр HTML и Emmet ускоряет вёрстку. В JS-консоли можно тестировать код фрагментами без создания отдельных файлов. Веб-сайты запускаются прямо в браузере приложения. Ещё редактор поддерживает GitHub, FTP/SFTP для работы с удалёнными серверами.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/b4a7cd0d-144f-48a8-83ba-d33d8068be6d.jpg" alt="" /><figcaption>Acode на планшете</figcaption></figure><p>Плагины расширяют функционал Acode. Например, можно установить эмулятор терминала или добавить ИИ-агента от популярных провайдеров.</p><h2>Pydroid, Cxxdroid, Jvdroid</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/1bb83185-6c33-425a-93ba-6962bf94ca3b.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ❌</li></ul><p>Приложения от одного разработчика не случайно объединили в один раздел – это лучшие мобильные IDE для Python, C/C++ и Java. Каждое заточено под конкретный ЯП, но все построены на одной архитектуре и предлагают схожий функционал.</p><p>IDE работают автономно – интернет нужен только для скачивания дополнений. В каждом приложении есть терминал, примеры кода для обучения, система управления пакетами и библиотеками.</p><p>Редакторы поддерживают:</p><ul><li>подсветку синтаксиса,</li><li>работу с вкладками,</li><li>расширенную клавиатуру,</li><li>быструю публикацию кода на Pastebin.</li></ul><p><b>Pydroid 3</b> – самое функциональное приложение из тройки. Это интерпретатор Python 3 с менеджером пакетов pip и готовыми библиотеками для data science:</p><ul><li>numpy,</li><li>scipy,</li><li>matplotlib,</li><li>scikit-learn,</li><li>jupyter.</li></ul><p>В премиум-версии доступны OpenCV, TensorFlow и PyTorch.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/e88e3e40-26f7-45e7-9fde-a8b7902622c2.jpg" alt="" /><figcaption>IDE для Python</figcaption></figure><p>Есть поддержка GUI-приложений через Tkinter, Kivy с SDL2-бэкендом и PySide 6. Также встроен компилятор C/C++/Fortran для сборки нативных библиотек и Cython.</p><p>Отладчик PDB работает с точками останова. Приложение определяет используемые библиотеки и переключается на соответствующий режим выполнения. Ещё редактор автоматически ставит отступы и предлагает навигацию по методам.</p><p><b>Cxxdroid </b>– это компилятор C/C++ на базе Clang с поддержкой ассемблера. В менеджере пакетов есть популярные библиотеки:</p><ul><li>Boost,</li><li>SQLite,</li><li>ncurses,</li><li>libcurl.</li></ul><p>Графические библиотеки SDL2, SFML и Allegro доступны в премиум-версии.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/5104e1cb-3cc4-4aa3-8a81-391e933244f6.jpg" alt="" /><figcaption>IDE для C/C++</figcaption></figure><p>Разработчики заморочились над системой кэширования, которая ускоряет сборку в среднем в 3 раза, а при использовании Boost – до 33 раз. Также есть режим интерпретатора (REPL) на основе CERN Cling для интерактивной работы с кодом.</p><p>Архитектура приложения исключает падения IDE из-за ошибок в пользовательском коде – анализ и компиляция выполняются одним компилятором.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/10db4050-fa2c-4f2f-830d-592b43f3422a.jpg" alt="" /><figcaption>IDE для Java</figcaption></figure><p><b>Jvdroid </b>работает на OpenJDK 11 – редактор поддерживает стандарты Java и jar-библиотек. Интегрирован с Maven для управления проектами и зависимостями. Компилятор оптимизирован с помощью Nailgun.</p><p>Приложение включает JShell для интерактивной работы с Java. Есть компиляция программ на Kotlin, Scala и Clojure через Maven. Ещё редактор показывает Javadoc для методов и классов.</p><h2>Replit</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/043f2475-978b-4e3e-bcac-bc5140d757d3.png" alt="" /></figure><ul><li>Веб-приложение: ✅</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ✅</li></ul><p><b>Replit </b>– облачная IDE с ИИ-агентом. Вы получаете помощника, который создаёт проекты по промпту: описываете идею приложения, агент предлагает функции, генерирует код и деплоит в облако.</p><p>Ассистент автоматически разбивает большие файлы на части, оптимизирует работу с API, добавляет нужные библиотеки. Есть поддержка основных языков:</p><ul><li>Python,</li><li>JavaScript,</li><li>TypeScript,</li><li>C++,</li><li>HTML/CSS,</li><li>Java,</li><li>Ruby и десятки других.</li></ul><p>До 100 человек могут одновременно редактировать код. Готовые проекты деплоятся одним кликом. Доступна выделенная VM, автоскейлинг, деплой по запросу.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/e3884f7c-bd41-4369-a705-beb9b44ced6c.jpg" alt="" /></figure><p>Встроенные инструменты:</p><ul><li>Автодополнение кода через Ghostwriter.</li><li>Поиск и исправление ошибок в реальном времени.</li><li>Модульное тестирование без настройки.</li><li>Интеграция с GitHub (автосинхронизация).</li><li>Аутентификация пользователей через Repl Auth.</li></ul><p>ИИ-агент поддерживает ограниченный набор технологий – Flask и Node.js. С React и другими фронтенд-фреймворками могут быть проблемы. Интеграции доступны только с OpenAI, Google, PostgreSQL и S3.</p><p>Официальные приложения для iOS и Android позволяют кодить прямо с телефона. Интерфейс адаптирован под сенсорные экраны, поддерживается голосовой ввод для общения с ассистентом.</p><p>Replit подходит для быстрого прототипирования, обучения и создания простых веб-приложений. ИИ-агент понравится тем, кто хочет воплотить идею в код без знаний разработки. Для сложных проектов не подойдет, но для MVP и экспериментов – хороший выбор.</p><h2>Termux (iSH Shell)</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/6df9c91d-c8dd-45de-b277-25abc5d28f97.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ✅</li></ul><p><b>Termux </b>– это полноценный Linux-терминал для Android. В отличие от редакторов кода, вы получаете ОС со всеми инструментами программиста. Можно работать с любыми языками программирования, компилировать код, устанавливать библиотеки, подключать базы данных, настраивать веб-серверы.</p><p>После установки в приложении вы увидите только чёрный экран – это Linux-терминал. Графического интерфейса нет, всё управляется командами.</p><p>Перед работой обновите систему:</p><p>Первая команда проверяет доступные обновления, вторая их устанавливает. На все вопросы отвечайте «Y».</p><p>Termux используют системные администраторы, разработчики, студенты IT-специальностей и все, кому нужна мобильная среда разработки. Единственный нюанс – нужно время на изучение bash, но это справедливая цена за мощный и гибкий инструмент.</p><h2>Подведём итоги</h2><p>Выбор мобильного редактора зависит от ваших задач:</p><ul><li>Для фронтенда подойдут CodePen (веб-разработка и прототипирование), Code Editor и Acode (универсальные редакторы с поддержкой HTML/CSS/JS).</li><li>Для бэкенда есть отдельные IDE: Pydroid для Python, Cxxdroid для C/C++, Jvdroid для Java. Они работают автономно и включают все необходимые инструменты.</li><li>Для экспериментов с ИИ попробуйте Replit – облачную IDE с умным ассистентом, который создаёт приложения по описанию.</li><li>Для профессиональной разработки установите Termux (Android) или iSH Shell (iOS) – это полноценные Linux-терминалы с неограниченными возможностями.</li></ul><p><i>Знаете классное приложение, которое не попало в подборку? Расскажите в комментариях о его плюсах и минусах! Ваши советы помогут коллегам в поисках идеального инструмента для работы с кодом на смартфоне.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Как будет выглядеть новый интерфейс Apple? Исследуем iOS 26 и всё, что за ней стоит</title>
      <link>https://tproger.ru/articles/kak-budet-vyglyadet-novyj-interfejs-apple--issleduem-ios-26-i-vsyo--chto-za-nej-stoit</link>
      <comments>https://tproger.ru/articles/kak-budet-vyglyadet-novyj-interfejs-apple--issleduem-ios-26-i-vsyo--chto-za-nej-stoit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Диана Тажетдинова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-budet-vyglyadet-novyj-interfejs-apple--issleduem-ios-26-i-vsyo--chto-za-nej-stoit</guid>
      <description><![CDATA[<p>Apple представила iOS 26 с интерфейсом Liquid Glass, встроенным ИИ и новыми приложениями. Разбираем, как изменится пользовательский опыт, поведение интерфейсов, дизайн и разработка под новую реальность Apple.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-budet-vyglyadet-novyj-interfejs-apple--issleduem-ios-26-i-vsyo--chto-za-nej-stoit">Как будет выглядеть новый интерфейс Apple? Исследуем iOS 26 и всё, что за ней стоит</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Aug 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>На конференции WWDC в июне 2025 года мы узнали, что в iOS 26 элементы интерфейса переливаются как стекло, иконки обновились, а стандартные приложения стали умнее. Появилось Apple Games, а в систему органично встроили собственный искусственный интеллект — Apple Intelligence.</p><p>Кроме визуального апгрейда, iOS 26 готовит платформу к будущим устройствам и меняет логику взаимодействия с интерфейсом. Разбираемся, зачем Apple полностью переосмысляет дизайн и как это повлияет на пользователей, разработчиков и рынок.</p><h2>Когда ждать релиз iOS 26 и кто её получит</h2><p>Первая бета-версия для разработчиков стала доступна 9 июня, сразу после WWDC. Публичная бета ожидается с 14 по 21 июля 2025 года. Финальный стабильный релиз запланирован на сентябрь, одновременно с выходом линейки iPhone 17.</p><p>iOS 26 получат устройства, начиная с iPhone 11 и новее. Владельцы iPhone XR, XS и XS Max останутся на iOS 18.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/a7320ac7-33db-49ac-9687-f773cb8029eb.png" alt="" /><figcaption>Ждать ли подобных мемов про iPhone 17 — узнаем в сентябре</figcaption></figure><h2>Что такое Liquid Glass</h2><p>Это новый визуальный стиль интерфейса, который Apple представила в iOS 26. Он основан на полупрозрачности, размытии фона и эффекте глубины. Панели, кнопки и другие элементы теперь выглядят как стеклянные поверхности с лёгким свечением и размытым фоном.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/0acf893b-88ac-4ed5-8b64-186e716b69bf.jpg" alt="" /><figcaption>Apple заявляет: главный экран стал динамичным, чтобы подстраиваться под рутину пользователя.</figcaption></figure><p>Такой подход уже знаком пользователям: похожие эффекты применялись в Windows Vista (Aero Glass) и Android с Material You. В iOS 26 они выполнены в более адаптивной форме. Анимации теперь стали контекстно-зависимыми, а сама система — динамичнее. Интерфейс реагирует на поведение пользователя вместо выполнения команд.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/b2dc28ad-1362-47da-801c-725baa1f7f2e.png" alt="" /><figcaption>В сети шутят, что Apple тоже хочет вернуть 2007-ой</figcaption></figure><p>Резюмируем, какими будут визуальные особенности:</p><ul><li>Полупрозрачные и размытые элементы UI</li><li>Плавные переходы и анимации с физическим моделированием</li><li>Динамическая реакция интерфейса на фокус, жесты и состояние экрана</li></ul><p>С технической точки зрения Liquid Glass требует больше ресурсов, и поэтому iOS 26 недоступна на устройствах до iPhone 11.</p><h2>Как обновление влияет на дизайн и разработку</h2><p>Редизайн iOS заставит пересмотреть подход к проектированию интерфейсов и логике разработки мобильных продуктов.</p><h3>Для разработчиков</h3><p>Система получила обновленные UIKit и SwiftUI, в которых появились новые параметры для настройки анимаций и поведения элементов интерфейса. Теперь вместо ручной отрисовки переходов разработчик может задать жесткость, скорость, инерцию. Система сама просчитает анимацию с помощью физического движка.</p><blockquote>Разработчикам теперь достаточно задать числовые параметры, и система автоматически создаст натуральные переходы и микровзаимодействия.</blockquote><p>Также появляются механизмы для адаптации UI под разные форм-факторы — это важно на фоне слухов о складных устройствах. Девелоперам придется проявить гибкость мышления в работе с переменными размерами экранов.</p><h2>Для дизайнеров</h2><p>Дизайнерам предстоит адаптироваться к концепции живого, полупрозрачного интерфейса. В iOS перекочевал подход для AR-сред. Теперь важно подстраивать поведение UI в разных состояниях и сценариях.</p><p>В то же время появляются ограничения. Пока ни Figma, ни Sketch, ни другие инструменты не поддерживают эффект Liquid Glass или физику взаимодействий. Прототипировать и тестировать дизайны станет сложнее.</p><blockquote>Пользователи начнут ждать таких же гибких интерфейсов от всех приложений. Это особенно сложно для кроссплатформенных решений.</blockquote><h2>Apple Intelligence: ИИ без ассистента</h2><p>Компания представила искусственный интеллект как набор функций, встроенных в повседневную рутину. ИИ анализирует ваши действия, чтобы предложить помощь в нужный момент. Большая часть операций выполняется на устройстве, что важно для конфиденциальности. С разрешения пользователя система может обращаться к ChatGPT для сложных запросов. По умолчанию она работает локально.</p><p>Apple подчеркивает, что не сохраняет и не читает ваши данные. Все процессы происходят на устройстве или через Private Cloud Compute. Это промежуточный вариант, где запрос обрабатывается в облаке, но без сохранения истории.</p><blockquote>iPhone сам предлагает решение, когда нужно, оставаясь при этом практически невидимым. Apple превращает саму систему в умного ассистента.</blockquote><p>Где работает ИИ-ассистент:</p><ul><li><b>Сообщения и письма </b>— обобщает длинные переписки, предлагает автоматические ответы, сортирует уведомления по приоритетности</li><li><b>Звонки </b>— транскрибирует разговоры и выдает краткое содержание</li><li><b>Снимки экрана</b> — распознаёт контент и предлагает действия: добавить встречу в календарь, найти товар по изображению и т.д.</li><li><b>Переходы между приложениями</b> — связывает действия: например, превратить голосовую заметку в текст и сразу отправить её в мессенджер.</li><li><b>Персонализированные действия Siri</b> — на основе контекста и привычек пользователя.</li></ul><p>Такой подход позволяет системе действовать проактивно, не отвлекая пользователя голосовыми интерфейсами. Это делает UX более органичным.</p><blockquote>Пользователю важен не чат с ИИ, а то, что интерфейс сам понимает контекст. Apple внедряет ИИ как часть UX — это зрелый подход.</blockquote><p>ИИ-ассистент работает не на всех устройствах — только iPhone 15 Pro и новее, iPad и Mac на M-чипах. Некоторые функции появятся не сразу, а будут добавляться в течение 2025–2026 года.</p><h2>Новые и обновлённые приложения</h2><p>В iOS 26 обновились практически все ключевые приложения. Карты стали визуально легче и получили мягкие переходы между уровнями. В Wallet добавили новые сценарии отображения карт и улучшили доступ к билетам и кодам. Apple Music изменилась визуально: обложки больше, плеер — плавнее, появились первые элементы персонализации на основе ИИ.</p><p>Сообщения и Телефон теперь адаптируются под сценарии использования — от отображения звонков до плавных анимаций при переходе между чатами. Интерфейс стал чуть менее предсказуемым, но более живым.</p><p>Появилось и совершенно новое приложение — Apple Games. Это не просто каталог, а игровой хаб: там собраны достижения, рекомендации и челленджи с друзьями. Похоже, Apple решила снова попробовать зайти в гейминг, но уже с упором на персонализацию.</p><p>CarPlay тоже не остался в стороне: теперь в нём работают виджеты и живые данные. Входящие звонки и уведомления стали компактнее, а интерфейс — адаптивнее и ближе к мобильной iOS. В некоторых машинах CarPlay теперь может управлять климатом и другими системами авто.</p><h2>Универсальность экранов и складной iPhone</h2><p>В последние пару лет Apple оформила множество патентов на устройства со складными конструкциями. Среди них:</p><ul><li>раскладушка,</li><li>гибкие шарниры,</li><li>дисплей с защитой от падения,</li><li>экраны с гибкой текстурой,</li><li>система компенсации цвета и яркости на складном экране.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/16999756-c031-4753-b6fe-196c54ebf489.png" alt="" /><figcaption>Встроенный датчик предотвратит центральную часть экрана от удара при падении. А если ускорение превысит заданный предел, устройство спрячет экран</figcaption></figure><p>Американские <a href="https://www.gearnews.com/apple-foldable-displays-tech/">СМИ</a> отмечают, что в свежих патентах компания пытается сочетать технологичность и приятный глазу дизайн. Потенциально новые складные дисплеи для планшетов, телефонов и ноутбуков могут иметь диагональ до 18 дюймов.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/a35cd921-5a90-47d3-94ae-c59b213b62bf.png" alt="" /><figcaption>Инженерный механизм с зацепами-пальцами и фигурными пазами стабилизирует угол раскрытия и обеспечивает плавность сгиба</figcaption></figure><p>По мнению экспертов, многие нововведения в iOS 26 говорят о подготовке к устройствам следующего поколения — AR-гарнитурам и складным телефонам.</p><blockquote>Когда интерфейсы на всех устройствах будут базироваться на одних принципах, переход в очки AR станет бесшовным и интуитивным. Liquid Glass — связующее звено.</blockquote><h2>Возможные проблемы и ограничения</h2><p>Как и любое масштабное обновление, iOS 26 не обошлась без шероховатостей. Однако некоторые блогеры на YouTube отмечают, что бета-версия содержит уж слишком много багов по сравнению с бетами ранних iOS.</p><p>Пользователи массово жалуются на подтормаживания, вылеты стандартных приложений, зависания интерфейса и артефакты при переключении между экранами. Особенно это касается моделей iPhone 11–12 — устройства тянут Liquid Glass, но не без усилий.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/4efae4f6-78ea-4272-9b04-e6e69407bfc1.png" alt="" /><figcaption>Глюки графики отмечаются даже на более мощном iPhone 14</figcaption></figure><p>Эффект жидкого стекла как визуальная фича тоже вызывает очень много споров и баталий. На Reddit считают, что Apple превратила классную идею просто в запотевший экран. Чтобы получить действительно красивый эффект, нужны минималистичные обои и центр управления. Тем, кто привык к многоцветным картинкам и множеству иконок, сложно воспринимать заблюренные значки.</p><blockquote>В профессиональном сообществе уже обсуждаются два слабых места Liquid Glass. Это снижение читаемости на пёстрых фонах и сбои в работе VoiceOver — экранной озвучки для слабовидящих пользователей. В бета-версии iOS 26 фокус может «прыгать», а чтение — прерываться на полуслове.</blockquote><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/b88db7c3-b04f-48b5-bd3f-734c8cfbc394.png" alt="" /><figcaption>Многие баги в бете можно починить перезагрузкой телефона или сбросом настроек — но в конце концов, пользователь устанет так делать</figcaption></figure><h2>Сравнение основных функций старой и новой iOS</h2><p>Собрали в таблицу, что изменилось в интерфейсе Apple.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-06-30/ac5d154c-eab6-41b0-8eef-f23f6c2ce0b4.jpg" alt="" /></figure><h2>Выводы</h2><ul><li>iOS 26 — переход к новой логике интерфейса: гибкой, адаптивной, контекстной</li><li>ИИ работает в фоновом режиме — незаметно встраивается в рутину</li><li>Обновления системы затронули все составляющие: от базовых приложений до архитектуры UI</li><li>Новые подходы повлияют на разработку и дизайн: возрастут требования к адаптивности, контексту и микровзаимодействиям</li><li>Обновления получат модели iPhone 11 и выше</li><li>Apple создает задел на будущее: интерфейс постепенно подстраивается под человека, под аксессуары AR и под возможные «раскладушки»</li></ul><p>Стоит ли ждать осени? Если любите стабильность, лучше подождать. Если нравится тестировать сырой продукт и отлавливать баги — вперёд в публичную бету в июле.</p><blockquote>ИИ теперь — такое же базовое свойство платформы, как графический движок. Мы свидетели начала новой эры эволюции iOS.</blockquote><blockquote>Теперь система как бы живёт вместе с пользователем. Это уже не просто оболочка, а сопроцесс.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Большой гайд по DevOps от Tproger: инструменты, практики, автоматизация</title>
      <link>https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya</link>
      <comments>https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya</guid>
      <description><![CDATA[<p>Собрали всё, что нужно DevOps-инженеру: CI/CD, Kubernetes, серверлесс, безопасность, мониторинг и альтернативы Docker — практично и по делу.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bolwoj-gajd-po-devops-ot-tproger--instrumenty--praktiki--avtomatizaciya">Большой гайд по DevOps от Tproger: инструменты, практики, автоматизация</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Высокие нагрузки]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DevSecOps]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 10 May 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Собрали подборку наших лучших материалов для тех, кто строит пайплайны, следит за стабильностью и разворачивает сервисы в прод. Здесь — про Docker и Podman, Kubernetes, CI/CD, DevSecOps, serverless и всё, что нужно знать DevOps-инженеру в 2025 году. Сохраняйте, пригодится не раз.</p><h2>Инструменты и окружение</h2><p>Современные DevOps-инженеры без инструментов — как админ без терминала. Вот что стоит добавить в стек:</p><p><a href="https://tproger.ru/articles/top-10-instrumentov-devops--kotorye-uprostyat-vawu-zhizn-i-izbavyat-ot-nochnyh-relizov">Топ-10 инструментов DevOps, которые упростят вашу жизнь и избавят от ночных релизов </a>— Список лучших инструментов для DevOps-инженеров, которые упрощают релизы, мониторинг и CI/CD-процессы.  От логгирования до автоматизации тестов.</p><p><a href="https://tproger.ru/articles/podman-alternativa-docker">Podman: Альтернатива Docker без daemon</a> — Знакомим с Podman, инструментом, который не требует daemon, но дает весь функционал Docker.</p><p><a href="https://tproger.ru/articles/docker-hub-v-rossii---vse--gajd--kak-obojti-blokirovku">Docker Hub в России — всё? Гайд, как обойти блокировку</a> —Объясняем, как работать с Docker Hub после блокировки: альтернативы, зеркала и решения.</p><h2>CI/CD, Kubernetes и деплой</h2><p>Когда каждое изменение должно доходить до продакшена быстро и без боли — нужна хорошая сборка:</p><p><a href="https://tproger.ru/articles/razvorachivaem-instrumenty-ci-cd--praktiki-ot-devops-inzhenerov">Разворачиваем инструменты CI/CD: практики от DevOps-инженеров</a> — Практическое руководство по внедрению и настройке CI/CD: инструменты, примеры, лайфхаки.</p><p><a href="https://tproger.ru/articles/kubernetes-node-js-werf">Собираем и деплоим в Kubernetes приложение на Node.js с помощью werf </a>— Пошагово показываем, как собрать и развернуть приложение на Node.js в Kubernetes с помощью инструмента werf.</p><p><a href="https://tproger.ru/articles/avtomatizaciya-deploya-s-ispolzovaniem-kubernetes---tproger">Как автоматизировать деплой с использованием Kubernetes</a> — Рассказываем, как автоматизировать процесс деплоя приложений в Kubernetes: подходы, инструменты и советы.</p><p><a href="https://tproger.ru/articles/vybiraem-optimalnuyu-arhitekturu-monitoringa--ot-legkovesnogo-servisa-do-vysokonagruzhennyh-klasterov">Выбираем оптимальную архитектуру мониторинга: от легковесного сервиса до высоконагруженных кластеров </a>—Рассматриваем варианты мониторинга от минимальных решений до сложных систем, подходящих под высокие нагрузки.</p><h2>Практики и подходы</h2><p>Не только инструменты, но и культура разработки — основа DevOps:</p><p><a href="https://tproger.ru/articles/kak-stat-devops-v-2024-godu">Как стать DevOps в 2024 году</a> — Что нужно знать, какие навыки прокачивать, с чего начать.</p><p><a href="https://tproger.ru/articles/kak-avtomatizirovat-bezopasnost-s-pomoshhyu-devsecops-i-iskusstvennogo-intellekta">Как автоматизировать безопасность с помощью DevSecOps и искусственного интеллекта</a> — Объясняем, как применить DevSecOps-подход и AI для защиты приложений на всех этапах разработки.</p><p><a href="https://tproger.ru/articles/kak-serverless-tehnologii-pomogajut-snizit-nagruzku-na-razrabotchikov">Как serverless-технологии помогают снизить нагрузку на разработчиков</a> — Разбираемся, как serverless помогает ускорить разработку, упростить масштабирование и снизить поддержку инфраструктуры.</p><p>Не забывайте читать предыдущие гайды. <a href="https://tproger.ru/articles/bolwoj-gajd-po-python-ot-tproger--topovye-instrumenty-dlya-raznyh-napravlenij">Python</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">React</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety">мобильная разработка</a>, <a href="https://tproger.ru/articles/s----vse-samye-vazhnye-materialy-ot-tproger">С++</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke">инструменты</a>, <a href="https://tproger.ru/articles/veb-razrabotka-i-frontend--gajd-ot-tproger">фронтенд</a>.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>Веб-разработка и фронтенд: гайд от Tproger</title>
      <link>https://tproger.ru/articles/veb-razrabotka-i-frontend--gajd-ot-tproger</link>
      <comments>https://tproger.ru/articles/veb-razrabotka-i-frontend--gajd-ot-tproger?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/veb-razrabotka-i-frontend--gajd-ot-tproger</guid>
      <description><![CDATA[<p>Собрали топовые материалы по веб-разработке и фронтенду. Рассказываем, что нужно знать новичкам и опытным специалистам в 2025 году.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/veb-razrabotka-i-frontend--gajd-ot-tproger">Веб-разработка и фронтенд: гайд от Tproger</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 09 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мы заметили, что веб-разработка и фронтенд — самая популярная тематика на Tproger. И, кажется, в айти в целом. Внутри гайда — полезные материалы по стеку с множеством инструментов.</p><ol><li><a href="https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu">Топовые инструменты для фронтенд-разработки в 2025 году</a> — собрали самые полезные инструменты, которые помогут фронтендерам работать быстрее и лучше в 2025 году.</li><li><a href="https://tproger.ru/articles/reactjs-na-izi--chto-realno-nuzhno-znat-frontend-razrabotchiku-v-2025-godu">ReactJS на изи: что реально нужно знать фронтенд-разработчику в 2025 году</a> — кратко и по делу: что должен знать разработчик, работающий с React в 2025 году. Хуки, компоненты, архитектура.</li><li><a href="https://tproger.ru/articles/frontend-2024?utm_source=tproger&amp;utm_medium=pinned&amp;utm_campaign=tag&amp;utm_term=web">Что должен знать уважаемый фронтендер в 2024 году</a> — обновленный список знаний для фронтенд-разработчиков. Современные фреймворки, DevTools и подходы.</li><li><a href="https://tproger.ru/articles/frontend-razrabotka--chem-zanimayutsya-i-skolko-zarabatyvayut-specialisty">Фронтенд-разработка: чем занимаются и сколько зарабатывают специалисты</a> — Объясняем, чем занимается фронтенд-разработчик, какие бывают задачи и сколько можно зарабатывать.</li><li><a href="https://tproger.ru/articles/kak-rabotat-s-json-v-veb-razrabotke-">Как работать с JSON в веб-разработке</a> — простое объяснение JSON: как он устроен, как его использовать и почему без него не обойтись на фронтенде.</li><li><a href="https://tproger.ru/articles/kak-vybrat-ide--esli-vy-nachinayushhij-veb-razrabotchik">Как выбрать IDE, если вы начинающий веб-разработчик</a> — обзор самых удобных и популярных сред разработки для начинающих веб-разработчиков, их плюсы и минусы.</li><li><a href="https://tproger.ru/articles/kak-effektivno-optimizirovat-bolwoj-obem-dannyh-vo-frontende">Эффективные инструменты для оптимизации кода во фронтенд разработке</a> — собрали инструменты, которые помогут ускорить загрузку, уменьшить размер и повысить читаемость кода.</li><li><a href="https://tproger.ru/articles/30-samyh-poleznyh-bibliotek-python-dlya-veb-razrabotki-v-2024-godu">30 самых полезных библиотек Python для веб-разработки в 2024 году</a> — лучшая подборка Python-библиотек для веба: от фреймворков до утилит. Что взять в 2025 году.</li><li><a href="https://tproger.ru/articles/na-kakom-yazyke-pisat-sajt-v-2024-godu">На каком языке писать сайт в 2024 году</a> — помогаем выбрать язык программирования под сайт в 2025 году. Сравнение по скорости, удобству и экосистеме.</li></ol><p>Предыдущие подборки лежат здесь: <a href="https://tproger.ru/articles/bolwoj-gajd-po-python-ot-tproger--topovye-instrumenty-dlya-raznyh-napravlenij">Python</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">React</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety">мобильная разработка</a>, <a href="https://tproger.ru/articles/s----vse-samye-vazhnye-materialy-ot-tproger">С++</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke">инструменты</a>.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>JavaScript: большой гайд от Tproger</title>
      <link>https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger</link>
      <comments>https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger</guid>
      <description><![CDATA[<p>Гайд по JavaScript. Топовые и полезные статьи с теорией, инструментами и фреймворками. Практика для новичков и продвинутых программистов.  ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger">JavaScript: большой гайд от Tproger</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Регулярные выражения]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 08 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>JavaScript — база веб-разработки. На нем пишут интерактивные веб-интерфейсы, динамичные приложения и серверные фичи. В общем, на JS можно делать все — от простых скриптов до сложных экосистем. В этом гайде собрали статьи для новичков и не только, которые помогут прокачаться в JavaScript.</p><h2>База и теория</h2><ol><li><a href="https://tproger.ru/articles/event-loop-dlya-chajnikov--prostymi-slovami-o-slozhnom-mehanizme-brauzera">Event loop для чайников: простыми словами о сложном механизме браузера</a> — В статье разбираем, что такое Event Loop, очередь задач и стек вызовов. Простыми словами о том, как браузер выполняет JavaScript-код и обрабатывает события.</li><li><a href="https://tproger.ru/articles/chek-list-dlya-node-js-novichkov--obrabotka-owibok-254149">Чек-лист по Node.js для новичков: обработка ошибок</a> — Показываем основные подходы к обработке ошибок для Node.js. Рассматриваем пошаговую инструкцию и практические примеры.</li><li><a href="https://tproger.ru/articles/znaniya--kotorymi-dolzhen-obladat-javasript-razrabotchik-v-2024-godu--eto---baza">Что нужно учить JavaSript-разработчикам в 2024 году</a> — Разбираем, какие технологии и навыки нужно знать JS-разработчику, в том числе и в 2025. От фреймворков до подходов к архитектуре.</li><li><a href="https://tproger.ru/articles/deklarativnyj-javascript">Декларативные языки на примерах с JavaScript</a> — Рассказываем, что значит декларативный стиль программирования. Сравниваем с императивным на примерах JavaScript.</li><li><a href="https://tproger.ru/articles/javascript-localstorage-polnoe-rukovodstvo">JavaScript localStorage: Полное руководство</a> — Разбираем, как работает localStorage. Учим сохранять данные на клиенте с помощью JavaScript.</li><li><a href="https://tproger.ru/articles/ponimanie-strogogo-rezhima-javascript">Как работает режим strict в JavaScript</a> — Объясняем, что делает режим strict и почему он помогает писать более безопасный код на JavaScript.</li><li><a href="https://tproger.ru/articles/kak-besplatno-vyuchit-javascript-i-ne-idti-v-onlajn-wkoly">Как бесплатно выучить JavaScript и не идти в онлайн-школы</a> — Рассказываем, как самостоятельно освоить JavaScript. Бесплатные ресурсы, полезные советы и личный план обучения.</li><li><a href="https://tproger.ru/articles/kakie-js-biblioteki-ispolzovat-dlya-animacij-na-sajte-v-2024-godu">Какие JS-библиотеки использовать для анимаций на сайте в 2024 году</a> — Актуальные JavaScript-библиотеки для веб-анимации. Рассматриваем лучшие инструменты для красивых и быстрых интерфейсов.</li></ol><h2>Практикуемся</h2><ol><li><a href="https://tproger.ru/articles/10-realnyh-voprosov-s-sobesedovaniya-javascript-razrabotchika-s-otvetami-254156">10 реальных вопросов с собеседования JavaScript-разработчика с ответами</a> — Подборка реальных вопросов с собеседований для JavaScript-разработчиков. Даем ответы и объясняем, как правильно мыслить на интервью.</li><li><a href="https://tproger.ru/articles/prilozhenie-dlya-prognoza-pogody-na-vue-js">Приложение прогноза погоды с использованием Vue JS</a> — Пошаговое руководство по созданию погодного приложения на Vue.js. Обучаем взаимодействию с API и построению интерфейса.</li><li><a href="https://tproger.ru/articles/10-legendarnyh-uravnenij-na-javascript">Математика в программировании: реализуем уравнения на JavaScript</a> — Объясняем, как реализовать математические уравнения на JavaScript. Практика для программистов, которые не боятся формул.</li><li><a href="https://tproger.ru/articles/regulyarnye-vyrazheniya-v-javascript-eto-ne-tak-strawno-kak-vy-dumaete">Регулярные выражения в JavaScript: разбираемся в создании</a> — Учим создавать и использовать RegExp в JavaScript. Поясняем синтаксис, паттерны и типовые ошибки.</li><li><a href="https://tproger.ru/articles/reshaem-populjarnye-zadachi-s-asinhronnym-kodom-na-javascript-chast-pervaja">Решаем популярные задачи с асинхронным кодом на JavaScript: часть первая</a> — Практика асинхронного программирования на JavaScript. Решаем задачи с API, задержками и промисами.</li><li><a href="https://tproger.ru/articles/tutorial-po-javascript-async-x2f-await-izuchaem-callbacks-promises-i-async-x2f-await">Асинхронный JavaScript: изучаем Async/Await, Callbacks и Promises</a> — Учим писать асинхронный код в JavaScript: от колбэков до современного async/await. Понятно, на примерах и без лишнего.</li><li><a href="https://tproger.ru/articles/reshaem-populjarnye-zadachi-s-asinhronnym-kodom-na-javascript-chast-vtoraja">Задачи по асинхронному программированию на JS</a> — Упражнения на асинхронный JavaScript. От простых примеров до сложных сценариев.</li></ol><p>Предыдущие подборки лежат здесь: <a href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">React</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety">мобильная разработка</a>, <a href="https://tproger.ru/articles/s----vse-samye-vazhnye-materialy-ot-tproger">С++</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke">инструменты</a>.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>От идеи к успеху: как создать популярное мобильное приложение</title>
      <link>https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie</link>
      <comments>https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie</guid>
      <description><![CDATA[<p>Кирилл Васильев, руководитель кластера кросс-функциональных команд в RuStore, рассказывает, как создать популярное приложение.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie">От идеи к успеху: как создать популярное мобильное приложение</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Социальные сети]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[App Store]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Google Analytics]]></category>
      <category><![CDATA[Xcode]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Figma]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Firebase]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Apr 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Создание и продвижение мобильного приложения — это путь, который требует грамотного подхода на каждом этапе. Как разработать идею, выбрать функционал и сделать продукт удобным? Какие инструменты продвижения эффективны в цифровом мире? В этой статье Кирилл Васильев, руководитель кластера кросс-функциональных команд в RuStore, разобрал весь процесс: от идеи до привлечения тысяч пользователей.</p><h2>Определяем цель</h2><p>Успех приложения начинается с четкого понимания, зачем оно нужно — так становится проще определить целевую аудиторию. Это влияет не только на функционал, но и на дизайн, способы продвижения и даже тон общения с пользователями.</p><p>Некоторые программы помогают развивать существующий бизнес — как это делают банковские сервисы, которые упрощают работу с клиентами. Другие становятся самостоятельными продуктами, например, для обучения, занятий спортом или развлечений.</p><p>Кроме того, приложение должно решать реальные проблемы пользователей. Допустим, вы задумали создать программу для фрилансеров. Решили провести исследование, и оно показало, что фрилансеры часто страдают от прокрастинации и ненавидят заниматься выставлением счетов клиентам. Ваша идея и главная фишка — приложение, которое автоматизирует процесс оплаты, контролирует сроки выполнения проектов и помогает планировать рабочее время.</p><p>Чтобы убедиться, что идея действительно рабочая, проведите опросы в Telegram-каналах фрилансеров или создайте анкету. Вы можете спросить, какие функции для них наиболее актуальны: автоматический расчет налогов, интеграция с платежными системами или отслеживание времени работы. Это поможет сфокусироваться на действительно важных фичах и отсеять второстепенные.</p><h2>Выбираем платформу и инструменты</h2><p>Сегодня на российском рынке <a href="https://lenta.ru/articles/2025/03/12/luchshie-smartfony-na-android/">доминируют</a> две мобильные операционные системы: Android (около 70% пользователей) и iOS (около 30%). Оптимальным решением будет разработка приложения для обеих платформ, особенно если вы ориентируетесь на крупные города, где доля пользователей iOS существенно выше.</p><p>Приложения под Android большинство разработчиков пишет на Kotlin, хотя Java до сих пор остается одним из вариантов из-за обширной базы готовых решений и библиотек. Основной средой выступает Android Studio — в ней есть весь необходимый инструментарий для создания, отладки и тестирования приложений. Современные разработчики активно используют Jetpack Compose для построения пользовательского интерфейса, Room для работы с базами данных, Retrofit для сетевых запросов и Dagger или Hilt для внедрения зависимостей.</p><p>В мире iOS основным языком программирования стал Swift — современный и безопасный инструмент для нативных приложений. Разработка ведется в среде Xcode, официальной IDE от Apple. Для построения интерфейсов все чаще используется SwiftUI, для управления данными — Core Data, а для сетевого взаимодействия — фреймворк Alamofire. Работа с асинхронными событиями упрощается с помощью фреймворка Combine.</p><p>При ограниченных ресурсах можно рассмотреть кросс-платформенную разработку. Так, Flutter использует язык программирования Dart и позволяет создавать производительные приложения с нативным внешним видом. React Native дает возможность применять веб-технологии для мобильной разработки, а Xamarin ориентирован на разработчиков, привыкших к экосистеме Microsoft и языку C#.</p><p>Выбор платформы и инструментов должен основываться на характеристиках вашей ЦА, требованиях к функционалу и имеющихся ресурсах. Учитывайте также, что для разных магазинов приложений (RuStore, App Store, Google Play) могут потребоваться специфические оптимизации и настройки.</p><h2>Продумываем функционал</h2><p>При разработке функционала важно следовать концепции MVP (Minimum Viable Product) — минимально жизнеспособного продукта. Это позволит быстрее выйти на рынок, получить обратную связь и итеративно улучшить приложение.</p><p>Возьмем для примера приложение доставки еды. В этом случае MVP должен включать:</p><ul><li>авторизацию пользователя через телефон, email или социальные сети;</li><li>каталог ресторанов с фильтрацией по кухне, рейтингу и времени доставки; меню каждого заведения с фотографиями и описанием блюд;</li><li>корзину с возможностью изменения состава заказа;</li><li>оформление заказа с выбором адреса доставки и способа оплаты;</li><li>отслеживание статуса заказа в реальном времени;</li><li>профиль пользователя с историей заказов.</li></ul><p>Важно уделить внимание и техническим аспектам функционала:</p><ul><li>Локальное кэширование данных. Поддерживает работу приложения при слабом интернет-соединении или его отсутствии. Сохраняет каталоги, популярные позиции и историю действий пользователя.</li><li>Офлайн-режим. Определяет набор функций, доступных без подключения к сети. Критически важен для удержания пользователей в зонах с плохим интернетом.</li><li>Система пуш-уведомлений. Информирует пользователей о важных событиях, статусах заказов и специальных предложениях. Повышает вовлеченность и возвращаемость в приложение.</li><li>Многопоточная обработка. Выполняет ресурсоемкие операции в фоновом режиме. Гарантирует отзывчивость интерфейса даже при выполнении сложных задач.</li><li>Оптимизация изображений. Внедряет алгоритмы сжатия для быстрой загрузки визуального контента. Обеспечивает комфортное использование даже при ограниченной скорости соединения.</li></ul><p>При этом разработчики часто допускают ошибки, и одна из самых распространенных — функциональная перегруженность. Не стоит добавлять AR-анимации, игровые механики и другие «модные» функции, если они не решают реальных проблем клиентов.</p><p>Также многие игнорируют обратную связь пользователей, хотя механизмы ее сбора стоит включать уже в MVP. Недостаточное внимание к безопасности может стать критичным для приложений с личными данными и платежами. А отсутствие встроенных инструментов аналитики затрудняет понимание того, как пользователи взаимодействуют с программой.</p><p>Выбор правильной архитектуры — это фундамент, который определяет надежность, масштабируемость и удобство поддержки. Вот основные паттерны для мобильных приложений:</p><ul><li>MVVM — рекомендуемый Google подход с разделением UI и бизнес-логики</li><li>MVI — однонаправленный поток данных, хорошо сочетается с реактивным программированием</li><li>MVP — классическая архитектура. Популярна благодаря простоте реализации</li><li>Clean Architecture — многослойный подход с упором на тестируемость и гибкость</li><li>VIPER (iOS) — расширенный MVC со строгим разделением ответственности</li></ul><p>Важное значение имеет также выбор технологий для хранения и передачи данных. Для локальной работы подойдут SQLite + Room, Realm или DataStore; для сетевого взаимодействия на Android чаще всего используют Retrofit + OkHttp, а в реактивных сценариях — Ktor Client.</p><p>Правильный выбор архитектуры напрямую зависит от масштаба проекта и размера команды. Небольшие приложения могут обойтись простыми решениями, тогда как сложные продукты требуют комплексного подхода с продуманным разделением ответственности.</p><h2>Создаем удобный интерфейс</h2><p>Интерфейс — это лицо приложения. Даже если у вас отличный функционал, но пользоваться им неудобно, людям будет проще удалить программу и найти что-то другое.</p><p>Эффективный UI/UX строится на пяти ключевых принципах:</p><ol><li>Очевидность (интуитивное понимание интерфейса);</li><li>Экономия внимания (минимум шагов для достижения цели);</li><li>Консистентность (единообразие элементов с одинаковой функциональностью);</li><li>Обратная связь (видимый результат каждого действия);</li><li>Прощение ошибок (возможность отмены операций).</li></ol><p>Современные инструменты значительно ускоряют создание качественных интерфейсов. Дизайнеры используют Figma, Adobe XD и Sketch для прототипирования. Android-разработчики предпочитают Jetpack Compose и Material Design Components. Для iOS актуальны SwiftUI, UIKit и Human Interface Guidelines от Apple.</p><p>Наглядный пример различий между хорошим и плохим интерфейсом — приложения для доставки еды. В удачном решении ключевые элементы находятся в зоне комфортного доступа, процесс заказа разбит на логические шаги с индикацией прогресса, а дизайн адаптируется к условиям использования. В неудачном — мелкие тесно расположенные кнопки, длинные формы без разбивки на шаги и непонятная навигация.</p><h2>Проводим тестирование</h2><p>Юзабилити-тесты с фокус-группами, A/B-тестирование элементов и аналитика пользовательского поведения дают объективную картину взаимодействия клиентов с приложением.</p><p>Комплексное тестирование включает два основных направления:</p><ol><li>Автоматизированное тестирование: unit-тесты (JUnit, XCTest) для проверки отдельных компонентов; интеграционные тесты для проверки взаимодействия между модулями; UI-тесты (Espresso, XCUITest) для проверки интерфейса; end-to-end тесты для имитации полного пользовательского сценария.</li><li>Ручное тестирование: функциональное (соответствие требованиям), тестирование производительности (работа под нагрузкой), юзабилити (оценка удобства), кросс-платформенное тестирование (проверка на разных устройствах) и тестирование подключений (поведение при различном качестве интернет-соединения).</li></ol><p>Для этого используют специализированные инструменты: Firebase Test Lab для запуска тестов на множестве устройств, Crashlytics для мониторинга сбоев, Android Profiler и Xcode Instruments для анализа производительности. А Accessibility Scanner помогает адаптировать интерфейс для людей с ограниченными возможностями, расширяя потенциальную аудиторию.</p><h2>Публикуем приложение</h2><p>После тестирования и исправления проблем наступает ответственный момент публикации. Каждый магазин приложений имеет свои особенности процесса:</p><ul><li>Google Play: создание аккаунта разработчика ($25 единоразово); подготовка материалов (иконка, скриншоты, видео, описание); загрузка APK/App Bundle; заполнение формы оценки контента; настройка дистрибуции и ценообразования; ожидание проверки (до 2 дней).</li><li>App Store: регистрация в Apple Developer Program ($99/год); создание записи в App Store Connect; подготовка маркетинговых материалов; загрузка сборки из Xcode; заполнение информации о возрастных ограничениях; ожидание рассмотрения (1-7 дней).</li><li>RuStore: бесплатное создание аккаунта; подготовка материалов; загрузка APK; заполнение метаданных; быстрая модерация (до часа).</li></ul><p>Перед публикацией важно убедиться в соответствии приложения правилам магазина, подготовить политику конфиденциальности и настроить аналитику для мониторинга производительности с первого дня.</p><h2>Поддерживаем и обновляем</h2><p>После выпуска начинается непрерывный процесс поддержки и совершенствования продукта. Разработчики регулярно исправляют найденные ошибки, добавляют новые функции и улучшают работу уже существующих.</p><p>Для эффективного мониторинга используют комплексные аналитические инструменты: Firebase Crashlytics для отслеживания сбоев, Firebase Analytics/Google Analytics для анализа пользовательского поведения, RuStore Remote Config — бесплатный аналог  Firebase, Mixpanel для углубленного анализа пользовательских путей, AppMetrica от Яндекса как комплексное решение для российского рынка.</p><p>Автоматизация процессов разработки критически важна для регулярных релизов. CI/CD-системы (GitHub Actions, GitLab CI, Bitrise, Fastlane) позволяют автоматизировать сборку, тестирование и публикацию обновлений, значительно сокращая время выхода новых версий.</p><p>Оптимальная стратегия обновлений включает регулярный график релизов (каждые 2-4 недели) с четким приоритетом задач: критические исправления, новые функции, оптимизация производительности. В тренде современной разработки: персонализация на основе ИИ, многофункциональные суперапп-решения, адаптация под новые форм-факторы устройств и повышенное внимание к приватности данных.</p><h2>Продвигаем приложение</h2><p>На рынке огромная конкуренция, и без активного продвижения ваш продукт просто затеряется среди тысяч других программ. Важную роль здесь играет ASO (App Store Optimization) — оптимизация для магазина приложений. В некоторых случаях был <a href="https://www.businessofapps.com/marketplace/app-store-optimization/research/app-store-optimization-strategies/">зафиксирован</a> рост установок до 70% благодаря сильным ASO-стратегиям.</p><p>Для Android-приложений это означает настройку страницы так, чтобы пользователи легко находили ваш продукт. Здесь важно правильно подобрать ключевые слова для описания, создать привлекательную иконку и подготовить качественные скриншоты. Чтобы понять, какое оформление работает лучше, разработчики всё чаще используют A/B-тесты — такая возможность есть, например, в RuStore. Она позволяет сравнить разные версии карточки приложения и выбрать ту, которая эффективнее привлекает пользователей.</p><p>Также разработчики могут использовать как бесплатные, так и платные форматы продвижения. Один из бесплатных форматов — фичеринг, когда редакция размещает приложение в подборках, разделах или на главной странице магазина. Платное же продвижение позволяет настраивать таргетинг по демографии, географии, интересам, ключевым фразам и устройствам, а также запускать кампании прямо в поисковой выдаче магазина.</p><p>Еще один инструмент для продвижения приложений — социальные сети. Здесь можно показывать функционал программы, общаться с пользователями, отвечать на их вопросы и рассказывать о новых опциях. Это помогает создать активное сообщество вокруг продукта. Так, к примеру, В 2023 году компания Geozilla, разработчик приложения для отслеживания местоположения близких, провела кампанию по продвижению с инфлюенсерами в социальных сетях. В рамках сотрудничества удалось собрать более 1 миллиона просмотров, а коэффициент конверсии из кликов в установки приложения составил 24%.</p><p>Партнерские программы и рекламные кампании тоже сильно влияют на привлечение новых пользователей. Нельзя забывать и о работе с отзывами — нужно активно отвечать на комментарии и решать проблемы, о которых пишут люди.</p><p>Собственный сайт или блог разработчика тоже может привлечь внимание к приложению, особенно если у вас уже есть известный бренд.</p><h2>Подводим итоги</h2><p>Создание успешного приложения начинается с четкого определения цели и понимания потребностей пользователей. Затем нужно выбрать подходящие технологии, продумать необходимые функции, спланировать архитектуру и разработать понятный интерфейс. Обязательно проведите тщательное тестирование перед запуском. После публикации важно регулярно обновлять приложение на основе отзывов пользователей и данных аналитики, а также активно продвигать его в магазинах приложений и социальных сетях.</p><p>Не гонитесь за модными технологиями ради технологий — сосредоточьтесь на том, что действительно нужно вашим пользователям. Если вы создадите действительно полезный и удобный продукт, он найдет свою аудиторию и станет успешным.</p><p>iOS или Android? React Native или Flutter? Собираем все новости и гайды по мобильной разработке <a href="https://t.me/+Fb6_4ek5P6gzOTcy">тут</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ-5 простых приложений, которые сделали создателей миллионерами — разбираем реальные кейсы</title>
      <link>https://tproger.ru/articles/top-5-prostyh-prilozhenij--kotorye-sdelali-sozdatelej-millionerami---razbiraem-realnye-kejsy</link>
      <comments>https://tproger.ru/articles/top-5-prostyh-prilozhenij--kotorye-sdelali-sozdatelej-millionerami---razbiraem-realnye-kejsy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-5-prostyh-prilozhenij--kotorye-sdelali-sozdatelej-millionerami---razbiraem-realnye-kejsy</guid>
      <description><![CDATA[<p>Не обязательно делать Гугл, чтобы заработать миллион долларов. Рассказываем о максимально простых аппах, которые принесли своим разработчикам семизначную прибыль.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-5-prostyh-prilozhenij--kotorye-sdelali-sozdatelej-millionerami---razbiraem-realnye-kejsy">Топ-5 простых приложений, которые сделали создателей миллионерами — разбираем реальные кейсы</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Ретро]]></category>
      <category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[App Store]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 17 Apr 2025 14:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Такое приложение реально существовало в App Store и Google Play, а сейчас можно скачать аналоги. Идея максимально простая — разыгрывать друзей с помощью смешного звука. Сериал наверняка сделал игрушку популярной, и сейчас в Google Play на одной из игр более 100 000 скачиваний — считайте, реклама + встроенные покупки = миллионы долларов.</p><p>Это  лишь один из многих довольно общих примеров. Но есть уникальные кейсы, как разработчики с крайне простой идеей выпустили приложение и проснулись миллионерами — рассказываем о них в статье.</p><h2>Flappy Bird (олдскулы свело)</h2><p>Кто-то еще помнит эту безумную птичку? В 2013 году она появилась на iOS, а в 2014 — на Android. А разработал ее вьетнамский кодер Донг Нгуен всего за несколько дней. Сам программист заявлял, что всего его игры проходимы, и главное их отличие от сложных западных игрушек — простота, хард-левел и истинное веселье. В общем, те самые ретро-игры.</p><p>Суть, кажется, объяснять не стоит — все и так помнят, что есть пиксельная птичка, которой нельзя упасть или удариться об трубу. Самое же интересное — как в 2013 году к этой в какой-то степени дурацкой игре пришла такая популярность. На самом деле, до сих пор загадка: одни связывают это с роликом PewDiePie (на тот момент у него было уже более 20 млн подписчиков на YouTube, другие — с вирусным эффектом в соцсетях.</p><p>В январе 2014 птичка возглавила топ бесплатных приложений в американском и китайском App Store, а потом — в британском. Игрушку скачали более 50 млн раз, а разработчики <a href="https://www.theverge.com/2014/2/5/5383708/flappy-bird-revenue-50-k-per-day-dong-nguyen-interview">зарабатывали</a> с рекламы $50 000 долларов в сутки!</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-16/fee10295-8bfc-4792-b43f-acac0427dc99.png" alt="" /></figure><p>10 февраля 2014 года Нгуен неожиданно удалил Flappy Bird из App Store и Google Play. В интервью Forbes он объяснил это чувством вины: игра, задуманная как легкое развлечение на пару минут, стала для многих «наркотиком». Нгуен говорил, что не мог спать из-за давления популярности и хотел вернуть себе спокойствие. После удаления начался ажиотаж: телефоны с установленной игрой продавались на eBay за тысячи долларов, а рынок заполонили десятки клонов.</p><p>Однако в этом году должно было произойти чудо: в сентябре 2024 компания Gametech Holdings объявила, что готовит перезапуск игры в 2025 — она банально украла права у Нгуена, когда те истекли. Правда, твиттерские было <a href="https://wylsa.com/obnovlyonnuyu-flappy-bird-podozrevayut-v-svyazi-s-kriptoskamerami/">выяснили</a>, что это скам: Gametech связана с другой компанией — 1208 Productions, которая делает игры для Web 3 с NFT. А еще Gametech подписаны на кучу инфоцыганских аккаунтов в Твиттере. Вишня на торте — на <a href="https://flappybird.org/">официальном сайте</a> перезапуска птички лежала демка, один из юзеров ее скачал, и в конце его попросили завести криптокошелек. В общем, птичку не тапаем, на NFT-развод не попадаем.</p><p>Но в Flappy Bird все еще можно поиграть: <a href="https://flappybird.io/">здесь</a> лежит браузерная версия. Честно, феномен птички все еще для нас загадка, но зато это хороший пример, что можно создать абсолютно обычную игру и сделать так, чтобы она сильно завирусилась в сети.</p><h2>BeReal</h2><p>Та самая антисоциальная сеть, которая завирусилась в ТикТоке в 2022 году. Суть и реализация очень простая: приложение раз в день отправляет уведомление, и вы должны быстро сделать селфи — всего за две минуты. Неважно, где вы и что делаете — гуляете с собакой или поете в душе, главное — запостить фотографию в приложение. Никаких фильтров, масок и всего остального. Кстати, просто последить за друзьями нельзя: приложение не даст вам доступ к ленте, пока вы не выложите пост.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-16/68382bd8-526f-4adb-9d4d-dd843a7c58d2.png" alt="" /><figcaption>Ну, просто прелесть</figcaption></figure><p>Сейчас у приложения нет монетизации, поэтому все цифры основываются на оценках и капитализации. Последняя сделка по BeReal прошла в июне 2024 года — привлекли более $580 млн.</p><p>Как мы помним, красота и гениальность — в простых вещах. А простые вещи — те, которые происходят с нами каждый день. Считайте, что разработчики сделали миллионное состояние просто на том, что нас окружает.</p><h2>Wordle</h2><p>Это простая браузерная игра, в которой нужно угадать слово из пяти букв за шесть попыток. После каждой попытки игра подсказывает, какие буквы угаданы правильно: зеленым подсвечиваются те, которые стоят на своём месте, желтым — те, которые есть в слове, но стоят не там, и серым — те, которых в слове вообще нет.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-16/5fcc6a3c-e281-433e-8772-bee720dd6d6f.png" alt="" /></figure><p>Эту игру придумал программист Джош Уордл в 2021 году как подарок для своей девушки, которая любила словесные головоломки. Он выложил её в интернет просто «для друзей», но очень быстро Wordle стала вирусной. В январе 2022 года игрушку купила The New York Times за небольшую семизначную сумму, то есть где-то за $1-3 млн.</p><p>Технология тоже очень простая: обычная веб-страница, написанная на HTML, CSS и JavaScript. Загружается список слов, одно из них выбирается как «слово дня», и дальше работает простейшая логика — сравнение букв и подсветка.</p><p>Популярность тоже вполне объяснима. Во-первых, игра ужасно простая. Там нет рекламы, регистрации, внутриигровых покупок — просто заходишь и играешь. Во-вторых, можно сыграть только один раз в день, и это ограничение превратилось в фишку — у многих игроков это стало ритуалом. Кстати, в 2022 году wordle был самым частым запросом в Google среди американцев.</p><p>Автор этой статьи тоже обожает Вордл! Это еще и отличный шанс подтянуть свой английский. Если еще не пробовали — оцениваем <a href="https://www.nytimes.com/games/wordle/index.html">здесь</a>.</p><h2>Locket Widget</h2><p>Еще одна до жути простая идея: делаете фото в приложении, и оно появится у ваших друзей на главном экране в виде виджета.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-16/400181fc-f7f0-4485-94ad-9aba5c732f61.png" alt="" /></figure><p>Мэтт Мосс запустил Locket Widget в 2022 году — он разработал приложение всего за несколько недель для своей девушки, с которой у них были отношения на расстоянии (опять романтическая история). Сейчас им пользуются десятки миллионов людей по всему миру, а в 2022 году в него <a href="https://www.entrepreneur.com/business-news/what-is-locket-widget-the-new-photo-app-that-won-apple/440226">загрузили</a> более 2 млрд фотографий.</p><p>На пике популярности Мосс с командой привлекли $12,5 млрд инвестиций. Кстати, завирусилось приложение опять благодаря ТикТоку — видео в аккаунте Мосса набирали миллионы просмотров.</p><p>На самом деле подобные приложения, которые выводятся на экран в виде виджетов — настоящая золотая жила. Особенно популярными становятся различные карточки с мотивационными фразами, в общем, забирайте идею (в них можно сделать подписку за шрифты, тематики и визуал).</p><h2>Calm</h2><p>Calm — одно из самых известных приложений для медитации и сна. Его разработали два предпринимателя — Алекс Тью и Майкл Эктон Смит — в 2012 году. Идея была очень простой: помочь людям справляться со стрессом и тревогой с помощью коротких медитаций, приятной музыки. Интерфейс — тоже максимально минималистичный.</p><p>Когда Calm только появилось, никто особо не верил, что такое «спокойное» приложение может выстрелить. Но всё оказалось наоборот: люди устали от шума, соцсетей и перегрузки. Приложение стало настоящим островком тишины — его включали перед сном, в перерывах на работе или просто чтобы немного расслабиться.</p><p>В 2016 году Calm начал активно развиваться и добавлять новые функции, которые сделали его намного популярнее и полезнее для пользователей. Тогда появилась одна из главных фишек — Sleep Stories. Считайте, что это сказки на ночь, только для взрослых работящих людей. А сейчас самая популярная функция в приложении — 10-минутная медитация, которая доступна пользователям всего лишь 24 часа.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-16/60cba9e8-f1e4-42e8-9a72-3618c44ba98d.png" alt="" /><figcaption>Новый интерфейс приложения</figcaption></figure><p>Конечно, сейчас приложение разрослось и стало сложнее, но на старте это был очень простой интерфейс с небольшим количеством функций (хотя, наверное, в приложении для медитации именно так и должно быть).</p><p>Уже в 2019 году Calm стал первым «единорогом» в сфере ментального здоровья — его оценили в $1 млрд, а позже — и в $2 млрд. Плюс компания зарабатывает на ежемесячных и пожизненных подписках.</p><p>Как говорится, think different, а все гениальное — просто. Приложение на миллион долларов можно сделать даже за несколько дней, главное — немного удачи, крутая идея и промо.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>ТОП-17 курсов геймдизайна: лучшее онлайн-обучение для геймдизайнера</title>
      <link>https://tproger.ru/articles/top-17-kursov-gejmdizajna--luchwee-onlajn-obuchenie-dlya-gejmdizajnera</link>
      <comments>https://tproger.ru/articles/top-17-kursov-gejmdizajna--luchwee-onlajn-obuchenie-dlya-gejmdizajnera?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-17-kursov-gejmdizajna--luchwee-onlajn-obuchenie-dlya-gejmdizajnera</guid>
      <description><![CDATA[<p>Лучшие онлайн-курсы геймдизайна. Список школ, осуществляющих обучение на бесплатной или платной основе, а так же цены на курсы по дизайну игр</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-17-kursov-gejmdizajna--luchwee-onlajn-obuchenie-dlya-gejmdizajnera">ТОП-17 курсов геймдизайна: лучшее онлайн-обучение для геймдизайнера</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Веб-дизайн]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 06 Apr 2025 17:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Чтобы войти в сферу разработки игр, можно пройти курсы по геймдизайну. Это один из самых эффективных способов получить структурированные знания, практический опыт и обратную связь от профессионалов. Они помогают не только освоить теорию, но и сразу применять ее в реальных проектах, будь то создание прототипов, балансировка игровых систем или работа в команде.</p><p>Вместе с экспертами <a href="https://kursfinder.ru/">Kursfinder</a> я изучила более 20 предложений и выбрала 17 лучших онлайн-курсов по геймдизайну. В статье они представлены в виде подборок для удобства поиска. В начале я собрала 10 программ, которые, на мой взгляд, наиболее качественные. Если ни один из этих курсов не подходит вам, ознакомьтесь с дополнительным списком из трех программ. В конце статьи вы найдете подборку бесплатных материалов. Полный <a href="https://kursfinder.ru/gamedesign/">список курсов по теме</a> можно найти в каталоге Kursfinder.</p><h2>ТОП-10 лучших курсов по геймдизайну в 2026 году</h2><ol><li><a href="https://experts2.ru/mNvfXn?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=1">Геймдизайн. Концепт игры </a>от Skillbox — лучший курс по основам разработки концептов для игр, включая создание механик и истории.</li><li><a href="https://experts2.ru/XrHpzw?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=2">Профессия Геймдизайнер</a> от GeekBrains — программа по подготовке специалистов в области геймдизайна с фокусом на проектирование игр и их развитие.</li><li><a href="https://experts2.ru/OciUnu?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=3">Профессия Геймдизайнер с нуля до PRO</a> от Skillbox — интенсивное обучение, которое охватывает все этапы создания игр, от концепта до реализации.</li><li><a href="https://experts2.ru/sExetI?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=4">Геймдизайнер</a> от XYZ School — онлайн-курс по основам геймдизайна и разработки игр, включая создание увлекательных механик и баланса.</li><li><a href="https://experts2.ru/JctmiW?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=5">Профессия геймдизайнер</a> от Contented — вариант для тех, кто хочет стать геймдизайнером и научиться создавать успешные игровые проекты.</li><li><a href="https://experts2.ru/oYqBgj?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=6">Онлайн-курс по геймдизайну мобильных игр</a> от Onskills — курс ориентирован на создание мобильных игр и разработку игровых механик для мобильных платформ.</li><li><a href="https://experts2.ru/rAjXmk?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=7">Геймдизайн и разработка игр</a> от Международной академии бизнеса IAB — программа сочетает теорию геймдизайна и практическую разработку игр.</li><li><a href="https://experts2.ru/TUlfkd?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=8">Курсы геймдизайна</a> от Onskills —  обучение геймдизайну с нуля — от базовых концепций до сложных игровых систем.</li><li><a href="https://experts2.ru/pPsnJt?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=9">Геймдизайн для детей</a> от BKC —  курс для детей, который вводит их в основы геймдизайна и помогает развить творческое мышление.</li><li><a href="https://experts2.ru/GcraEw?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=10">Геймдизайн. Базовый курс</a> от Realtime — начальный курс по основам геймдизайна, включая создание игровых механик и концептуальную разработку.</li></ol><p>Обучение геймдизайну подходят широкому кругу людей, которые хотят профессионально заниматься созданием игр. В первую очередь, они будут полезны новичкам без опыта, но с искренним интересом к игровой индустрии и желанием освоить эту профессию с нуля. Также курсы принесут пользу представителям смежных профессий — программистам, художникам и сценаристам, которые хотят расширить свои компетенции и глубже понять принципы игрового дизайна. Особенно ценными такие программы окажутся для аналитически мыслящих творческих людей, которые любят разбирать игры на составляющие, изучать их механику и придумывать собственные игровые системы.</p><h2>Онлайн-курсы по геймдизайну</h2><p><b>1. </b><a href="https://experts2.ru/mNvfXn?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=1">Геймдизайн. Концепт игры</a> | <b>Skillbox</b></p><p>Вы научитесь создавать оригинальные игровые концепции, которые найдут отклик у аудитории. Освоите навыки составления концепт-документа и ведения игровой документации. Изучите методы создания увлекательных и захватывающих игр. Поймете, из каких этапов состоит процесс создания игры, и определите свою роль как геймдизайнера на каждом этапе.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/d5aae5a8-84d6-4101-b80e-69da5d88217e.png" alt="" /></figure><ul><li>Стоимость: 104 628 рублей</li><li>Длительность: 3 месяца</li><li>Формат обучения: видеоуроки, тестирования, проекты, домашняя работа</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам;</li><li>специалистам из смежных профессий.</li></ul><p><b>Преимущества:</b></p><ul><li>доступ навсегда;</li><li>скидка 40%;</li><li>курс в подарок;</li><li>бесплатная консультация;</li><li>персональная обратная связь;</li><li>проекты в портфолио;</li><li>стажировка в игровой студии.</li></ul><p><b>Недостатки:</b></p><ul><li>ограниченное время на скидку.</li></ul><p><b>Программа обучения:</b></p><ul><li>Создаем свою игру</li><li>Определяем целевую аудиторию</li><li>Создаем увлекательный сюжет</li><li>Определяем способы монетизации игры</li><li>Анализируем игру</li><li>Разрабатываем стратегию развития игры</li><li>Подводим итоги</li></ul><p><a href="https://experts2.ru/mNvfXn?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2. </b><a href="https://experts2.ru/XrHpzw?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=2">Профессия Геймдизайнер</a> | <b>GeekBrains</b></p><p>Вы освоите основы геймдизайна и разработаете концепцию собственной игры. Научитесь придумывать увлекательные игровые механики и создавать целые игровые миры. Станете частью сообщества студентов, изучающих игры. В команде вы будете работать над созданием игры в течение месяца. Такой опыт станет ценным дополнением к вашему резюме и повысит ваши шансы на успешное трудоустройство.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/2026c8c8-fbad-4c98-b6bb-e30ac3380871.png" alt="" /></figure><ul><li>Стоимость: 192 312 рублей</li><li>Длительность: 8 месяцев</li><li>Формат обучения: вебинары, видеоуроки, домашние задания, тестирования</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам;</li><li>тем, кто уже начал работать в данной сфере.</li></ul><p><b>Преимущества:</b></p><ul><li>скидка до 45%;</li><li>два курса на выбор в подарок;</li><li>повышенная скидка от менеджера;</li><li>помощь с трудоустройством;</li><li>бесплатная консультация.</li></ul><p><b>Недостатки:</b></p><ul><li>ограниченное количество мест на потоке.</li></ul><p><b>Программа обучения:</b></p><ul><li>Разработка игры</li><li>Стажировка в компании GameBox</li><li>Level Design</li><li>Геймдизайн. Баланс игры</li><li>Основы разработки игр</li><li>Заработок в играх</li><li>Создание документации</li></ul><p><a href="https://experts2.ru/XrHpzw?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=2">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3. </b><a href="https://experts2.ru/OciUnu?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=3">Профессия Геймдизайнер с нуля до PRO</a> | <b>Skillbox</b></p><p>Освойте искусство создания оригинальных игровых концепций в различных жанрах и разработки увлекательного игрового процесса. Вы будете работать с Unity и UE5, научитесь гармонично сочетать игровые механики и систему прокачки. Научитесь удерживать внимание игроков и создавать увлекательные игровые сценарии. После завершения основных программ и формирования портфолио сможете претендовать на позицию младшего разработчика. Школа поможет вам найти работу и подготовиться к собеседованию.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/37b183d1-88e2-4134-8a1e-442a8d69712a.png" alt="" /></figure><ul><li>Стоимость: 156 922 рубля</li><li>Длительность: 8 месяцев</li><li>Формат обучения: видеоуроки, тестирования, проекты, домашняя работа</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам с нуля.</li></ul><p><b>Преимущества:</b></p><ul><li>доступ навсегда;</li><li>скидка 40%;</li><li>курс в подарок;</li><li>бесплатная консультация;</li><li>персональная обратная связь;</li><li>проекты в портфолио.</li></ul><p><b>Недостатки:</b></p><ul><li>ограниченная скидка на рассрочку.</li></ul><p><b>Программа обучения:</b></p><ul><li>Разработка игры</li><li>Стажировка в компании GameBox</li><li>Level Design</li><li>Геймдизайн. Баланс игры</li><li>Основы разработки игр</li><li>Заработок в играх</li><li>Создание документации</li></ul><p><a href="https://experts2.ru/OciUnu?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4. </b><a href="https://experts2.ru/sExetI?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=4">Геймдизайнер</a> | <b>XYZ School</b></p><p>Освойте искусство разработки игровых механик, научитесь работать с документацией, создавать продуманные уровни и погружаться в атмосферу, максимально приближенную к реальным условиям работы геймдизайнера. После завершения обучения вы будете готовы начать карьеру в игровой индустрии. Программа разработана опытными профессионалами, которые работали над созданием таких игр, как Assassin’s Creed: Valhalla и Atomic Heart.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/2f1390a1-9f67-4cd9-a5e0-847dfabab37a.png" alt="" /></figure><ul><li>Стоимость: от 149 500 рублей</li><li>Длительность: 13 месяцев</li><li>Формат обучения: вебинары, видеоуроки, тестирования, практика, домашние задания</li><li>Сертификат: диплом или сертификат об обучении</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам с нуля.</li></ul><p><b>Преимущества:</b></p><ul><li>скидка 50%;</li><li>выгодная рассрочка;</li><li>дополнительная скидка за оплату целиком;</li><li>несколько тарифов на выбор.</li></ul><p><b>Недостатки:</b></p><ul><li>некоторым обучение покажется долгим.</li></ul><p><b>Программа обучения:</b></p><ul><li>Разработка игрового дизайна</li><li>Создание повествовательного дизайна</li><li>Проектирование уровней с помощью OUTBLOCK</li></ul><p><a href="https://experts2.ru/sExetI?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5. </b><a href="https://experts2.ru/JctmiW?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=5">Профессия геймдизайнер</a> | <b>Contented</b></p><p>Освойте навыки анализа рынка, оформления документов, работы с игровыми движками, настройки баланса игры, продвижения и поддержки проекта. Приобретите больше опыта, создавая прототипы игр на заданную тему в сжатые сроки. Это позволит вам расширить портфолио новыми проектами. Также будете много играть и разовьете насмотренность.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/2275033b-0350-496c-aba1-88c2bb1fa80f.png" alt="" /></figure><ul><li>Стоимость: 149 832 рубля</li><li>Длительность: 9 месяцев</li><li>Формат обучения: вебинары, воркшопы, видеоуроки, тестирования</li><li>Сертификат: сертификат</li></ul><p><b>Кому подойдет: </b></p><ul><li>тем, кто хочет создавать инди-игры;</li><li>тем, кто желает совмещать хобби с работой;</li><li>тем, кто хочет систематизировать знания.</li></ul><p><b>Преимущества:</b></p><ul><li>портфолио из более 40 работ;</li><li>грант 20 000 рублей на курс;</li><li>бесплатная консультация;</li><li>помощь с трудоустройством.</li></ul><p><b>Недостатки:</b></p><ul><li>не во всех тарифах есть блоки работы с Blender.</li></ul><p><b>Программа обучения:</b></p><ul><li>Вхождение в профессию</li><li>Как разработать интересную игру</li><li>Команда и стадии создания игры</li><li>Позиционирование и уникальность</li><li>Анализ и улучшение механик</li><li>Тестирование и проверка предположений</li></ul><p><a href="https://experts2.ru/JctmiW?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>6. </b><a href="https://experts2.ru/oYqBgj?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=6">Онлайн-курс по геймдизайну мобильных игр</a> | <b>Onskills</b></p><p>Онлайн-курс для тех, кто хочет стать геймдизайнером. Узнайте, как создать приложение с увлекательным геймплеем для мобильных устройств и как на этом можно заработать. Сертификат вы получите в электронном виде, а если вам нужен бумажный вариант, школа отправит его по почте России.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/f1ca1488-7d50-408c-ac78-b4c0a4f44326.png" alt="" /></figure><ul><li>Стоимость: от 1 900 рублей</li><li>Длительность: 11 уроков</li><li>Формат обучения: видеоуроки, практика</li><li>Сертификат: сертификат</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам;</li><li>создателям игр на ПК;</li><li>геймерам;</li><li>художникам;</li><li>разработчикам.</li></ul><p><b>Преимущества:</b></p><ul><li>выгодная рассрочка;</li><li>бесплатный урок;</li><li>неограниченный доступ к теории;</li><li>отличная техническая помощь.</li></ul><p><b>Недостатки:</b></p><ul><li>нет вебинаров.</li></ul><p><b>Программа обучения:</b></p><ul><li>Знакомство с профессией</li><li>Представление идей</li><li>Написание истории</li><li>Создание прототипов</li><li>Разработка механик</li><li>Достижение баланса</li><li>Анализ данных</li></ul><p><a href="https://experts2.ru/oYqBgj?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>7. </b><a href="https://experts2.ru/rAjXmk?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=7">Геймдизайн и разработка игр</a> |<b> Международная академия бизнеса IAB</b></p><p>Вы освоите основы геймдизайна, включая принципы создания увлекательных и сбалансированных игр. Научитесь разрабатывать игровые механики и системы, работать с инструментами и технологиями для создания игр, создавать прототипы, тестировать и отлаживать игры. Поймете структуру и элементы игрового процесса, разовьете навыки командной работы и сможете применить теоретические знания на практике для создания собственных игр или улучшения существующих проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/2c8e9b7b-3b19-4613-8b36-35cc26408576.png" alt="" /></figure><ul><li>Стоимость: 11 400 рублей</li><li>Длительность: 250 ак.часов</li><li>Формат обучения: видеоуроки, практика</li><li>Сертификат: диплом с международным приложением</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам.</li></ul><p><b>Преимущества:</b></p><ul><li>обучение можно начать бесплатно;</li><li>гибкий график;</li><li>помощь в поиске работы.</li></ul><p><b>Недостатки:</b></p><ul><li>мало технической поддержки.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы геймдизайна</li><li>История развития игр</li><li>Жанры и их особенности</li><li>Основные термины</li><li>Создание игровых ассетов</li><li>Разработка уровней и сцен</li><li>Баланс и сложность</li></ul><p><a href="https://experts2.ru/rAjXmk?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>8.</b> <a href="https://experts2.ru/TUlfkd?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=8">Курсы геймдизайна</a> | <b>Onskills</b></p><p>Обучение геймдизайнеров с нуля и получение сертификата. Узнайте, как создавать игры, которые будут увлекательными и популярными. Станьте частью сообщества GameDev с помощью Onskills. Смотрите лекции в удобное время. Доступ к курсу и всем его обновлениям останется у вас навсегда.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/2dab7a21-3416-48fc-b1aa-0e4adad4cd01.png" alt="" /></figure><ul><li>Стоимость: от 1 900 рублей</li><li>Длительность: 11 уроков</li><li>Формат обучения: видеоуроки, практика</li><li>Сертификат: сертификат</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам;</li><li>создателям игр на ПК;</li><li>геймерам;</li><li>художникам;</li><li>разработчикам.</li></ul><p><b>Преимущества:</b></p><ul><li>выгодная рассрочка;</li><li>бесплатный урок;</li><li>неограниченный доступ к теории;</li><li>отличная техническая помощь.</li></ul><p><b>Недостатки:</b></p><ul><li>иногда возникают технические сбои.</li></ul><p><b>Программа обучения:</b></p><ul><li>Знакомство с профессией</li><li>Представление идей</li><li>Написание истории</li><li>Создание прототипов</li><li>Разработка механик</li><li>Достижение баланса</li><li>Анализ данных</li></ul><p><a href="https://experts2.ru/TUlfkd?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>9. </b><a href="https://experts2.ru/pPsnJt?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=9">Геймдизайн для детей</a> | <b>BKC</b></p><p>Увлечение играми может привести к тому, что вы станете востребованным специалистом в этой области. Через игровую разработку можно достичь высокого уровня в программировании и создавать свои собственные миры, используя лишь свою фантазию. На программе детям расскажут, как использовать свои навыки и с чего начать, чтобы развить свой творческий потенциал и достичь успеха в этой области.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/9deaeb98-2b75-404c-b9ee-1e410701f307.png" alt="" /></figure><ul><li>Стоимость: 5 760 рублей</li><li>Длительность: по запросу</li><li>Формат обучения: вебинары, практика</li><li>Сертификат: сертификат</li></ul><p><b>Кому подойдет: </b></p><ul><li>детям 10–12 лет.</li></ul><p><b>Преимущества:</b></p><ul><li>подарки первым 30 ученикам;</li><li>скидка 10%;</li><li>оплата мат.капиталом.</li></ul><p><b>Недостатки:</b></p><ul><li>не указано время обучения.</li></ul><p><b>Программа обучения:</b></p><ul><li>Разработка платформера</li><li>Улучшение возможностей игры</li><li>Дизайн уровней и растительность</li><li>Интеграция программного кода</li><li>Неожиданные события и трудности</li></ul><p><a href="https://experts2.ru/pPsnJt?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=9">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>10.</b> <a href="https://experts2.ru/GcraEw?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=10">Геймдизайн. Базовый курс</a> | <b>Realtime</b></p><p>В кратчайшие сроки и с максимальной интенсивностью вы получите как теоретические, так и практические знания в сфере. Эти знания позволят вам определиться с дальнейшими шагами и выстроить четкий план развития в выбранной вами области. Кроме того, программа познакомит вас с бесплатными программами и приложениями, которые помогут вам повысить эффективность работы в любой сфере.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-02/62dae9f0-537a-495a-af62-51d620b7b3d6.png" alt="" /></figure><ul><li>Стоимость: 14 000 рублей</li><li>Длительность: 20 часов</li><li>Формат обучения: вебинары, практика</li><li>Сертификат: не указан</li></ul><p><b>Кому подойдет: </b></p><ul><li>специалистам различных профессий;</li><li>тем, кто хочет попасть в сферу разработки игр.</li></ul><p><b>Преимущества:</b></p><ul><li>помощь с трудоустройством;</li><li>выгодная стоимость;</li><li>сжатые сроки.</li></ul><p><b>Недостатки:</b></p><ul><li>не предусмотрена выдача сертификата.</li></ul><p><b>Программа обучения:</b></p><ul><li>Современное состояние игровой индустрии</li><li>Направления геймдизайна</li><li>Виды игр и их особенности</li><li>Жанры игр и их характеристики</li><li>Способы распространения игр</li></ul><p><a href="https://experts2.ru/GcraEw?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 3 курса по геймдизайну</h2><p>Дополнительное обучение на геймдизайнера — это возможность углубить специализацию или освоить новые направления в разработке игр. Они подойдут как начинающим, так и опытным разработчикам, которые хотят расширить свои навыки: от баланса игровой экономики до нарративного дизайна или работы с современными ИИ-инструментами.</p><ul><li><a href="https://experts2.ru/giCPkv?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=netop">Геймдизайн</a> от Алгоритмики. В процессе игры ребенок самостоятельно разрабатывает сюжет и создает образы персонажей. На каждом уроке дети знакомятся с новыми английскими словами, понятиями из игровой индустрии и основами тайм-менеджмента.</li><li><a href="https://experts2.ru/MohkYw?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=netop">Гейм-дизайн и разработка компьютерных игр</a> от Центра обучающих технологий. В ходе обучения студенты освоят не только создание игр с помощью Unity, но и приобретут знания в области оптимизации приложений для различных платформ, геймдизайна, монетизации и продажи игр.</li><li><a href="https://experts2.ru/DZrfub?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=netop">Геймдизайн: как делать игры, которые нравятся и приносят деньги</a> от AppTractor. Вы познакомитесь с множеством примеров реальных компаний и игр. Более того, у вас будет возможность пообщаться с лекторами напрямую после каждой лекции и задать им вопросы по теме, а также получить консультацию или рекомендацию.</li></ul><h2>Бесплатные курсы по геймдизайну</h2><p>Для тех, кто хочет освоить сферу без финансовых вложений, существуют бесплатные курсы по геймдизайну. Такие программы позволяют получить базовые знания о создании игр, принципах проектирования механик и работе с игровыми движками. Они подходят для начинающих, которые хотят попробовать себя в профессии, или для опытных разработчиков, желающих расширить свои навыки.</p><p><b>1.</b> <a href="https://experts2.ru/iUAbea?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=netop">Введение в игровую индустрию</a> — <b>Skillbox</b></p><p>Вы узнаете, какие профессии существуют в игровой индустрии. Поймете, какие перспективы у начинающего специалиста, и определитесь с направлением своей деятельности. Вы ознакомитесь с полным процессом разработки игр: от создания идеи до выпуска и продвижения продукта.</p><p><b>Главное о курсе:</b></p><ul><li>один месяц обучения;</li><li>17 видео в программе.</li></ul><p><b>2.</b> <a href="https://experts2.ru/hOkmsW?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=netop">Антипедагогика: Боги и герои</a> — <b>Stepik</b></p><p>Программа обучения игровому дизайну для тех, кто хочет сделать процесс обучения увлекательным и интересным. Как создавать и проводить игры на уроках и занятиях с детьми.</p><p><b>Главное о курсе:</b></p><ul><li>54 урока;</li><li>пять часов четыре минуты видео;</li><li>104 теста.</li></ul><p><b>3.</b> <a href="https://experts2.ru/dUxgzK?sub1=tproger-kf&amp;sub2=geimdizain-kursy&amp;sub4=netop">Технологии и компьютерные игры</a> — <b>Stepik</b></p><p>Программа обучения предназначена для того, чтобы познакомить участников НТО Junior с тематикой, связанной с технологиями и компьютерными играми, а также углубить их теоретические знания, освоить необходимые технологии и развить навыки.</p><p><b>Главное о курсе:</b></p><ul><li>24 урока;</li><li>три часа 11 минут видео;</li><li>53 теста;</li><li>шесть интерактивных задач.</li></ul><p><b>4. </b><a href="https://youtube.com/playlist?list=PLEt38_gfsmsKY3ADyJPf8X-_wQRG_ituf&amp;si=Nq2V4qj5yeLPbN7U">Геймдизайн и его приемы</a> — <b>XYZ School</b></p><p>Все о создании игр: от отдельных элементов и методов до идей и концепций известных создателей.</p><p><b>Главное о курсе: </b></p><ul><li>философия геймдизайна;</li><li>контрольные точки;</li><li>как стимулируют игроков;</li><li>баланс в играх.</li></ul><h2>Интересная информация о профессии</h2><p><b>Геймдизайнер</b> — это специалист, который создает игровые концепции, разрабатывает правила и механику игр, чтобы обеспечить увлекательный игровой процесс. Вот несколько интересных фактов о профессии геймдизайнера:</p><ul><li>Многогранность профессии. Специалист может заниматься не только разработкой игр, но и тестированием игровых механик, анализом данных, созданием нарратива (повествования) в игре, взаимодействием с командой разработчиков для реализации идей.</li></ul><ul><li>Творческий подход. Профессия требует креативности и способности мыслить нестандартно. Работники часто вдохновляются различными источниками, такими как литература, искусство, кино и другие игры.</li></ul><ul><li>Командная работа. Специалисты обычно работают в команде, которая может включать в себя художников, программистов, звукорежиссеров и других специалистов. Важно уметь эффективно взаимодействовать с коллегами и координировать свои усилия.</li></ul><ul><li>Влияние на индустрию. Геймдизайнеры могут оказывать значительное влияние на игровую индустрию, создавая популярные игры, которые становятся культовыми среди игроков. Их работа может определять тренды и направления развития игр.</li></ul><ul><li>Постоянное обучение. Игровая индустрия постоянно развивается, поэтому работникам необходимо постоянно учиться и следить за новыми тенденциями, технологиями и инструментами.</li></ul><ul><li>Разнообразие проектов. Геймдизайнеры могут работать над различными типами игр, включая мобильные, консольные, компьютерные и онлайн-игры. Это позволяет им приобретать разнообразные навыки и опыт.</li></ul><ul><li>Возможность влиять на эмоции игроков. Одна из самых важных задач — создание игрового опыта, который вызывает у игроков эмоции и оставляет впечатление. Это требует глубокого понимания психологии игроков и умения создавать захватывающие истории.</li></ul><ul><li>Баланс и оптимизация. Работники должны уделять внимание балансу игровых механик, чтобы обеспечить справедливую и увлекательную игру для всех игроков. Они также оптимизируют игровой процесс для достижения наилучшего пользовательского опыта.</li></ul><ul><li>Необходимость проработки деталей. Даже мелкие детали в игре могут существенно повлиять на впечатление от нее. Поэтому специалисты часто тратят много времени на проработку мелочей.</li></ul><ul><li>Постоянное взаимодействие с сообществом. Специалисты могут получать обратную связь от игроков через форумы, социальные сети и другие платформы. Это помогает им улучшать игры и учитывать интересы сообщества.</li></ul><h2>Чем занимается</h2><h2>Основные задачи геймдизайнера:</h2><p><b>Разработка механик</b></p><ul><li>Придумывает, как игрок будет взаимодействовать с миром (движение, бой, диалоги, экономика и т. д.).</li></ul><ul><li>Балансирует сложность, чтобы игра была и интересной, и справедливой.</li></ul><p><b>Создание игрового мира и контента</b></p><ul><li>Продумывает уровни, квесты, сюжетные повороты (часто вместе с нарративным дизайнером).</li></ul><ul><li>Определяет, какие предметы, враги и способности появятся в игре.</li></ul><p><b>Проектирование игровой экономики</b></p><ul><li>Рассчитывает, как игрок будет получать ресурсы, тратить их и прогрессировать.</li></ul><ul><li>В мобильных играх — разрабатывает системы монетизации (донаты, боевые пропуска и т. д.).</li></ul><p><b>Работа с документацией</b></p><ul><li>Составляет GDD (Game Design Document) — «библию» игры, где прописаны все механики и правила.</li></ul><ul><li>Объясняет команде (художникам, программистам), как все должно работать.</li></ul><p><b>Тестирование и итерации</b></p><ul><li>Играет в ранние версии, ищет баги и «неудобные» моменты.</li></ul><ul><li>Меняет параметры (например, урон оружия или скорость передвижения), чтобы игра стала увлекательнее.</li></ul><h2>С какими специалистами работает геймдизайнер?</h2><ul><li>Художники — чтобы визуал соответствовал геймплею.</li><li>Программисты — чтобы механики правильно работали в коде.</li><li>Продюсеры — чтобы уложиться в сроки и бюджет.</li><li>Тестировщики — чтобы находить и исправлять ошибки.</li></ul><h2>Примеры решений геймдизайнера:</h2><ul><li>В RPG он решает, сколько опыта давать за убийство монстра, чтобы прокачка не была слишком быстрой или медленной.</li><li>В шутере — определяет, как быстро восстанавливается здоровье, чтобы игра оставалась динамичной, но не слишком легкой.</li><li>В мобильной игре — придумывает, как мотивировать игрока заходить каждый день (например, ежедневные награды).</li></ul><h2>Чем геймдизайнер НЕ занимается?</h2><ul><li>Не рисует концепты (это работа концепт-художников).</li><li>Не анимирует персонажей (это делают аниматоры).</li><li>Не программирует (но может писать простые скрипты для прототипов).</li></ul><p><b>Если коротко:</b> геймдизайнер — это архитектор игры. Он отвечает за ее «удобство», баланс и удовольствие от процесса.</p><h2>Навыки, необходимые для работы</h2><p>Чтобы успешно работать в геймдизайне, нужен уникальный микс из креатива, аналитики и soft skills. Вот главные умения, которые требуются в индустрии:</p><p><b>Hard Skills (Технические навыки)</b></p><p><b>Проектирование игровых механик:</b></p><ul><li>Умение придумывать и описывать правила, системы и взаимодействия (например, боевую систему, экономику, прокачку).</li></ul><ul><li>Понимание баланса (например, как сделать игру сложной, но не несправедливой).</li></ul><p><b>Работа с инструментами:</b></p><ul><li>Документирование: написание GDD (Game Design Document), таблиц баланса, схем взаимодействий.</li></ul><ul><li>Прототипирование: базовое владение Unity, Unreal Engine, Godot или даже Tabletop Simulator (для настолок).</li></ul><ul><li>Анализ данных: чтение метрик (в мобильных играх — retention, monetization).</li></ul><p><b>Знание игровых жанров и трендов:</b></p><ul><li>Понимание, чем отличаются геймдизайновские решения в RPG, шутерах, стратегиях и казуальных играх.</li></ul><ul><li>Умение анализировать успешные/провальные игры и выявлять причины их качества.</li></ul><p><b>Основы смежных дисциплин:</b></p><ul><li>Базовое понимание программирования (логика, простые скрипты на C#, Python или визуальные скрипты).</li></ul><ul><li>Основы психологии игрока (мотивация, теория вознаграждения, поведенческие паттерны).</li></ul><p><b>Soft Skills (Гибкие навыки)</b></p><p><b>Креативность и логика:</b></p><ul><li>Способность генерировать идеи, но также отбрасывать лишнее — дизайн это про ограничения.</li></ul><ul><li>Умение видеть систему целиком: как механики влияют друг на друга.</li></ul><p><b>Коммуникация и работа в команде</b></p><ul><li>Четкое объяснение своих идей художникам, программистам, продюсерам.</li></ul><ul><li>Умение принимать критику и дорабатывать дизайн под требования проекта.</li></ul><p><b>Аналитическое мышление:</b></p><ul><li>Способность разбирать игры на «составляющие» и понимать, почему они работают (или нет).</li></ul><ul><li>Любовь к тестированию и итерациям — геймдизайн это постоянные правки.</li></ul><p><b>Тайм-менеджмент и адаптивность:</b></p><ul><li>Работа в условиях жестких сроков (особенно перед релизом).</li></ul><ul><li>Готовность переделывать систему с нуля, если она не работает.</li></ul><p><b>Дополнительные плюсы</b></p><ul><li>Опыт в моддинге или создании небольших игр (хоть на GameMaker или Roblox).</li></ul><ul><li>Участие в Game Jams (например, Ludum Dare) — ценится в резюме.</li></ul><ul><li>Знание игровых движков (даже на базовом уровне).</li></ul><ul><li>Навыки гейм-аналитики (A/B-тесты, метрики F2P-игр).</li></ul><h2>Какие бывают специализации в геймдизайне (системный, левел, нарративный и т. д.)?</h2><p><b>Геймдизайн </b>— широкая область, и в крупных студиях роли часто разделяют. Основные специализации:</p><h2>Системный геймдизайнер</h2><p><b>Чем занимается: </b>проектирует сложные игровые системы — боевую механику, экономику, прокачку, инвентарь.</p><p><b>Пример: </b>расчет урона, стоимости предметов, скорости прогресса.</p><p><b>Важно:</b> аналитическое мышление, понимание математики и логики.</p><h2>Левел-дизайнер</h2><p><b>Чем занимается: </b>создает уровни, локации, расставляет врагов и объекты.</p><p><b>Пример:</b> проектирование карты в шутере или лабиринта в RPG.</p><p><b>Важно: </b>чувство темпа, понимание «потока» игры (flow).</p><h2>Нарративный дизайнер</h2><p><b>Чем занимается:</b> работает с сюжетом, диалогами, лором, квестами.</p><p><b>Пример:</b> написание ветвящихся диалогов в Mass Effect.</p><p><b>Важно: </b>навыки сторителлинга, иногда — сценарное мастерство.</p><h2>Экономический дизайнер</h2><p><b>Чем занимается: </b>балансирует внутриигровую валюту, цены, донат в F2P-играх.</p><p>Пример: система «гемов» в Clash of Clans.</p><p><b>Важно: </b>знание Excel, теория игр.</p><h2>UX/UI-дизайнер в играх</h2><p><b>Чем занимается: </b>проектирует интерфейсы, подсказки, меню.</p><p><b>Пример: </b>удобное колесо быстрого доступа в Skyrim.</p><p><b>Важно:</b> понимание юзабилити, работа в Figma/Adobe XD.</p><h2>Технический геймдизайнер</h2><p><b>Чем занимается: </b>связующее звено между дизайнерами и программистами, пишет скрипты.</p><p><b>Пример:</b> настройка ИИ врагов через Blueprint в Unreal Engine.</p><p><b>Важно: </b>базовые навыки программирования.</p><h2>Другие ниши:</h2><p><b>Контент-дизайнер</b> — создает предметы, способности, персонажей.</p><p><b>Мета-дизайнер </b>— проектирует долгосрочную мотивацию (например, сезоны в Fortnite).</p><h2>Как выглядит типичный рабочий день геймдизайнера?</h2><p>Расписание сильно зависит от стадии проекта (препродакшн, активная разработка, полиш перед релизом) и типа студии (AAA, инди, мобильная разработка). Но общий шаблон выглядит так:</p><h2>Утро (2–3 часа)</h2><p><b>Синк-митинг с командой</b></p><ul><li>Обсуждаются текущие задачи, проблемы, планы на день.</li></ul><ul><li>Вопросы от программистов (Как должна работать эта механика?).</li></ul><ul><li>Правки от продюсера (Нужно ускорить прогрессию).</li></ul><p><b>Проверка новых билдов</b></p><ul><li>Тестирование вчерашних изменений: не сломала ли новая механика старые системы?</li></ul><ul><li>Заведение багов в трекер (Jira, Trello).</li></ul><h2>День (4–5 часов)</h2><p><b>Проектирование и документация</b></p><ul><li>Доработка GDD (Game Design Document) — описание новых механик.</li></ul><ul><li>Создание таблиц баланса в Excel (урон, цены, скорость прокачки).</li></ul><ul><li>Прототипирование в Unity/Unreal (если техдизайнер — настройка скриптов).</li></ul><p><b>Совещания</b></p><ul><li>С художниками — согласование визуала под геймплей.</li></ul><ul><li>С нарративным дизайнером — интеграция квестов в систему.</li></ul><ul><li>С продюсером — отчет по срокам.</li></ul><p><b>Итерации по фидбеку</b></p><ul><li>Правка механики после тестов: например, уменьшение сложности босса.</li></ul><ul><li>Переписывание диалогов по замечаниям сценаристов.</li></ul><h2>Вечер (2–3 часа)</h2><p><b>Тестирование и фиксы</b></p><ul><li>Играет в текущую сборку, ищет дизайнерские косяки:</li></ul><ul><li>Подготовка задач на завтра.</li></ul><p><b>Креатив в тишине (если есть силы)</b></p><ul><li>Придумывание новых идей для игры.</li></ul><ul><li>Анализ конкурентов (Как в Elden Ring сделали прогрессию оружия?).</li></ul><h2>Нюансы для разных ситуаций</h2><ul><li>В начале проекта — больше митингов, мозговых штурмов, создание прототипов.</li></ul><ul><li>Перед релизом — аврал, правки по 100 раз, стресс (Кранч).</li></ul><ul><li>В инди-командах — геймдизайнер часто сам лезет в движок, рисует схемы на салфетках.</li></ul><ul><li>В мобильных играх — копание в аналитике (почему игроки уходят на 3-м уровне?).</li></ul><h2>Какие самые распространенные мифы о профессии?</h2><p><b>«Геймдизайнер только играет в игры»</b></p><p><b>На деле:</b> 10% игры, 90% — документы, таблицы, встречи и правки.</p><p><b>«Нужно уметь рисовать/программировать»</b></p><p><b>Реальность: </b>это плюс, но не обязательно. Главное — понимать принципы дизайна.</p><p><b>«Геймдизайнер — главный по идеям»</b></p><p><b>Правда:</b> идеи — 1% работы. 99% — их реализация, тестирование и доработка.</p><p><b>«Достаточно любить игры»</b></p><p><b>Факт: </b>нужно анализировать их, понимать, почему они работают (или нет).</p><p><b>«В индустрии берут только с опытом»</b></p><p><b>На самом деле: </b>начать можно с моддинга, Game Jams или QA.</p><h2>Какие инструменты и движки используют геймдизайнеры?</h2><h2>Движки</h2><ul><li>Unity — для мобильных и инди-игр (C#-скриптинг).</li></ul><ul><li>Unreal Engine — для AAA (визуальные скрипты Blueprint).</li></ul><ul><li>Godot — легкий аналог Unity для 2D.</li></ul><h2>Документирование</h2><ul><li>Google Docs/Notion — для GDD.</li></ul><ul><li>Excel/Google Sheets — для баланса (формулы, графики).</li></ul><ul><li>Miro/Figma — схемы механик, интерфейсов.</li></ul><h2>Тестирование</h2><ul><li>Jira/Trello — трекинг задач.</li></ul><ul><li>DevTools движков — дебаг механик.</li></ul><h2>Аналитика (в F2P):</h2><p>Firebase/GameAnalytics — метрики игроков.</p><h2>Как нейросети и AI изменят геймдизайн?</h2><p>Геймдизайн уже начал трансформироваться под влиянием ИИ, и в ближайшие 5–10 лет изменения станут еще более радикальными. Вот ключевые направления:</p><p><b>Автоматизация рутины</b></p><p><b>Генерация контента</b></p><ul><li>Уровни и локации: ИИ (как Procedural Generation 2.0) сможет создавать уникальные, но сбалансированные уровни по запросу (сгенерируй подземелье в стиле Dark Souls).</li></ul><ul><li>Персонажи и диалоги: нейросети (например, ChatGPT) будут писать ветвящиеся диалоги, адаптируя их под стиль игры.</li></ul><ul><li>Текстуры и 3D-модели: инструменты вроде MidJourney/Stable Diffusion ускорят создание концептов.</li></ul><p><b>Баланс и тестирование</b></p><ul><li>AI-тестеры будут находить базы и дисбаланс быстрее людей.</li></ul><ul><li>Динамическая балансировка: ИИ подстроит сложность под навыки игрока в реальном времени.</li></ul><p><b>Новые возможности для дизайнеров</b></p><p><b>Прототипирование за минуты</b></p><ul><li>Генерация готовых механик по описанию (сделай систему крафта как в Skyrim, но с элементами алхимии).</li></ul><ul><li>ИИ-помощники (типа Copilot для геймдизайна) будут предлагать решения:</li></ul><ul><li>Как сделать босса сложным, но не нечестным?</li><li>Какая экономика подойдет для мобильной RPG?</li></ul><p><b>Персонализированный геймплей</b></p><ul><li>Адаптивные сюжеты, где ИИ меняет историю под действия игрока.</li></ul><ul><li>Уникальные враги, созданные на основе стиля игры пользователя.</li></ul><p><b>Будущее профессии</b></p><ul><li>Геймдизайнер 2.0 — это куратор ИИ, а не рабочая лошадка.</li></ul><ul><li>Появятся новые специализации:</li></ul><ul><li>AI-дизайнер — настройка нейросетей под нужды игры.</li><li>Промт-инженер — мастер формулировок для генеративного ИИ.</li></ul><ul><li>Инди-разработка выиграет: маленькие команды смогут делать контент уровня AAA.</li></ul><h2>Где и как учиться</h2><p>Профессия геймдизайнера требует практики, аналитического мышления и понимания игровой индустрии. Формальное образование — не обязательное условие, но оно может ускорить вход в профессию. Вот основные пути обучения:</p><p><b>Высшее и специальное образование</b></p><p><b>Университеты и колледжи</b></p><p><b>Игровые вузы и факультеты</b></p><p>Некоторые учебные заведения предлагают программы по геймдизайну, разработке игр или интерактивному дизайну. Обучение обычно включает:</p><ul><li>Основы геймдизайна (механики, баланс, нарратив).</li></ul><ul><li>Работу с игровыми движками (Unity, Unreal Engine).</li></ul><ul><li>Программирование для дизайнеров (логика, скриптинг).</li></ul><ul><li>Командные проекты (создание игр в группах).</li></ul><p><b>Смежные специальности</b></p><p>Если нет узкопрофильных программ, подойдут:</p><ul><li>Компьютерные науки / Программирование (полезно для технического дизайна).</li></ul><ul><li>Психология / Маркетинг (понимание поведения игроков).</li></ul><ul><li>Литература / Сценарное мастерство (для нарративного дизайна).</li></ul><h2>Онлайн-университеты и курсы</h2><p>Многие платформы предлагают структурированные программы от основ до продвинутых тем:</p><ul><li>Курсы по геймдизайну (механики, баланс, документация).</li></ul><ul><li>Специализации по игровым движкам (Unity, Unreal, Godot).</li></ul><ul><li>Интенсивные программы с менторской поддержкой.</li></ul><p><b>Самообразование</b></p><p><b>Книги и теория</b></p><p>Базовые знания можно получить из книг, например:</p><ul><li>Основы геймдизайна (механики, циклы вовлеченности).</li></ul><ul><li>Психология игроков (мотивация, reward-системы).</li></ul><ul><li>Анализ игр (разбор успешных и провальных проектов).</li></ul><p><b>Практика и создание игр</b></p><ul><li>Game Jams (соревнования по созданию игр за 48–72 часа).</li></ul><ul><li>Моддинг (изменение существующих игр, например, карты для Warcraft 3, моды для Skyrim).</li></ul><ul><li>Инди-разработка (небольшие проекты на Unity, Ren'Py, RPG Maker).</li></ul><p><b>Игровые движки и инструменты</b></p><ul><li>Unity, Unreal Engine, Godot — для прототипирования.</li></ul><ul><li>Figma, Miro — для схем и документирования механик.</li></ul><ul><li>Trello, Notion — для организации работы.</li></ul><p><b>Сообщество и нетворкинг</b></p><ul><li>Форумы и Discord-серверы (обсуждение дизайна, поиск команды).</li></ul><ul><li>Конференции и митапы (GDC, DevGAMM, локальные ивенты).</li></ul><ul><li>Портфолио и блоги (публикация разборов игр, своих проектов).</li></ul><p><b>Опыт работы и старт карьеры</b></p><p><b>Стажировки и Junior-позиции</b></p><ul><li>Тестирование игр (QA) → понимание багов и игровых систем.</li></ul><ul><li>Ассистент геймдизайнера → помощь в балансе и документации.</li></ul><ul><li>Левел-дизайн / Нарративный дизайн → узкие роли с ростом в геймдизайн.</li></ul><p><b>Инди-студии и пет-проекты</b></p><p>Многие начинают с некоммерческих проектов, чтобы набрать опыт.</p><h2>Как выбрать путь?</h2><ul><li>Если хотите структуру → курсы, университеты.</li></ul><ul><li>Если готовы к самообучению → книги + практика (Game Jams, моддинг).</li></ul><ul><li>Если нужен быстрый вход в индустрию → стажировки в QA или инди-команды.</li></ul><h2>Заработная плата</h2><p>Размер оплаты труда специалиста по разработке игр определяется его опытом и местом работы. В столице, например, недавно пришедшие в профессию могут рассчитывать на доход до 70 000 рублей в месяц, работники со средним уровнем квалификации — от 70 000 рублей, а профессионалы — от 205 000 рублей. Чтобы получить актуальную информацию о зарплатах и вакансиях, стоит обратиться к специализированным ресурсам по поиску работы, таким как <a href="https://hh.ru/search/vacancy?area=1&amp;professional_role=25&amp;search_field=name&amp;search_field=company_name&amp;search_field=description&amp;text=%D0%B3%D0%B5%D0%B9%D0%BC%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD%D0%B5%D1%80&amp;enable_snippets=false">hh.ru.</a> На этих сайтах вы сможете найти предложения от прямых работодателей, которые указывают требования и условия оплаты труда.</p><h2>Заключение</h2><p>Игровая индустрия меняется быстро, и успех в ней требует гибкости и готовности учиться. Но если вы действительно увлечены играми и готовы вкладывать силы в их создание, курсы по геймдизайну станут отличным трамплином для карьеры. Главное — не останавливаться на теории и сразу применять знания на практике. Ведь лучший способ научиться делать игры — это просто начать их делать.</p><p><b>Подборки по схожим темам:</b><b></b></p><ol><li><a href="https://tproger.ru/articles/kursy-po-razrabotke-igr-253321">Лучшие курсы по разработке игр</a></li><li><a href="https://tproger.ru/articles/kursy-veb-dizajna">Лучшие курсы по Веб-дизайну</a></li></ol><p><i>В случае выявления ошибок, неточностей или устаревшей информации, пожалуйста, сообщите об этом в комментариях. Также вы можете указать, если хотите, чтобы я добавила проверенное вами обучение в подборку.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Что значит быть инженером в новых реалиях? И какой смысл мы вкладываем в эти слова — расскажем на GPB CONF!</title>
      <link>https://tproger.ru/articles/chto-znachit-byt-inzhenerom-v-novyh-realiyah--i-kakoj-smysl-my-vkladyvaem-v-eti-slova---rasskazhem-na-gpb-conf-</link>
      <comments>https://tproger.ru/articles/chto-znachit-byt-inzhenerom-v-novyh-realiyah--i-kakoj-smysl-my-vkladyvaem-v-eti-slova---rasskazhem-na-gpb-conf-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-znachit-byt-inzhenerom-v-novyh-realiyah--i-kakoj-smysl-my-vkladyvaem-v-eti-slova---rasskazhem-na-gpb-conf-</guid>
      <description><![CDATA[<p>22 апреля пройдет конференция Газпромбанк.Тех для разработчиков и инженеров.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-znachit-byt-inzhenerom-v-novyh-realiyah--i-kakoj-smysl-my-vkladyvaem-v-eti-slova---rasskazhem-na-gpb-conf-">Что значит быть инженером в новых реалиях? И какой смысл мы вкладываем в эти слова — расскажем на GPB CONF!</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Agile]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Инновации]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Apr 2025 12:25:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Приходи на конференцию Газпромбанк.Тех для разработчиков и инженеров!</p><p>22 апреля тебя ждут крутые спикеры, секретный гость и два мощных трека.<i></i></p><h2>Hard</h2><p>Наш хардовый трек — для тех, кто в проде с закрытыми глазами. API First, компонентные и контрактные тесты, мониторинг и SRE. Обсудим реальные кейсы нашего банка и как мы создаём системы, которые работают стабильно и эффективно.</p><p>Как внедрить API First в сложную финтех-инфраструктуру с учетом legacy-систем? Разберем, почему стандарт AsyncAPI не всегда подходит для крупных систем, как мы адаптировали его под наши реалии и разработали собственные инструменты.</p><p>Покажем сравнительный анализ решений, демонстрацию работы нашего генератора и подход к безболезненному переходу на API First. Подробности в докладе старшего технического руководителя Максима Морозова.</p><p>Head of profession QA Кристина Клигер поделится, как через развитие команды тестирования можно быстро доставлять фичи до клиентов и радовать бизнес.</p><p>Глава центра развития ИТ-мониторинга Валентин Лебедев раскроет секреты превращения мониторинга в сервис. Живет ли OpenSource в крупных предприятиях?</p><h2>Soft</h2><p>В ламповой уютной атмосфере на пуфике с бутером в руке обсудим, что такое настоящий софт. Как растить инженеров, внедрять изменения и работать с сопротивлением команд и представителей бизнеса.</p><p>СТО Виктор Цветков и Head of profession SA Юлия Григорьева расскажут, какие способы внедрения изменений существуют по степени мягкости. Почему важно учитывать корпоративную культуру при работе с изменениями. Далее поговорим про неотъемлемую часть — обучение команды и работе с их сопротивлением новым практикам. Поделимся нашими лайфхаками и секретами.</p><p>Head of Profession Вадим Ваганов объяснит, зачем коммитить в main несколько раз на дню. Спойлер: чем чаще релизишься, тем меньше ошибок.</p><p>Техлид Роман Олеск поделится лайфхаками для успешного роста ваших инженеров. Расскажем о матрице инженерных ролей и компетенций, а также о персональных треках развития сотрудников.</p><h2>Экспозона</h2><p>50 экспертов Газпромбанк.Тех ждут тебя, чтобы погрузить в специфику нашей работы.</p><p>16 стендов объединят вместе ИТ-направления в нашем банке:</p><p>Data Science, RPA, Искусственный интеллект, Инновации, Database, Backend, QA, DevOps, Frontend, Мобильная разработка iOS и Android, Product Design, Кибербезопасность, Business Analysis, System Analysis, IT Recruitment и Agile.</p><p>Не упусти возможность лично пообщаться с экспертами. Узнай из первых уст, как банк запускает инновационные стартапы, почему с помощью Data Science можно решать творческие задачи и что нужно для запуска собственного робота. Мы расскажем, какие современные технологии и подходы используют команды.</p><h2>Нетворкинг</h2><p>После официальной части мероприятия приглашаем остаться и продолжить общение в неформальной обстановке. С нас космические угощения и напитки!</p><h2>Как закоммититься</h2><p>Вход по мультипаспорту:)</p><p><a href="https://events.online.gpb.ru/or/a55ad170-2cc2-4d1d-8947-b9f946925f86">Торопись, количество мест ограничено!</a></p><p>До встречи на GPB CONF!</p><p>А <a href="http://www.gazprombank.tech/">тут</a> можно узнать больше о наших проектах.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как проектировать интерфейсы для мобилок: подробный гайд</title>
      <link>https://tproger.ru/articles/principy-proektirovaniya-interfejsov-dlya-mobilnyh-prilozhenij</link>
      <comments>https://tproger.ru/articles/principy-proektirovaniya-interfejsov-dlya-mobilnyh-prilozhenij?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/principy-proektirovaniya-interfejsov-dlya-mobilnyh-prilozhenij</guid>
      <description><![CDATA[<p> Как спроектировать интерфейс мобильного приложения. Показываем основные нюансы, на которые стоит обратить внимание. Рассматриваем пошаговую инструкцию ✔ Tproger
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/principy-proektirovaniya-interfejsov-dlya-mobilnyh-prilozhenij">Как проектировать интерфейсы для мобилок: подробный гайд</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Паттерны проектирования]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 09 Dec 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Проектирование мобильных приложений — это сложный процесс, требующий сочетания эстетики, функциональности и удобства использования. Здесь важно учитывать следующие  аспекты — интуитивно понятная навигация, визуальная иерархия, адаптивность, минимализм и доступность. Сегодня рассмотрим основные принципы создания интерфейсов, которые обеспечивают высокий уровень юзабилити и улучшают пользовательский опыт.</p><h2>Принципы удобства использования (Usability) в мобильных приложениях</h2><p>Удобство использования или юзабилити — ключевой элемент успешного проектирования мобильных приложений. Этот принцип нацелен на понятное, простое и приятное взаимодействие пользователей с интерфейсом приложения.</p><h3>Что такое удобство использования и почему это важно?</h3><p>Удобство использования — это показатель того, насколько легко и эффективно пользователь может выполнять задачи в приложении. Оно играет решающую роль в удержании аудитории: даже функциональное приложение может быть отвергнуто, если его интерфейс неудобен. Как понять, что все правильно?</p><ul><li>Требуется больше времени на взаимодействие с приложением;</li><li>Снижается количество ошибок пользователей;</li><li>Повышается лояльность благодаря положительному опыту.</li></ul><h3>Интуитивно понятная навигация и структура приложения</h3><p>Интуитивность — когда пользователю не нужно учиться работать с приложением. Ключевые элементы:</p><ul><li><b>Простая структура. </b>Главное меню должно быть минималистичным, с четким выделением основных функций;</li><li><b>Ожидаемое поведение интерфейса.</b> Элементы вроде кнопок или ссылок должны выглядеть так, как предполагает пользователь;</li><li><b>Видимость пути.</b> Всегда важно показывать, где находится пользователь и как он может вернуться к началу.</li></ul><p>Пример хорошей навигации — использование нижней панели с доступом к ключевым разделам приложения. Плохая навигация — вложенные меню, где нужно нажать на кучу кнопок, чтобы, например, вернуться к началу.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-12-03/3e8cb6c1-0145-42a2-8031-9731cb4d0669.png" alt="" /><figcaption>Хорошая навигация на Spotify</figcaption></figure><h3>Упрощение взаимодействия с учётом ограниченного экрана</h3><p>Маленькие экраны мобильных устройств требуют продуманного подхода. Что учитываем:</p><ul><li>Минимум информации на одном экране. Разделение задач на этапы делает взаимодействие удобным;</li><li>Используем жесты (например, свайпы) для экономии пространства.</li><li>Делаем контрастный и четкий дизайн, адаптированный для восприятия на малых экранах.</li></ul><h3>Примеры хорошей и плохой навигации в мобильных интерфейсах</h3><p><b>Примеры хорошей навигации:</b></p><ul><li>Приложения для путешествий (например, карты), в которых все ключевые функции видны сразу.</li><li>Маркетплейсы, где есть кнопки быстрого доступа к категориям.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-12-03/67915ec3-538e-4230-85bf-412728957a12.png" alt="" /><figcaption>Так выглядят карты от Apple</figcaption></figure><p><b>Примеры плохой навигации:</b></p><ul><li>Приложения, где ключевые элементы «спрятаны» в дополнительных меню (например, цена на продукт или вкладка для скачивания)</li><li>Непонятные иконки без подписей, из-за которых пользователь теряется (так было, например, в ранних версиях Snapchat).</li></ul><p>Принципы юзабилити при проектировании мобильных приложений — это не только создание привлекательного дизайна, но и забота о функциональности и комфорте взаимодействия. Продуманная структура, простота и адаптация к ограничениям экранов формируют положительный пользовательский опыт, который выделит приложение на фоне других.</p><h2>Адаптивность и отзывчивость интерфейса</h2><p>Адаптивность и отзывчивость интерфейса — неотъемлемые принципы проектирования мобильных приложений. Рассмотрим основные элементы.</p><h3>Поддержка различных размеров экранов и ориентаций устройств</h3><p>Мобильные устройства отличаются разнообразием экранов: от компактных смартфонов до больших планшетов. Чтобы обеспечить универсальность пользовательского интерфейса, важно учитывать:</p><ul><li><b>Автоматическую адаптацию к ориентации устройства.</b> Горизонтальная и вертикальная ориентации должны одинаково обеспечивать удобный доступ к функциям;</li><li><b>Динамическое масштабирование.</b> Интерфейс приложения должен корректно отображаться как на компактных, так и на больших экранах.</li></ul><h3>Использование адаптивных элементов интерфейса и сетки</h3><p>Адаптивные элементы и сетки делают интерфейс мобильных приложений гибким и удобным. Основные рекомендации:</p><ul><li><b>Сетки. </b>Использование 12-колоночной системы сеток помогает выровнять элементы и адаптировать их к разным разрешениям экрана;</li><li><b>Элементы с пропорциональными размерами.</b> Кнопки, текстовые поля и изображения должны плавно масштабироваться.</li></ul><p>Использование гибкой сетки улучшает юзабилити, так как интерфейс выглядит логично и привлекательно.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-12-03/67646095-04ed-4b1a-aed7-dfd1c97b26f8.png" alt="" /><figcaption>Вот как выглядит Ozon на десктопе благодаря сетке. Безусловно, мы тут про мобильные приложения говорим, но принцип понятен</figcaption></figure><h3>Советы по созданию отзывчивого дизайна с помощью автолейаутов и flexbox</h3><p>Такие инструменты, как автолейаут и flexbox, упрощают процесс создания адаптивного дизайна.</p><ul><li>Flexbox. С его помощью элементы автоматически перестраиваются, занимая оптимальное место на экране;</li><li>Автолейауты. Ускоряют размещение элементов интерфейса, особенно в условиях ограниченного пространства.</li></ul><p>Эти подходы помогают сделать приложения удобными для всех типов устройств, улучшая их визуальное восприятие и функциональность.</p><h3>Как обеспечить хорошую читаемость текста и удобное размещение элементов</h3><p>Для читаемости и удобства взаимодействия важны:</p><ul><li><b>Размеры шрифта.</b> Минимальный размер текста — 14 пикселей;</li><li><b>Контрастность. </b>Текст и фон должны быть легко различимыми;</li><li><b>Расстояние между элементами.</b> Клавиши и другие интерактивные зоны не должны располагаться слишком близко друг к другу (на языке мемов — «коллеги, нужно хочется побольше воздуха»).</li></ul><h2>Принципы визуальной иерархии</h2><p>Эффективный пользовательский интерфейс должен не только выглядеть привлекательно, но и помогать юзеру быстро находить нужную информацию. Принципы визуальной иерархии играют ключевую роль в проектировании мобильных интерфейсов, направляя внимание пользователя в нужное русло и упрощая взаимодействие.</p><h3>Использование размеров, цветов и контрастов для выделения важной информации</h3><p>Размеры, цвета и контрастность позволяют расставить акценты в интерфейсе мобильных приложений:</p><ul><li><b>Размеры.</b> Более крупные элементы привлекают внимание;</li><li><b>Цвета.</b> Использование ярких оттенков для ключевых элементов (например, кнопок действий) помогает пользователю легко их идентифицировать;</li><li><b>Контраст.</b> Четкий контраст между текстом и фоном улучшает читаемость и повышает удобство использования.</li></ul><h3>Создание иерархии элементов для привлечения внимания пользователя</h3><p>Размещение элементов на экране должно учитывать логику взгляда пользователя. Основные принципы:</p><ul><li><b>F-образный паттерн.</b> Пользователи читают экраны по горизонтали сверху вниз, что следует учитывать при размещении информации;</li><li><b>Визуальные маркеры.</b> Иконки, стрелки и выделения направляют внимание на важные действия.</li></ul><p>Эффективная иерархия помогает избежать перегрузки информацией, делая интерфейс более удобным.</p><h3>Баланс между текстом и визуальными элементами</h3><p>Сбалансированное использование текста и графики делает мобильные приложения понятными и эстетичными:</p><ul><li><b>Минимализм.</b> Четкие заголовки и лаконичные описания помогают удерживать внимание;</li><li><b>Графика.</b> Иллюстрации или иконки должны дополнять, а не заменять текстовую информацию;</li><li><b>Соотношение.</b> Не менее 40% пространства должно быть отведено под «воздух», чтобы элементы не выглядели сжатыми.</li></ul><h3>Примеры эффективного использования визуальной иерархии в мобильных приложениях</h3><p>Хороший пример: в приложении для заказа еды крупные фотографии блюд сопровождаются яркими кнопками «Добавить в корзину». Контраст помогает пользователю быстро сориентироваться.</p><p>Плохой пример: сложные таблицы без визуального разделения информации. Это снижает читабельность и затрудняет восприятие.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-12-03/4e7997e9-bb14-4501-83e5-d31f4b3cb10d.png" alt="" /><figcaption>Сгенерировано нейросетью</figcaption></figure><p>Визуальная иерархия — один из основных принципов проектирования мобильных интерфейсов. Грамотное использование размеров, цветов и баланса между текстом и визуальными элементами улучшает опыт взаимодействия пользователя с приложением.</p><h2>Обратная связь и взаимодействие</h2><p>Важный аспект проектирования мобильных интерфейсов — организация качественной обратной связи между пользователем и приложением. Это усиливает восприятие, улучшает опыт взаимодействия и повышает уровень юзабилити. Рассмотрим основные принципы.</p><h3>Предоставление визуальной и тактильной обратной связи при взаимодействии</h3><p>Пользователи ожидают мгновенной реакции приложения на любое действие, будь то нажатие кнопки или свайп. Важные элементы:</p><ul><li><b>Визуальная обратная связь.</b> Изменение цвета кнопок, всплывающие уведомления или выделение активных элементов сигнализируют об успешном действии;</li><li><b>Тактильная обратная связь.</b> Легкие вибрации при взаимодействии создают эффект физического присутствия и делают процесс интуитивно понятным. Самый банальный пример — 3D Touch на устройствах Apple, когда, например, ссылка в Safari открывается с вибрацией в новом окне, то же самое с фотографиями в пленке.</li></ul><h3>Использование анимаций и переходов для улучшения пользовательского опыта</h3><p>Анимации могут не только украшать интерфейс мобильных приложений, но и облегчать его восприятие:</p><ul><li><b>Плавные переходы.</b> Анимации помогают визуально объяснить, что происходит: например, как открывается меню или перемещается элемент;</li><li><b>Интерактивные элементы.</b> Кнопки с эффектом нажатия или иконки, которые анимируются при взаимодействии, делают приложение более живым.</li></ul><p>Важно соблюдать баланс: чрезмерное количество анимаций перегружает интерфейс и снижает производительность.</p><h3>Как сделать интерфейс отзывчивым и живым, не перегружая его анимацией</h3><p>Основной принцип — минимализм:</p><ul><li>Используйте анимацию для подсказок и подтверждений. Так, плавное появление сообщения об ошибке делает интерфейс более дружелюбным;</li><li>Адаптируйте анимации для разных устройств, чтобы сохранять производительность.</li></ul><p>Совет: избегайте сложных 3D-эффектов и длительных анимаций, которые могут отвлекать от основного действия.</p><h3>Примеры хорошей обратной связи в популярных приложениях</h3><p>Положительный пример: в приложении для заметок Google Keep кнопка «Добавить» анимируется, сигнализируя о том, что запись сохранена. Это интуитивно понятно и просто.</p><p>Отрицательный пример: в приложениях с перегруженными анимациями и задержкой реакции (например, медленно открывающиеся меню) пользователь теряет концентрацию.</p><p>Обратная связь — одна из основных характеристик качественного пользовательского интерфейса. Сбалансированное использование визуальных эффектов, тактильной реакции и анимаций делает мобильные приложения более удобными и отзывчивыми, улучшая общее восприятие и опыт пользователя.</p><h2>Минимализм и фокус на контенте</h2><p>Минимализм — ключевой принцип при проектировании мобильных интерфейсов, который способствует улучшению юзабилити и снижению когнитивной нагрузки на пользователя. Рассмотрим основные аспекты минималистичного подхода.</p><h3>Принцип «чем меньше, тем лучше»: избегайте избыточного функционала и информации</h3><p>В мире мобильных приложений избыточность отвлекает пользователя от главной цели. Оптимизация предполагает:</p><ul><li><b>Отказ от избыточных функций. </b>Приложение должно предлагать только те функции, которые необходимы для выполнения основных задач;</li><li><b>Упрощение визуального контента.</b> Минимум текста и графики помогает пользователю быстрее ориентироваться.</li></ul><p>Пример: приложение для концентрации внимания Forest, в котором основное внимание уделяется одной функции — вырастить дерево, не прикасаясь к телефону на протяжении определенного количества минут. Простая навигация и отсутствие лишних элементов позволяют сосредоточиться на главной цели.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-12-03/e149e11b-debb-4168-abeb-806a46260644.png" alt="" /></figure><h3>Минимизация элементов интерфейса для сохранения фокуса на контенте</h3><p>Интерфейс мобильных приложений должен подчеркивать контент, а не доминировать над ним. Это достигается за счет:</p><ul><li>Простой структуры экранов с акцентом на содержимое;</li><li>Использования цветовых акцентов для выделения ключевых действий;</li><li>Минимизации отвлекающих элементов: сложных иконок, избыточных меню, всплывающих окон.</li></ul><p>Совет: оставьте только те элементы, которые действительно необходимы для взаимодействия. Например, в Instagram* вся структура построена вокруг контента: фотографии и видео остаются в центре внимания, а, например, мессенджер выведен в отдельную вкладку и не отображается в главном меню снизу.</p><p><i>*Корпорация Meta признана экстремистской в РФ</i></p><h3>Уменьшение когнитивной нагрузки на пользователя</h3><p>Пользовательский опыт становится приятнее, если приложение избавляет от необходимости запоминать сложные маршруты или действия. Для этого:</p><ul><li>Убирайте ненужные этапы взаимодействия;</li><li>Делайте навигацию интуитивно понятной;</li><li>Используйте лаконичные инструкции и понятные иконки.</li></ul><h3>Примеры минималистичного подхода в мобильных приложениях</h3><p>Хороший пример: Тот же Google Keep, где интерфейс полностью сосредоточен на создании и хранении заметок. Никаких лишних настроек или сложных функций.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-12-03/b8af05d0-d824-4925-bdd1-1af5fd239fb6.png" alt="" /></figure><p>Плохой пример: приложения с избыточной анимацией или всплывающими окнами, которые отвлекают от контента.</p><p>Минималистичный подход к проектированию мобильных интерфейсов помогает пользователю сосредоточиться на выполнении основных задач и улучшает общее восприятие. Принципы минимализма — это отказ от лишнего, простота и удобство, что делает приложения более понятными и функциональными.</p><h2>Доступность (Accessibility)</h2><p>Доступность интерфейсов в мобильных приложениях — это не только забота о пользователях, но и важный фактор, повышающий юзабилити. Разработка доступных приложений расширяет аудиторию и делает взаимодействие удобным для всех, включая людей с ограниченными возможностями.</p><h2>Обеспечение доступности интерфейса для пользователей с ограниченными возможностями</h2><p>Чтобы интерфейс мобильных приложений был доступным, необходимо учитывать потребности людей с различными нарушениями, в том числе:</p><ul><li>Зрение (частичная или полная потеря, дальтонизм);</li><li>Слух;</li><li>Опорно-двигательный аппарат (ограниченные возможности взаимодействия с экраном);</li><li>Когнитивные особенности (дислексия, проблемы с вниманием).</li></ul><h2>Использование контрастных цветов, доступных шрифтов и альтернативных текстов</h2><p>Контрастные цветовые схемы и крупные, легко читаемые шрифты облегчают взаимодействие. Основные советы:</p><ul><li>Используйте шрифты без засечек (sans-serif), по типу Arial или Roboto;</li><li>Выбирайте контрастные сочетания текста и фона, которые соответствуют стандартам WCAG (например, чёрный текст на белом фоне);</li><li>Добавляйте альтернативные тексты к изображениям для работы с экранными дикторами. Это особенно важно для визуальных приложений.</li></ul><p>Пример: в Uber значки и шрифты адаптированы для режима высокой контрастности, что делает их удобными для пользователей с нарушениями зрения.</p><h2>Важность поддержки экранных дикторов и жестов</h2><p>Современные интерфейсы мобильных приложений должны быть оптимизированы для работы с технологиями вспомогательного ввода, такими как:</p><ul><li>Экранные дикторы (например, VoiceOver на iOS или TalkBack на Android);</li><li>Управление жестами, позволяющее заменить физические кнопки.</li></ul><p>Для этого важно структурировать интерфейс так, чтобы дикторы правильно озвучивали элементы: кнопки, заголовки, поля ввода.</p><h2>Как улучшить доступность с минимальными усилиями</h2><p>Достичь высокой доступности можно даже с небольшими изменениями:</p><ol><li>Используйте встроенные библиотеки платформ для включения функций доступности;</li><li>Проверяйте интерфейс с помощью симуляторов (например, Google Accessibility Scanner);</li><li>Стремитесь к простоте и интуитивности, чтобы сократить время на адаптацию.</li></ol><p>Основной принцип доступности — обеспечение равных возможностей для всех пользователей. Удобный и доступный пользовательский интерфейс не только улучшает опыт, но и делает мобильные интерфейсы соответствующими современным стандартам.</p>]]></content:encoded>
    </item>
    <item>
      <title>Эра Swift 6: анализ обновления и сравнение с C++</title>
      <link>https://tproger.ru/articles/era-swift-6--analiz-obnovleniya-i-sravnenie-s-c--</link>
      <comments>https://tproger.ru/articles/era-swift-6--analiz-obnovleniya-i-sravnenie-s-c--?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/era-swift-6--analiz-obnovleniya-i-sravnenie-s-c--</guid>
      <description><![CDATA[<p>Эра Swift 6. Показываем, что обновилось, и какие новые возможности появились. Рассматриваем сравнение с C++ ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/era-swift-6--analiz-obnovleniya-i-sravnenie-s-c--">Эра Swift 6: анализ обновления и сравнение с C++</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Sep 2024 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Язык программирования Swift создавался для разработки приложений и другого программного обеспечения на операционных системах iOS и macOS. В настоящий момент Swift относится к языкам программирования общего назначения, хотя специализация его по-прежнему ограничена.</p><p>С его помощью разрабатывают приложения для мобильных устройств и продукты для десктопных платформ. Кроме того, этим языком пользуются геймдев-разработчики, создающие игры для Apple, а также бэкенд-разработчики, использующие библиотеки Swift.</p><p>В июне 2024 года вышла новая версия языка — узнаем, какие функции появились в этом релизе, в чем преимущества Swift 6, каковы отличия этого продукта от С++.</p><h2>Обзор Swift: путь к версии 6</h2><p>Согласно официальным данным, Swift создан разработчиками компании Apple в 2014 году. Однако алгоритмы, которые лежат в основе этого языка, использовались еще в 90-х годах прошлого века при создании платформы NeXT — основы для будущих систем iOS и macOS.</p><p>Сотрудники Apple занимались разработкой языка несколько лет, при этом у Свифт нет конкретного прародителя, поскольку при создании использовались наработки сразу нескольких продуктов — Objective-C, Haskell, Python, C++ и других.</p><p>В 2014 году на официальной презентации был представлен пакет документов по языку Swift на 500 страницах. Уже в следующем году вышла обновленная, более производительная версия Swift 2.0.</p><p>В 2015 вышла модификация 3.0, которая отменила прошлые версии. Следующее масштабное обновление вышло в 2017 году — версия Swift 4.0 несколько раз модифицировалась. В 2019 вышла пятая версия, в которой содержалось множество нововведений. 11 июня 2024 — дата релиза Swift 6, последней на текущий момент версии языка.</p><h2>Особенности и преимущества Swift 6</h2><p>Поскольку Swift был создан относительно недавно, в нем учтены многие недостатки, свойственные более ранним языкам программирования. Разработчики изначально делали ставку на простоту изучения и применения, а также использование языка для быстрого старта и последующего развития проектов.</p><p>В отличие от Objective-C — языка, который корпорация Эппл использовала ранее, синтаксис у Swift более понятный и лаконичный. Программистам требуется меньше времени на написание кода.</p><p>Еще одна ключевая особенность Свифта — его повышенная производительность. Несмотря на простоту и быстрое освоение, эффективность языка довольно высока. Эксперты утверждают, что Swift втрое быстрее Objective-C и в 8 раз опережает по скорости Python. В новой версии разработчики попытались превзойти по этому параметру C++.</p><p>Другие преимущества:</p><ul><li>Наличие современных библиотек и фреймворков, которые существенно упрощают написание кода для программистов. В распоряжении разработчиков — множество готовых функциональных блоков.</li><li>У Swift открытый исходный код, что делает язык доступным для всех пользователей. Это может показаться странным для Apple, но в данном случае такой ход корпорации полностью оправдан. Профессиональное коммьюнити занимается исправлением багов и предлагает полезные нововведения.</li><li>К сильным сторонам языка относится его безопасность. По этому показателю Свифт превосходит Objective-C. Благодаря улучшениям при работе с памятью разработчики минимизировали риск стороннего доступа к данным.</li><li>Более эффективная работа со сценариями снижает вероятность критических ошибок при разработке программ.</li><li>Возможность визуализации результата программирования. С помощью специальной песочницы можно наглядно оценить результаты работы конкретной программы. Такой метод позволяет быстро обнаружить ошибки в коде и тем самым сократить время на разработку.</li><li>Динамические библиотеки. Благодаря такому формату пользователи быстрее вносят изменения и обновления в готовые коды, не дожидаясь релиза новых версий iOS.</li></ul><p>Swift нельзя назвать универсальным языком, поскольку он создан в качестве специализированного инструмента для работы с платформами iOS и macOS. Однако у разработчиков, знакомых с этим языком, широкая сфера деятельности — они могут создать любое приложение или игру для устройств на iOS, занимаются серверными и системными программами. Одно время планировалось, что Свифт будет адаптирован для Android, но вряд ли этот проект будет реализован.</p><p>Возможности для разработки программ на Свифт практически не ограничены. В этом легко убедиться, открыв магазин AppStore. Это могут быть простейшие виджеты и игры, а также сложнейшие программы профессионального уровня.</p><p>В числе недостатков языка эксперты указывают сложности при работе с приложениями, написанными на Objective-C. Для этого используют своего рода мост, который часто затрудняет процесс сборки софта. Этот минус отчасти нивелирован в новой версии.</p><p>Что касается перспектив Swift, то они вполне определены. Разработчики, владеющие этим языком, постоянно востребованы. Количество пользователей, приложений и возможностей систем macOS и iOS постоянно растет, а значит, растут и запросы на разработку нового софта.</p><p>Apple вряд ли откажется от Свифта в ближайшие 10 лет — в этот инструмент вложены слишком большие ресурсы. Язык продолжит развиваться, а с учетом открытого кода этот процесс будет происходить все более интенсивно.</p><p>С другой стороны, поскольку Swift — это не кроссплатформенный язык, его применение ограничено устройствами Apple. А значит, все разработки могут быть связаны только с продуктами этой корпорации.</p><h2>Что нового в Swift 6</h2><p>Свифт 6 — это крупнейшее обновление языка за последние пять лет. Сразу после выхода обновления эксперты обратили внимание на повышение производительности и улучшенную кодируемость. В новой версии повышена безопасность данных и появилось подмножество Embedded Swift, предназначенное для работы в системах с существенными ограничениями. Появились и другие обновления, которые мы рассмотрим более подробно.</p><p>Обратите внимание, что рассматриваемые нами изменения актуальны на момент официального релиза Swift 6, то есть в будущем наверняка появятся дополнительные обновления.</p><h2>Полный параллелизм</h2><p>В Свифт 6 параллелизму (то есть выполнению одновременно сразу нескольких задач) уделено много внимания. Наиболее значительное изменение — полная проверка параллельности, активированная по умолчанию. Это нововведение может потребовать ряда корректировок в коде, поскольку в более ранних версиях функция проверки была опциональной.</p><p>В Свифт 6 проверка параллелизма улучшена — устранены ложные сообщения о гонках данных, распространенные в версии 5.10. Многие целевые изменения сделали параллелизм более простым для освоения.</p><p>Примером значимого нововведения можно назвать SE-0414 — эта опция позволяет компилятору привести доказательства, что разные части кода могут выполняться одновременно. Изменение основано на концепции sendability (отправляемости) — то есть базируется типах данных, которые возможно в безопасном режиме отправлять в параллельной среде.</p><h2>Некопируемые типы данных</h2><p>В Свифт все типы значений, как и ссылочные типы, копируемые. В новой версии есть некопируемые типы, полезные в ряде сценариев, где они применяются в качестве уникальных ресурсов. Такая опция предотвращает утечку ресурсов и повышает удобство кодирования.</p><h2>Интеграция с С++</h2><p>В новой версии Swift может напрямую взаимодействовать с языком С++, обеспечивая тем самым бесшовную интеграцию опыта разработчиков. Тратить время и ресурсы на переход не придется. Теперь виртуальные методы C++, аргументы и другие элементы стандартных библиотек могут быть напрямую перенесены в Свифт. Взаимодействие платформ предполагает взаимную адаптацию аналогичных языковых концепций и при необходимости — коррекцию семантики.</p><p>Эксперты считают, что использование языка Swift в проектах на С++ повышает безопасность, поскольку уязвимость данных в новой версии продукта Эппл. минимизирования.</p><h2>Поиск ошибок</h2><p>В новой версии реализована одна из лучших в профессиональной среде опций по обработке ошибок. С ее помощью баги автоматически отлавливаются и устраняются на начальном этапе работы с программой.</p><h2>Замена функций</h2><p>Некоторые изменения присутствовали еще в ранних версиях Свифт, но были скрыты. В новой модификации такие функции стали полноценными. В основном это специализированные возможности, касающиеся переменных и других данных в параллельных средах.</p><h2>Итерация пакета</h2><p>В новой версии есть итерация по пакетам, что делает возможным обход параметров, введенных в предыдущей модификации. Такая возможность позволяет сравнивать кортежи (упорядоченные наборы данных) в нескольких строках кода.</p><h2>Анализ нововведений: как Swift 6 меняет разработку</h2><p>Экспертное сообщество расценивает нововведения Swift 6 как однозначно положительные. Максимум внимания создатели новой версии уделили доменам параллелизма, что делает модификацию более доступной для рядовых разработчиков.</p><p>Такие опции, как автоматическая проверка параллелизма, улучшение концепции sendability и другие делают написание кода более быстрым и эффективным. Значительная часть нововведений направлена на повышение производительности разработки при создании сложных приложений.</p><p>Еще один пункт, на который стоит обратить внимание — это безопасность гонок данных. В процессе разработки параллельных программ возникает множество ошибок. Такое происходит, когда сразу несколько потоков совместно пользуются данными, при этом один из них начинает эти данные менять. Гонки чреваты сбоями в программе и проблемами, которые непросто устранить.</p><p>В Swift 6 задействованы механизмы изоляции данных, опции для защиты изменений кода и безопасного обмена информацией. Безопасность data-race здесь достигается по умолчанию.</p><p>Обновления делают Свифт 6 мощным, безопасным и эффективным инструментом, который подходит для разработки широкого ассортимента приложений — это может быть прикладной мобильный софт, настольные приложения, серверные и системные программы.</p><h2>Сравнение Swift 6 и C++</h2><p>На презентации Swift 6 представители Apple заявили, что в новой версии язык стал еще более скоростным и безопасным, а по эффективности, возможно, превзошел С++. В свое время Свифт создавался именно в качестве потенциальной замены языка С++, у которого есть есть определенные уязвимости.</p><p>Рассмотрим основные параметры Swift 6 и сравним их с показателями С++:</p><ul><li><b>Скорость.</b> С английского слово Swift переводится как «стремительный». Разработчики изначально намеревались сделать высокоскоростной язык. По скорости он однозначно превосходит последнюю версию Python, а по некоторым алгоритмам опережает и С++.</li><li><b>Производительность.</b> Скорость исполнения кода неизбежно повышает производительность приложений, которые работают на Свифт. При этом софт, в отличие от аналогичных программ, написанных на С++ и других языках, не перегружает до критических значений вычислительные мощности устройств.</li><li><b>Код.</b> Свифт изначально создавался как язык с максимально простым, неперегруженным синтаксисом. Это делает работу с инструментом понятной и доступной. В новой версии громоздких конструкций и лишних элементов стало еще меньше. Swift все больше становится похожим на естественный язык, оставаясь ясным и чистым даже при создании сложного года. Неочевидных ошибок здесь встречается на порядок меньше, чем в С++.</li><li><b>Память.</b> Инновационная система автоматического управления памятью ARC следит за расходованием и очисткой нужного количества ресурсов. Программисту можно не отслеживать этот параметр.</li><li><b>Безопасность. </b>Еще один аспект, в котором эксперты отдают предпочтение Swift 6. В новой версии несанкционированный доступ к важным данным минимизирован. При этом язык точнее отслеживает баги разработчика, снижая риск малозаметных, но критичных ошибок. При этом Свифт более предсказуем, что важно для процессов тестирования и отладки.</li></ul><p>Благодаря открытому исходному коду языком Swift могут пользоваться практически все желающие — от профессиональных разработчиков до самоучек. Это решение компания Apple, известная закрытыми разработками, приняла сознательно — с целью сделать язык более мощным, простым и эффективным. Комьюнити действительно способствует совершенствованию языка, при этом Свифт можно переносить на сторонние системы, создавать новые библиотеки, расширяющие возможности инструмента программирования.</p><p>Apple уделяет время и ресурсы на продвижение и развитие языка. Компания следит не только за обновлением версий, но и постоянно предоставляет пользователям актуальные обучающие материалы. В macOS есть встроенная среда разработки, которая поддерживает Свифт, что называется «из коробки». В Apple Swift Playgrounds можно создавать пробные версии приложений и тут же тестировать их. Официальный подробный учебник по языку доступен в открытом хранилище Apple Books.</p><p>Есть ли позиции, по которым C++ опережает Swift? Да, такие моменты присутствуют, поскольку ничего совершенного в природе, даже если это цифровая среда, не существует.</p><p>Один из главных недостатков Swift 6, как и предыдущих версий, это узкая специализация. Свифт применяется только для разработки программ на устройства Apple, никакого другого назначения у него нет. Приложения в теории могут работать на Windows и Linux, но это будет неудобное решение.</p><p>Еще один минус — относительно небольшое по численности русскоязычное сообщество. Сравнивать уровни поддержки специализированного языка и универсального несколько некорректно, но именно сообщество способствует развитию и распространению языка.</p><p>Относительным недостатком можно считать неразрывную связь Swift 6 и старых версий с Objective-C. Свифт без проблем встраивается в продукты, написанные на Objective-C, что обеспечивает разработке гибкость. Однако новичкам, желающим освоить программирование для Apple, придется освоить оба языка, иначе работать с приложениями будет сложно.</p><h2>Итоги</h2><p>Очевидно, что при разработке продуктов для Apple язык Swift 6 будет предпочтительным выбором. Однако по причине узкой специализации Свифт не получится использовать для написания программ на других ОС. В этом отношении C++ более функционален и практичен, поскольку относится к универсальным языкам программирования.</p>]]></content:encoded>
    </item>
    <item>
      <title>Cangjie: язык программирования Huawei — что мы о нем знаем</title>
      <link>https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem</link>
      <comments>https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Света Соколовская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem</guid>
      <description><![CDATA[<p>Все о Cangjie, новом языке программирования: кому подходит и какие есть преимущества перед другими языками, которые мы уже знаем</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem">Cangjie: язык программирования Huawei — что мы о нем знаем</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 17 Sep 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В июне китайская компания Huawei <a href="https://www.gizmochina.com/2024/06/21/huawei-cangjie-programming-language/">представила</a> новый язык программирования — Cangjie («Цанцзе»). Это событие привлекло внимание разработчиков и экспертов по всему миру. Если вы еще не слышали об этом языке, он может стать ключевым инструментом для девелоперов экосистемы Huawei. Разбираемся в новинке и какие есть преимущества.</p><p>Впервые упоминание о Cangjie появилось в октябре 2021 года. Huawei <a href="https://www.cnews.ru/news/top/2021-10-22_huawei_sozdala_svoj_sovershenno">собиралась</a> выпустить этот язык программирования в 2022 году, но по каким-то причинам запуск отложился на целых два года.</p><p>Основная аудитория Cangjie — разработчики, работающие с экосистемой Huawei, включая мобильные устройства, облачные сервисы и IoT (Интернет вещей). Если вы уже знакомы с языками вроде Java или C++, освоить Cangjie будет проще, потому что у них есть некоторые общие черты. Huawei нацелена на то, чтобы привлечь разработчиков из разных сфер, предлагая им мощный и гибкий язык для создания приложений.</p><h2>Стратегические цели Huawei: только ли ответ на санкции?</h2><p>Компания разработала Cangjie с несколькими стратегическими целями. В первую очередь это ответ на санкции: появилась необходимость постепенно объединять Harmony OS и OpenEuler. Harmony OS — мобильная ОС, <a href="https://www.cnews.ru/news/top/2019-08-09_huawei_vypustila_svoego_konkurenta_androidv">представленная</a> в августе 2019 года как альтернатива iOS и Android. OpenEuler — продукт для облачных сервисов. Это дистрибутив Linux, запущенный в январе 2020 года, основанный на EulerOS, который является форком CentOS. Так компания будет меньше зависеть от других уже существующих технологий.</p><figure><img src="https://media.tproger.ru/user-uploads/104387/2024-09-12/efca7623-a730-4a07-a954-f5c50048bb34.jpg" alt="" /></figure><p>Кроме того, Huawei видит в этом проекте долгосрочную инвестицию в будущее. Упрощенный синтаксис и возможности доменно-ориентированной разработки позволят новичкам быстрее осваивать программирование. Huawei заинтересована в создании активного сообщества, которое будет поддерживать и развивать язык, что в перспективе принесет компании выгоду за счет увеличения базы разработчиков.</p><p>А еще введение нового языка укрепляет имидж Huawei как инноватора в области технологий. В условиях жесткой конкуренции с другими технологическими гигантами, такими как Google или Apple, создание уникальных решений и дает возможность выделяться.</p><h2>Преимущества Cangjie: безопасность, производительность и гибкость</h2><p>Что интересного есть у Cangjie:</p><ul><li><b>Интеграция с аппаратным и программным обеспечением Huawei.</b> Теперь разработка приложений под устройства Huawei станет более эффективной.</li><li><b>Интеграция с Agile DSL.</b> Можно объединять обычное программирование с конструкциями, близкими к естественному языку. Это упрощает взаимодействие между техническими и нетехническими участниками проекта, улучшая коммуникацию и совместную работу.</li><li><b>Встроенные инструменты для статической проверки кода</b>, которые помогают выявлять уязвимости и ошибки на этапе написания кода. Это улучшает качество создаваемого программного обеспечения и позволяет разработчикам исправлять проблемы до того, как они попадут в конечный продукт. А еще повышает безопасность кода.</li><li><b>Улучшенное управление памятью и сборка мусора.</b> Обеспечивает более эффективное выполнение кода и минимизирует вероятность утечек памяти. Разработчики могут сосредоточиться на бизнес-логике, не беспокоясь о низкоуровневых задачах, связанных с управлением ресурсами.</li><li><b>Высокое быстродействие.</b> Можно создавать приложения с высокой нагрузкой, например, для работы с большими данными или машинного обучения.</li><li><b>Гибкость синтаксиса. </b>Можно писать код с минимальным количеством строк. Это актуально для новичков, которые только начинают путь в программировании.</li></ul><h2>Какие перспективы у российских разработчиков</h2><p>Huawei пока еще не объявляла дату релиза, но в рамках <a href="https://developer.huawei.com/consumer/cn/activityDetail/cangjie-beta/">бета-тестирования</a> предоставлены все необходимые инструменты: разработка, тестирование, отладка и статическая проверка качества программного обеспечения.</p><figure><img src="https://media.tproger.ru/user-uploads/104387/2024-09-11/abd7a837-c81a-4680-94e9-7b82a285d73c.png" alt="" /><figcaption>На сайте уже можно зарегистрироваться и изучать язык. Правда, как отмечают пользователи, перевод сайта на русский и английский работает пока не у всех</figcaption></figure><p>Для российских разработчиков использование Cangjie может стать актуальным, если работа с экосистемой Huawei войдет в их приоритеты. В условиях международной обстановки адаптация программных решений под китайские технологии уже активно развивается. Если Huawei продолжит расширять свои позиции в мире, включая Россию, то интерес к Cangjie среди местных разработчиков будет расти.</p>]]></content:encoded>
    </item>
    <item>
      <title>День Знаний в IT: лучшие обучающие статьи для айтишников</title>
      <link>https://tproger.ru/digest/den-znanij-v-it--luchwie-obuchayushhie-stati-dlya-ajtiwnikov</link>
      <comments>https://tproger.ru/digest/den-znanij-v-it--luchwie-obuchayushhie-stati-dlya-ajtiwnikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Лалетин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/digest/den-znanij-v-it--luchwie-obuchayushhie-stati-dlya-ajtiwnikov</guid>
      <description><![CDATA[<p>null</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/digest/den-znanij-v-it--luchwie-obuchayushhie-stati-dlya-ajtiwnikov">День Знаний в IT: лучшие обучающие статьи для айтишников</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Подборки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Sep 2024 09:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня мы расскажем о лучших материалах для трёх направлений: веб-разработка, мобильная разработка и машинное обучение. Поделитесь и вы в комментариях самыми лучшими обучающими статьями, видео, подкастами и всем, что помогает вам становится лучше в своей сфере.</p><h2>Веб-разработка</h2><p><a href="https://tproger.ru/articles/5-novyh-funkcij-css--kotorye-vy-obyazany-znat-v-2024-godu"><b>5 новых функций CSS, которые вы обязаны знать в 2024 году</b></a></p><p>Веб-разработчику важно всегда быть в курсе новых технологий, которые применяются при разработке сайтов. В этой статье вы узнаете о 5 новых функциях CSS: о cелекторе :has(), запросах к контейнерам, вложенности CSS, text-wrap:balance и :focus-visible.</p><p><a href="https://tproger.ru/articles/kak-stat-full-stek-feb-razrabotchikom"><b>Как стать фулл-стек веб-разработчиком</b></a></p><p>Хочется и во фронтенд, и в бекэнд? Тогда фулл-стек — это лучшее решение для вас. В этой статье IT-блогер Conner Ardman рассказал, что нужно учить, чтобы стать фулл-стек веб-разработчиком в 2024 году (ещё не поздно).</p><p><a href="https://tproger.ru/articles/roadmap-veb-razrabotchika--chto-uchit-v-2024-godu"><b>Роадмап веб-разработчика: что учить в 2024 году</b></a></p><p>Ну а если пока не понятно, что и в какой последовательности учить — вам поможет этот материал. Stefan Mischook составил дорожную карту для веб-разработчиков, охватывающий все технологии, которые нужно знать в 2024 году.</p><p><a href="https://tproger.ru/articles/css-flexbox-tutorial-with-flexbox-properties-cheat-sheet"><b>Шпаргалка по всем свойствам CSS Flexbox</b></a></p><p>Кратко, удобно, понятно — такая вот шпаргалка по свойствам флекса. Если вы постоянно забываете, чем align-items отличается от justify-conent, то обязательно добавляйте гайд в избранное — он вам точно поможет.</p><p>Другие материалы ищите по тегам: <a href="https://tproger.ru/tag/html">HTML</a>, <a href="https://tproger.ru/tag/frontend">Фронтенд</a>, <a href="https://tproger.ru/tag/react">React</a>, <a href="https://tproger.ru/tag/web">Веб-разработка</a>, <a href="https://tproger.ru/tag/angular">Angular</a>, <a href="https://tproger.ru/tag/node-js">Node.js</a>, <a href="https://tproger.ru/tag/vue">Vue</a></p><h2>Мобильная разработка</h2><p><a href="https://tproger.ru/articles/trendy-v-mobilnoj-razrabotke-v-2024-godu">Тренды в мобильной разработке в 2024 году</a></p><p>Пользователь нашего сайта рассказала, что в мобильной разработке будет популярно в 2024 году и на какие технологии стоит делать ставку. Кстати, вы тоже можете писать статьи — для этого зарегистрируйтесь на сайте и воспользуйтесь кнопкой «Написать пост».</p><p><a href="https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta">Дорожная карта по Android-разработке с нуля</a></p><p>Ещё одна полезная статья от читателя Tproger. Из материала вы узнаете как стать Android-разработчиком с нуля, следуя дорожной карте, и что изучать и в какой последовательности. Подходит новичкам ;)</p><p><a href="https://tproger.ru/articles/bitva-titanov-java-vs-kotlin">Битва титанов: Java vs Kotlin</a></p><p>Не знаете, какой язык для мобильной разработки лучше учить? Прочитайте этот материал и, возможно, сможете определиться.</p><p><a href="https://tproger.ru/articles/sovety-nachinajushhim-mobilnym-razrabotchikam-ot-opytnyh-kolleg">Советы начинающим мобильным разработчикам от опытных коллег</a></p><p>Джуны, загляните. Здесь очень важные советы, которые могут помочь вам быстрее набираться опыта и повышать свою квалификацию в мобильной разработке.</p><p>Другие материалы ищите по тегам: <a href="https://tproger.ru/tag/mobiledev">Мобильная разработка</a>, <a href="https://tproger.ru/tag/java">Java</a>, <a href="https://tproger.ru/tag/kotlin">Kotlin</a>, <a href="https://tproger.ru/tag/swift">Swift</a>.</p><h2>Машинное обучение</h2><p><a href="https://tproger.ru/articles/kak-i-na-chyom-obuchit-ml-model-erid-ljn8kqw4p">Как и на чём обучить модель машинного обучения</a></p><p>В статье показали базу, полезную для крепких джунов и более опытных специалистов: объяснили, как подобрать фреймворк и железо и раскатать ML-модель.</p><p><a href="https://tproger.ru/articles/knigi-o-mawinnom-obuchenii-dlya-novichkov">Книги о машинном обучении для новичков</a></p><p>Четыре книги, которые подойдут тем, кто только начинает свой путь в машинном обучении. Кстати, подборку сделала специалист.</p><p><a href="https://tproger.ru/articles/kak-rabotaet-obuchenie-bez-uchitelya">Как работает обучение без учителя</a></p><p>Что такое обучение без учителя и почему оно так называется? Какие задачи можно решить с помощью этих методов? А какими алгоритмами? Есть ли у него недостатки? Разбираемся как на банковских примерах, так и на более приземленных вещах — столах, стульях и шкафах.</p><p>Другие материалы ищите по тегам: <a href="https://tproger.ru/tag/machine-learning">Машинное обучение</a>, <a href="https://tproger.ru/tag/ai">Искусственный интеллект</a>, <a href="https://tproger.ru/tag/neural-network">Нейронные сети</a></p><p>Делитесь в комментариях лучшими статьями, книгами, видео, курсами, подкастами, которые помогают в обучении любым IT-профессиям.</p>]]></content:encoded>
    </item>
    <item>
      <title>Blink: что под капотом приложения для мониторинга друзей</title>
      <link>https://tproger.ru/interview/blink--chto-pod-kapotom-prilozheniya-dlya-monitoringa-druzej</link>
      <comments>https://tproger.ru/interview/blink--chto-pod-kapotom-prilozheniya-dlya-monitoringa-druzej?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/interview/blink--chto-pod-kapotom-prilozheniya-dlya-monitoringa-druzej</guid>
      <description><![CDATA[<p>Расскажем о том, как функционирует приложение для мониторинга друзей Blink. Какой стек используется для точной геолокации и каким образом пользователи взаимодействуют друг с другом.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/interview/blink--chto-pod-kapotom-prilozheniya-dlya-monitoringa-druzej">Blink: что под капотом приложения для мониторинга друзей</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Интервью]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 15 Aug 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h4>На сайте приложения указано, что оно создано выходцами из Zenly. Получается, вы выступаете в роли «импортозаместителя»? Или Blink — самостоятельное решение, лишь вдохновленное французами?</h4><p>После закрытия Zenly мы вместе с коллегами Димой Трачуком и Марией Мышь (ранее работала в Zenly), собрались и начали обдумывать создание своего приложения. К нам постепенно присоединились и другие специалисты, и мы продолжили формировать команду.</p><p>Конечно, вдохновлялись Zenly, ведь сами являлись активными пользователями ранее популярного и полезного сервиса. После его закрытия у нас появилась потребность в аналогичном решении для отслеживания местоположения друзей. Поэтому мы решили создать Blink. Позаимствовали положительный опыт использования Zenly, но дополнили продукт новыми функциями и улучшениями, делающими его уникальным и отвечающим потребностям пользователей.</p><p>Стоит отметить, что импортозамещение обычно подразумевает создание аналога продукта, который больше не доступен в России. В случае Zenly, это приложение не просто ушло из России — оно полностью прекратило свою деятельность. Поэтому мы не выступаем импортозаместителями в прямом смысле этого слова. Наше приложение — самостоятельное решение, разработанное с нуля.</p><h3>Какие основные функции и возможности предлагает Blink пользователям? Можем ли мы «бампнуться» по-старинке или отправить смайлик другу на весь экран?</h3><p>Blink — это приложение, которое вобрало в себя все ключевые функции некогда популярного Zenly, но с рядом значительных улучшений и новшеств.</p><p>Одна из новых возможностей Blink — функция отслеживания шагов. Теперь пользователи могут соревноваться друг с другом, сравнивая свою ежедневную активность. Эта опция стала возможной благодаря высокой точности геолокации.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-08-14/c444357c-95a1-4193-a055-07d1a4d48d04.jpg" alt="" /></figure><p>Кроме того, в Blink реализована усовершенствованная система чекинов. При отметке пользователя в определенной локации, его друзьям тут же приходит push-уведомление. В Zenly данная функция работала менее эффективно, поэтому мы приняли решение о ее полной переработке.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-08-14/0de5084e-74cf-4642-a958-e24b7174310d.png" alt="" /></figure><p>Еще одна интересная особенность Blink — функция «трях», аналогичная «бампу» из Zenly. Теперь, чтобы сообщить друзьям о встрече, достаточно просто потрясти телефонами. Вообще, термин «бамп» в английском языке имеет сексуальный подтекст, поэтому для англоговорящей аудитории звучит так же странно, как «трях» для русскоязычной.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-08-14/a51f6344-011c-4120-a888-11d1a83cdaed.jpg" alt="" /></figure><h3>Какие программные платформы и языки программирования использовались для разработки Blink? Почему был выбран именно такой технологический стек?</h3><p>Выбор стека связан с наличием специалистов на рынке, задачами и с высокими хайлоадом.  В качестве основного языка веб-разработки мы выбрали компилируемый  Golang, это современный стандарт для стартапов.</p><p>Помимо Golang, в стек входит ряд других ключевых инструментов. Для обработки потоков данных в режиме реального времени используется Apache Kafka, надежный и производительный брокер, с которым уже была знакома команда разработчиков и DevOps/SRE. Выбор Kafka обусловлен необходимостью надежной маршрутизации гигабайтов геопакетов в секунду.</p><p>В качестве основной базы данных выбран PostgreSQL, известный своей надежностью, производительностью и возможностью масштабироваться. Для кэширования данных используется Redis, а ClickHouse – для аналитики и обработки больших объемов данных, в том числе для пост-процессинга геокоординат. На данный момент объем данных в кластере приближается к 30 ТБ, и ClickHouse справляется с этой нагрузкой.</p><p>Для мобильных платформ мы используем Swift для iOS и Kotlin для Android.</p><p>Основной принцип, которым руководствуемся при выборе технологий – широкое распространение и длительная история использования, гарантирующие надежность. Было решено не экспериментировать с новыми технологиями, а использовать проверенные инструменты, с которыми уже работали ключевые специалисты.</p><h3>Перейдем к конкретным фичам. Какие алгоритмы и методы используются для определения местоположения пользователей в Blink? Как вы обеспечиваете высокую точность геолокации?</h3><p>В основе нашей работы лежит сбор данных с устройств пользователей и применение технологий геофенсинга. Хотя мы не изобретаем революционных решений, поскольку действуем в рамках закрытых операционных систем (iOS и Android), тщательно обрабатываем полученные данные, чтобы обеспечить их точность и надежность. Как происходит процесс?</p><p>Все начинается с получения координат от пользователя. Эти данные проходят несколько этапов проверки. Мы анализируем, не произошел ли резкий скачок местоположения, например, перемещение из России в Австралию за короткий промежуток времени. Фильтр Калмана помогает сглаживать координаты, удаляя аномальные значения и улучшая точность.</p><p>Если координаты проходят наши фильтры, они отправляются на дальнейшую обработку. Но если выявляем проблемы по типу воздействия GPS-глушилок,  применяем дополнительные этапы проверки.</p><p>Мы также проверяем, находится ли пользователь в знакомом окружении, например, в домашней сети Wi-Fi. Если данные указывают на аномальное перемещение, корректируем местоположение.</p><p>Стоит отметить, что в последнее время мы все чаще сталкиваемся с проблемами навигационных систем и GPS-глушилок. Поэтому разработали целый ряд фильтров и механизмов для обеспечения высокой точности геолокации. Кроме того, работаем над улучшением клиентской части, оптимизируя работу приложения для минимального потребления заряда аккумулятора. Blink в среднем потребляет всего 1% заряда в сутки, что является отличным показателем. Мы потратили много времени на это улучшение, и теперь приложение практически не тратит заряд, хотя работает в фоновом режиме.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2024-08-14/169567a1-cae3-4ffc-b020-a1c9b75b0bb0.png" alt="" /></figure><h3>Как реализована система хранения и обработки больших объемов геоданных в приложении? Какие технологии и подходы задействованы?</h3><p>Мы внедрили два ключевых решения: Apache Kafka и ClickHouse.</p><p>Apache Kafka выступает в качестве надежного механизма передачи данных между различными сервисами. Он обеспечивает бесперебойную доставку координат пользователей, которые постоянно обрабатываются и анализируются приложением.</p><p>В свою очередь, ClickHouse — это высокопроизводительная аналитическая база данных, где мы храним всю историю передвижений наших пользователей. Это позволяет создавать уникальные решения, раскрывающие интересные закономерности и паттерны поведения людей. Например, мы можем показывать пользователям, где они чаще всего ночевали, с кем больше всего общались, какие места посещали и какие районы исследовали. Эти «цифровые следы» помогают людям лучше понимать свои привычки.</p><p>Стоит отметить, что объем накопленных нами данных уже превышает 30 терабайт. Это огромный массив информации, который требует применения современных Big Data решений, таких как Kafka и ClickHouse. Благодаря этому мы можем эффективно управлять и анализировать все эти данные, извлекая ценные инсайты и предоставляя полезный сервис нашим пользователям.</p><h3>А что насчет самих пользователей? Как вы подходите к вопросам безопасности и конфиденциальности данных в Blink? Какие меры предприняты для защиты личной информации?</h3><p>Мы применяем комплексный подход, сочетающий в себе передовые технологии шифрования и строгие меры контроля доступа.</p><p>Во-первых, все данные тщательно зашифрованы. Даже в случае несанкционированного доступа к бэкапам, злоумышленник не сможет расшифровать эту информацию без наличия соответствующих ключей. Объем хранимых данных также делает невозможным их незаметное похищение.</p><p>Во-вторых, в компании регулярно проводится аудит безопасности. Мы тщательно контролируем, кто и к каким данным имеет доступ. Более того, любое обращение к конфиденциальным ресурсам, будь то подключение к базе данных из нестандартного местоположения, вызывает срабатывание системы оповещения. Таким образом, все действия с чувствительной информацией пользователей фиксируются в журнале регистрации и расцениваются как инциденты безопасности.</p><h3>Какие методы и инструменты применяются для анализа поведения пользователей, их передвижений и активности в приложении? Как вы используете эти данные для улучшения сервиса?</h3><p>У нас есть два основных направления аналитики: клиентская и серверная.</p><p>Для клиентской аналитики мы используем как бесплатные, так и платные трекеры для отслеживания активности пользователей. Одним из ключевых инструментов является Amplitude, позволяющий собирать и анализировать данные о взаимодействии пользователей с приложением.</p><p>В части серверной аналитики:</p><ul><li>Все события, связанные с действиями пользователей, собираются и отправляются на наш сервер, где хранятся в базе данных ClickHouse. Это касается как клиентских, так и серверных событий.</li></ul><ul><li>Собранные данные затем передаются в BI-системы, такие как Redash и Superset, для визуализации и построения дашбордов.</li></ul><ul><li>Наши аналитики проверяют гипотезы и анализируют поведение пользователей. При этом данные обезличены, чтобы не нарушать конфиденциальность.</li></ul><p>Один из последних кейсов:</p><p>В дашборде, посвященном онбордингу пользователей, мы заметили значительное снижение конверсии на этапе заполнения никнейма. Анализ показал, что многие никнеймы уже были заняты, и новым пользователям сложно было выбрать уникальные. В результате мы внедрили функцию автоматической генерации никнеймов, с возможностью их изменения. Это решение повысило конверсию на этапе онбординга на 3 процентных пункта.</p><p>В целом, при разработке новой функциональности мы всегда опираемся на данные. Мы анализируем, как пользователи взаимодействуют с приложением, какие у них возникают проблемы, что пользуется наибольшей популярностью, а что — меньшей. Такой аналитический подход позволяет нам принимать обоснованные решения и улучшать продукт на основе реальности, а не интуитивных предположений.</p><h3>С какими основными трудностями и вызовами вы сталкивались в процессе разработки и масштабирования Blink? Как вы их преодолевали?</h3><p>Несмотря на стремительный рост, мы столкнулись с несколькими серьезными техническими вызовами:</p><ol><li>Изначально, с нагрузкой в 10 тысяч онлайн-пользователей, наши го и легковесные горутины, а также оптимизированные веб-фреймворки справлялись с нагрузкой. Однако с ростом аудитории до 100 тысяч возникли проблемы на сетевом уровне, которые нашим инженерам удалось решить за счет переконфигурирования балансеров (nginx + sysctl).</li><li>Для хранения географических данных мы выбрали PostgreSQL, но со временем объем этих данных превысил 1 ТБ, что привело к существенному падению производительности. Попытки горизонтально масштабировать PostgreSQL оказались малоэффективными, и в итоге мы перешли на Clickhouse, который гораздо лучше справился с этой задачей. Перевод на Clickhouse занял около недели, но куда больше времени потребовалось на миграцию данных из PostgreSQL.</li><li>Недостаток мониторинга приводил к тому, что о проблемах мы узнавали уже тогда, когда они становились критическими и вызывали простои сервиса. Несколько бессонных ночей наглядно продемонстрировали важность использования инструментов вроде Grafana.</li></ol><p>Несмотря на эти трудности, нам удалось преодолеть их и продолжить успешное развитие Blink. Опыт, полученный в ходе решения этих задач, стал для нас бесценным.</p><h3>Каковы ваши планы на дальнейшее развитие приложения? Над какими новыми функциями и возможностями сейчас работаете?</h3><p>В первую очередь, мы активно работаем над улучшением качества геолокации. Поскольку основная особенность нашего продукта заключается в точном определении местоположения пользователей, важно, чтобы оно всегда отображалось корректно. Мы тщательно анализируем возникающие у пользователей проблемы (случайные вылеты и неверные координаты) и внедряем разные фильтры для их минимизации. В случаях, когда проблему невозможно решить из-за внешних факторов, мы честно информируем пользователей о временных неудобствах.</p><p>Из больших сервисов, над которыми работаем сейчас — чекины. Это инструмент, который позволяет пользователям в реальном времени делиться своим местоположением, фотографиями и видео, рассказывая друзьям о том, где они находятся прямо сейчас. В ближайшем будущем планируем добавить элементы геймификации, например, возможность соревноваться за звание «мэра» в различных локациях, основываясь на частоте посещений.</p><p>Кроме того, мы разрабатываем собственную карту Blink Maps, которая будет интегрирована в приложение уже через несколько месяцев для некоторых устройств на Android. Это наша собственная 3D-карта, позволяющая решить технические ограничения, с которыми мы сталкиваемся при использовании платформенных карт, по типу Google Maps. Например, сможем более эффективно отображать больше пинов без задержек и сбоев. Карта будет регулярно обновляться, что позволит избегать проблем с устаревшей информацией. У нас свой движок, построенный на видеопроцессоре GPU, который на основе данных OpenStreetMap делает магию. Основу мы берем из OSM и поверх накручиваем все свои изменения.</p><h3>Как вы считаете, какие тенденции и инновации будут определять развитие мобильных приложений для отслеживания местоположения в ближайшем будущем?</h3><p>Развитие мобильных приложений для отслеживания местоположения будет в значительной степени определяться несколькими ключевыми тенденциями. Во-первых, одним из главных трендов станет создание и использование собственных карт. Компании будут стремиться к разработке индивидуальных картографических решений, чтобы обеспечить более точное и актуальное отображение данных. Это позволит делать карты под себя, а не универсальную балалайку для всех. Сегодня оффлайн — это дополнение к онлайну, а карта лучше всего интегрирует реальный мир в виртуальный.</p><p>Во-вторых, предиктивный анализ и прогнозирование местоположения станут важными направлениями развития. Использование алгоритмов машинного обучения и искусственного интеллекта позволит не только фиксировать текущее местоположение, но и предсказывать перемещения пользователей на основе их привычек и исторических данных. Это значительно улучшит пользовательский опыт и откроет новые возможности для персонализации сервисов.</p><p>Однако, в свете этих тенденций, стоит учитывать, что Apple и Google, например, продолжают усложнять работу с геолокацией для сторонних разработчиков. Несмотря на наличие встроенных решений, таких как Find My Friends у Apple, ограничения и новые требования для работы с геоданными становятся все более жесткими. Это создает дополнительные вызовы для разработчиков, которые должны адаптироваться к меняющимся условиям и искать альтернативные пути стабильной работы своих приложений.</p>]]></content:encoded>
    </item>
    <item>
      <title>Android-приложение без Firebase — миф или реальность?</title>
      <link>https://tproger.ru/articles/android-prilozhenie-bez-firebase---mif-ili-realnost-</link>
      <comments>https://tproger.ru/articles/android-prilozhenie-bez-firebase---mif-ili-realnost-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Илья Илемков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/android-prilozhenie-bez-firebase---mif-ili-realnost-</guid>
      <description><![CDATA[<p>Ищем альтернативы платформе Firebase от Google и разбираемся, почему разработчику важно хранить инструменты в разных корзинах.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/android-prilozhenie-bez-firebase---mif-ili-realnost-">Android-приложение без Firebase — миф или реальность?</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Firebase]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 15 Aug 2024 08:23:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Я Илья Илемков. С 2017 года успел поработать в Directum, EPAM Systems и Huawei. Попробовал почти всё в мобильной разработке: от написания обычных клиентских приложений до разработки системного ПО под Android. Теперь я старший программист-разработчик в инфраструктурной команде ВКонтакте — занимаюсь основным приложением и не только.</p><p>В этой статье на основе опыта работы с Firebase расскажу о плюсах, минусах и альтернативах использования этой платформы. Текст будет полезен тем, кто разрабатывает или планирует разрабатывать мобильные приложения.</p><p>В основе статьи — онлайн BoF-сессия на IT-конференции Mobius 2024, во время которой я обсуждал Firebase с коллегой Сергеем Мясниковым из ВКонтакте, Кириллом Поповым из ОК, Артёмом Ковардиным из RuStore и Алексеем Гладковым — мобильным разработчиком, автором проекта Mobile Developer.</p><h3>Что такое Firebase?</h3><p>Платформа Firebase популярна как набор решений для упрощения разработки мобильных приложений. С помощью её инструментов можно развернуть бэкенд со своей серверной логикой, подключить push-сообщения и аналитику, получать отчёты об ошибках, проводить A/B-тестирование. Платформа облачная: все ресурсы приложений, в том числе базы данных и клиентская аналитика, хранятся на серверах Google.</p><p>Самые востребованные инструменты Firebase:</p><ul><li>Firebase Cloud Messaging (FCM) — позволяет отправлять push-сообщения на устройства пользователей;</li><li>облачная служба Firebase Remote Config — позволяет вносить изменения в конфигурацию приложения в режиме реального времени;</li><li>сервис Firebase Crashlytics — помогает находить в приложениях причины зависаний, сбоев и медленной работы, собирать ошибки с продакшена, систематизировать их и фильтровать;</li><li>сервис Firebase Performance Monitoring — инструмент для аналитики, позволяет отслеживать ключевые метрики: использование памяти, CPU, сетевого трафика;</li><li>сервис Google Analytics — инструмент для продуктовой аналитики, позволяет получать информацию об использовании приложений и вовлечённости пользователей.<br /></li></ul><p>Именно с этих инструментов независимые разработчики и стартаперы обычно начинают знакомство с Firebase.</p><h3>Альтернативы Firebase: почему они важны?</h3><p>У Firebase действительно много полезных инструментов для мобильной разработки. Однако некоторые из них несовершенны и могут замедлить развитие проекта. Именно поэтому важны альтернативы, с которыми можно более точечно работать над продуктом.</p><figure><img src="https://media.tproger.ru/user-uploads/102205/2024-08-12/5cf94d10-cb0f-45e3-b4fa-05190cd7b947.jpg" alt="" /></figure><blockquote>Firebase — хороший выбор для старта приложения, в нём есть всё необходимое для запуска. Можно без лишних затрат опробовать технологии, поиграться с ними. Но сейчас мы находимся на этапе, когда Firebase постепенно теряет свою монополию. Альтернативные механики начинают давать не просто аналоги инструментам платформы, они открывают много новых опций. Поэтому вы даже выиграете, если будете использовать в том числе и альтернативные решения</blockquote><p>Есть ещё одна причина, почему важны альтернативы Firebase: разработчикам необходимо поддерживать свои продукты на версиях Android без сервисов Google, например на ОС, собранных на базе AOSP. Но вне зависимости от операционной системы и её версии лучше держать в голове (а желательно в инструментарии) запасные варианты на случай, если что-то пойдёт не так.</p><h3>Чем можно заменить FCM?</h3><p>Push-сообщения — один из самых востребованных инструментов Firebase. Часто именно из-за него разработчики начинают использовать эту платформу в своих проектах; у них просто нет вариантов — push-сообщения используют Google-сервисы, которые, в свою очередь, имеют «системные привилегии».</p><p>Однако если вы собираетесь делать приложение для рынка России, то крайне желательно рассмотреть и другие инструменты и подумать над запасными решениями. Часть рынка РФ занимают, например, смартфоны Huawei, в которых нет сервисов из Google Play.</p><ul><li>RuStore Push — фактически альтернативный вариант для доставки push-сообщений, причём со своим транспортом. Чтобы упростить интеграцию, есть и омниканальное решение — <a href="https://www.rustore.ru/help/sdk/general-push-notifications/">Universal Push</a>. Благодаря ему в рамках одного SDK можно обеспечить отправку в HMS, FCM и RuStore. Использование универсального API позволит подготовить некоторый fallback-механизм и поможет несколько повысить доставляемость уведомлений.</li><li>Отдельные вендоры смартфонов разрабатывают свои решения для своих устройств. Например есть облачная служба Push Kit для рассылки уведомлений. С помощью неё можно отправлять push-сообщения на устройства Android и iOS, а также в веб-приложения.</li><li>Если вы работаете в сфере B2B, то на рынке есть много MDM-решений — некоторые из них базируются на AOSP со своим транспортом для push-сообщений и со своим сервисом, который интегрируется в инфраструктуру заказчика. Этот вариант обычно используют компании, чтобы управлять устройствами сотрудников.</li></ul><blockquote>Когда проект только стартует, в нём обычно используется лишь Firebase. В дальнейшем желательно сразу заложить в проект несколько вариантов: например, RuStore Push, HMS Core, Firebase и один из омниканальных сервисов, — это позволит обезопасить себя и повысить доставляемость</blockquote><h3>Remote Config: какие есть аналоги?</h3><p>Второй по популярности инструмент Firebase — Remote Config. Из названия понятно, что сервис позволяет добавлять в приложение параметры, которые можно изменять удалённо с бэкенда. Он достаточно легко интегрируется в мобильные приложения — как на Android, так и на iOS.</p><p>Одно из главных достоинств Remote Config — аналитика. Благодаря этому инструменту можно проводить A/B-тесты и изучать аудиторию приложения на основе таких критериев, как возраст или увлечения.</p><p>В качестве альтернативы FRC можно назвать <a href="https://www.rustore.ru/help/developers/tools/remote-config/">RuStore Remote Config</a>, который также позволяет конфигурировать приложения и проводить A/B-тесты. Это решение доступно для приложений на устройствах c Android и iOS и позволяет заменить Firebase.</p><blockquote>Возможность конфигурировать свои приложения и проводить А/В-тесты — важная часть любого проекта, которая помогает делать его лучше для пользователей. Я советую диверсифицировать риски и использовать разные инструменты, чтобы не зависеть от одного сервиса</blockquote><h3>Анализ ошибок: Firebase vs Tracer</h3><p>Анализ ошибок — один из важнейших параметров, на которые опираются при создании и развитии приложений. Если баги не устранять, они могут потянуть за собой ухудшение UX, потерю лояльности и отток аудитории, а также смещение фокуса с написания продуктового кода на исправление ошибок.</p><p>Сервис Firebase Crashlytics предоставляет подобную функциональность поиска ошибок. Он пользуется популярностью среди разработчиков, однако возможности сервиса сравнительно ограничены: в нём неудобный поиск, неточная группировка событий (ошибок, ANR) по типу, нет инструментов для работы с non-fatal ошибками, из-за чего они могут создавать свалку. И это только небольшой список проблем — на деле их гораздо больше.</p><p>В вопросе анализа ошибок у Firebase есть крепкая альтернатива — сервис <a href="https://apptracer.ru/#/doc/about">Tracer</a> от ОК. Если сравнивать эти два инструмента, то Tracer не только предлагает похожую функциональность по анализу, но и расширяет инструментарий разработчика. В нём есть:</p><ul><li>полнотекстовый поиск по стектрейсу;</li><li>полноценный поиск по User ID — не только крешей, но и любых событий;</li><li>возможность самому на клиенте решать, как группировать ошибки. Например, отдельно отслеживать все баги, связанные с авторизацией;</li><li>поиск и фильтрация по любым полям и атрибутам;</li><li>поддержка A/B-тестов;</li><li>возможность профилирования и анализа утечек памяти в продакшене с загрузкой дампов памяти.</li></ul><blockquote>Мы начали создавать Tracer, когда разработчики Crashlytics, по ощущениям, совсем его забросили. Главная страница долго грузилась, сервис не умел сортировать ошибки по количеству задетых пользователей, не было полноценного поиска. В какой-то момент мы с коллегами решили делать свой продукт, в котором не было бы этих проблем</blockquote><p>Ещё одна альтернатива Crashlytics — сервис <a href="https://github.com/getsentry/sentry">Sentry</a>. Это open-source проект, главная особенность которого — возможность развёртки внутри собственной инфраструктуры. Это позволяет минимизировать риски, связанные с утечкой чувствительных данных: например, словарей обфускации или логов с пользовательскими данными. Однако в России легально приобрести и развернуть self-hosted решение от Sentry не выйдет. К тому же на больших объёмах данных оно работает не идеально. И при всём этом требует затрат на поддержку и инфраструктуру.</p><h3>Аналитика от Firebase: альтернативы есть</h3><p>Аналитика, прежде всего, помогает разработчикам зарабатывать на их продуктах. Без неё не получится закупить трафик и будет непонятно, как много времени пользователь проводит в приложении и сколько удалось заработать с каждого источника.</p><p>Сервис для аналитики от Firebase — <a href="https://firebase.google.com/products/analytics">Google Analytics</a> — позволяет увидеть общую картину того, что происходит в приложении. Однако для глубокого погружения он не очень подходит — для этого лучше использовать более локальные решения. Кстати, их довольно много: Google Analytics можно назвать самым легко заменяемым продуктом от Firebase.</p><p>Например, сервис <a href="https://tracker.my.com/">MyTracker</a> от VK. Он ориентирован на российский рынок, менее загружен, чем Performance Monitoring. Соответственно, позволяет более точно анализировать ключевые показатели мобильных приложений, эффективность источников трафика и монетизации. С помощью него можно сегментировать аудиторию и строить прогнозы LTV, оттока. Сервис интегрирован с RuStore и другими альтернативными сторами. На данных и сегментах MyTracker работают Remote Config и могут работать push-уведомления RuStore.</p><p>Ещё один вариант — написать свой движок для аналитики.</p><blockquote>Аналитика от Google позволяет только примерно представить, что происходит с приложением. Если вам необходимо детальное понимание, то лучше всегда держать „второе мнение“. Обычно мы используем внешние системы аналитики и самописные вещи. В этом есть значительный плюс: не надо отдавать важные и персонализированные данные о пользователях сторонней компании</blockquote><h3>Архитектурная гибкость</h3><p>Запуститься совсем без Firebase невозможно, однако у инструментов этой платформы есть альтернативы. Те решения, о которых я рассказал, дополнят необходимую функциональность. Я не призываю навсегда отказаться от Firebase — просто рекомендую проектировать архитектуру так, чтобы была возможность переключиться на другой инструмент. Благодаря этому вы сможете закрыть свои потребности, работать быстрее либо с бо́льшим удобством.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как создать классную среду для разработчиков — взгляд Aurora Foundation</title>
      <link>https://tproger.ru/articles/kak-sozdat-klassnuyu-sredu-dlya-razrabotchikov---vzglyad-aurora-foundation</link>
      <comments>https://tproger.ru/articles/kak-sozdat-klassnuyu-sredu-dlya-razrabotchikov---vzglyad-aurora-foundation?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Лалетин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-sozdat-klassnuyu-sredu-dlya-razrabotchikov---vzglyad-aurora-foundation</guid>
      <description><![CDATA[<p>Мы создаём новую среду разработки приложений для ОС Аврора и не только. При этом стараемся сделать её интуитивно понятной, без необходимости вручную настраивать окружение и гуглить каждый шаг. Рассказали, что уже есть и что планируем добавить.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-sozdat-klassnuyu-sredu-dlya-razrabotchikov---vzglyad-aurora-foundation">Как создать классную среду для разработчиков — взгляд Aurora Foundation</a>»</p>]]></description>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 06 Jun 2024 11:32:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>ОС Аврора — российская мобильная операционная система. Её начали разрабатывать в 2016 году, сейчас выходит уже пятая версия, есть своё комьюнити разработчиков, появляются приложения. В общем и целом платформа развивается.</p><p>Конечно, её сравнивают и будут сравнивать с гигантами вроде Android и iOS. Поэтому она должна быть качественной и вполне конкурентоспособной, и одновременно самобытной и по-своему прорывной.</p><p>Нам хотелось бы привлечь больше разработчиков, создать больше приложений, сформировать свою экосистему сервисов и ширить базу преданных пользователей. И мы создали Aurora Foundation. Проект уже начал объединять разработчиков ОС, приложений и сервисов, производителей устройств. В статье расскажем, что уже готово и что планируем делать в будущем.</p><h2>Взять хорошую универсальную основу</h2><p>Сейчас многие популярные инструменты стали официально недоступны. Любимые многими продукты JetBrains не купить в России, какие-то ресурсы порой доступны только через VPN. Мы делаем IDE для Flutter, так что, очевидно, доступна ещё <a href="https://developer.android.com/studio">Android Studio</a>. Но это всё же нишевый инструмент, который нет смысла брать за основу универсального продукта.</p><p>Есть и альтернативные пути. При желании <a href="https://youtu.be/E29ij9baGPw?si=w48xmPsySrMKqbW1">можно и Neovim заточить под Flutter</a> (хотя вряд ли найдётся много охотников таким образом работать) или посмотреть в сторону развивающихся опенсорсных проектов вроде подающего надежды <a href="https://zed.dev/">Zed </a>от создателей Atom. Но на длинной дистанции это не кажется удобными или надёжными.</p><p>По большому счёту, из мощных универсальных инструментов в свободном доступе остался лишь <a href="https://code.visualstudio.com/">VS Code</a> — по статистике им пользуется примерно треть разработчиков. Но не все его плагины полноценно работают в России, особенно сопряжённые с зарубежными облачными сервисами.</p><p>Так что мы взяли его опенсорсную версию Code OSS в качестве основы и начали писать свою IDE для российского комьюнити разработчиков под основные платформы (Linux, Windows, macOS на x86 и ARM). <a href="https://github.com/microsoft/vscode/blob/main/LICENSE.txt">Лицензия MIT</a>, убедительная история разных форков и способность работать как серверное веб-приложение без локальной установки стали дополнительными аргументами.</p><p><a href="https://idx.dev/">Project IDX</a> — анонсированная новая среда разработки от Google тоже основана на Code OSS.</p><figure><img src="https://media.tproger.ru/user-uploads/100503/2024-06-06/d5ca1441-38b2-4ad3-981d-bbd430396743.png" alt="" /><figcaption>Начало работы с Aurora Studio</figcaption></figure><h2>Максимально упростить работу</h2><p>У Авроры давным-давно есть свои SDK, но процесс установки непростой. Нужно либо уже знать, как система устроена, либо лезть в документацию и идти по инструкции. А давайте честно, мало кто любит инструкции, и большинство сперва подходит интуитивно, обращаясь к документации, уже когда интуитивно не получилось.</p><figure><img src="https://media.tproger.ru/user-uploads/100503/2024-05-16/58f53495-169f-46be-9856-db461fbd4650.png" alt="Dart и Flutter в Aurora Studio" /><figcaption>Dart и Flutter в Aurora Studio</figcaption></figure><p>Мы хотим убрать этот барьер и сделать процесс проще, чтобы даже новичок, который только-только окончил курс «Введение в программирование», смог установить и настроить IDE под себя, И затем быстро собрал работающее приложение с помощью шаблонов и преднастроенных тулчейнов сборки.</p><p>Поэтому делаем так, чтобы всё окружение и инструменты сами устанавливались и настраивались «по клику», а всё остальное автоматически доезжало по мере необходимости. Ну и конечно же используем контейнеры, чтобы создание сред отладки и сборки было наименее «инвазивным» для компьютера разработчика, и в перспективе появилась возможность запускать среды и на серверной стороне в облаке.</p><blockquote>Продуманный Developer Experience — ключ к успеху любой платформы, будь то операционная система или просто фреймворк для прикладной разработки. И мы стараемся позаботиться в том числе о начинающих разработчиках и сделать опыт работы с Авророй для них приятным открытием</blockquote><h2>Добавить эмулятор и совместимость с другими операционками</h2><p>Чтобы протестировать приложение на Авроре, нужен телефон или планшет на Авроре. А их сейчас не всегда легко достать на рынке — особенно если вы группа разработчиков и хотите парк устройств. К тому же не всегда удобно физически подключать телефон к ПК или ноутбуку, чтобы отлаживать и тестировать разрабатываемое приложение.</p><p>Поэтому нужен эмулятор устройства с Авророй. В <a href="https://developer.auroraos.ru/doc/software_development/sdk">классическом Aurora SDK</a> уже есть такой, на базе виртуалок. А в Aurora Studio мы реализуем контейнеры с разными таргетами сборки ОС и эмулятором на базе QEMU. По задумке, его можно будет виртуально запускать и отлаживать приложения на основных архитектурах и форматах устройств локально или в облаке.</p><p>Взяв на вооружение Flutter, можно собирать приложения сразу для Авроры, Android и iOS. И почему бы не задаться целью сделать подход Aurora first — когда вместо портирования на Аврору приложений, изначально разработанных под другие платформы, мы сразу пишем софт под Аврору и параллельно собираем для других платформ. Думаю, такой подход поможет Авроре стать у российских разработчиков куда более популярной мобильной ОС.</p><h2>Добавить облака</h2><p>Облака — это тренд рынка по нескольким причинам.</p><ul><li>Отладка с тестированием становятся настолько ресурсоёмкими и комплексными процессами, что разумно выносить эти операции с компьютера разработчика на внешние мощности, в том числе облачные.</li><li>Да и благодаря многообразию операционных систем, устройств и архитектур (x86 и ARM, RISC-V и MIPS, скорее всего, перестанут быть экзотикой <a href="https://habr.com/ru/companies/macloud/articles/566478/">Эльбрусы</a> и <a href="https://habr.com/ru/companies/selectel/articles/552152/">LoongArch</a> и так далее), приходится учиться жонглировать всё более сложными средами разработки и заниматься созданием и поддержкой собственных стендов в железе.</li><li>Стандартом индустрии становятся IDE, усиленные облачными средствами сборки, запуска, отладки, тестирования и всевозможного анализа кода, а также публикации релизов на площадках дистрибуции. У Apple эти задачи решает <a href="https://developer.apple.com/xcode-cloud/">Xcode Cloud</a>, у Google — недавно стартовавший <a href="https://idx.dev/">Project IDX</a>. Подобная история есть, разумеется, и у Microsoft, причём сразу в нескольких местах – на <a href="https://vscode.dev/">vscode.dev</a>, на <a href="https://github.dev/">github.dev</a> и в Azure.</li><li>В IDE прорастает направление ИИ-ассистентов для программирования, базирующихся на соответствующих облачных сервисах.</li><li>Растёт актуальность нового класса облачных услуг — <a href="https://www.youtube.com/watch?v=_9qnpRGSWUs">Environment-as-a-Service</a> (EaaS, «среда как сервис»).  <br /></li></ul><p>Это, кстати, ещё один аргумент в пользу Code OSS и его способности работать и десктопно, и в браузере. С таким фундаментом переход к нашей собственной EaaS-платформе станет абсолютно бесшовным.</p><h2>Гарантировать безопасность</h2><p>Мы уделяем особое внимание их безопасности, и разработчикам приложений также стоит о ней думать — в частности при взаимодействии с внешними службами.</p><p>Но безопасное кодирование — непростая дисциплина, особенно для новичков, потому что надо:</p><ul><li>овладеть принципами и подходами «безопасного кода»;</li><li>освоить инструменты для своевременного выявления потенциальных уязвимостей;</li><li>разобраться во множестве неочевидных технических нюансов, определяющих безопасную работу ПО;</li><li>изучить требования закона к системам, которые затрагивают персональные данные и идентификацию пользователей, их платёжные средства или физиологические показатели;</li><li>понимать требования закона к системам, которые обслуживают критическую инфраструктуру.</li></ul><p>Крупные компании, онлайн-школы и технологические вузы даже запускают курсы по этой теме, поскольку эти компетенции становятся гигиеной в современном мире.</p><p>Это же просто нескончаемая эпопея с тем, как гиганты вроде Microsoft и их пользователи страдают от дыр в системах: взломы, сливы данных, скандалы. Конечно, сделать софт на 100% безопасным крайне сложно, но тем не менее инструментально обеспечить приличную долю неуязвимости можно.</p><p>Мы же мечтаем сделать безопасную разработку доступнее на уровне IDE. В идеале — чтобы разработчикам любого уровня и понимания темы было сложнее совершать ошибки. Для нас самих это станет дополнительной гарантией того, что в софте будет минимум уязвимостей. Что можно реализовать:</p><ul><li>указывать, что в написанном коде есть небезопасные конструкции, и подсвечивать их (для этого уже есть инструменты, которые нужно интегрировать в IDE);</li><li>автоматически находить дыры и вредоносный код в опенсорсных пакетах, которые использует разработчик (и в их транзитивных зависимостях), прямо на это указывать и советовать использовать другую версию такого пакета или какие-то другие аналоги (у нашего «РТК-Феникс» уже выстроен очень хороший пайплайн, советую<a href="https://www.company.rt.ru/press/news/d467492/"> зайти и почитать</a>);</li><li>предлагать готовые шаблоны безопасной реализации типовых прикладных конструкций.</li></ul><p>Реализовать это всё в упомянутой ранее концепции EaaS — самая разумная стратегия.</p><p>У меня есть сверхзадача — достичь такого уровня зрелости инструментов нашей IDE, который бы позволил буквально гарантировать разработчику: он создаст код, соответствующий всем необходимым требованиям безопасности и лицензионной чистоты. Звучит фантастически, но мы работаем в этом ключе.</p><h2>Всесторонне развивать экосистему</h2><p>Недостаточно просто сделать IDE и ждать, когда к нам придут разработчики — нужно развивать всю экосистему платформы, включая глобальные службы, необходимые приложениям.</p><p>Сейчас на Аврору постепенно добавляются новые приложения и <a href="https://t.me/aurora_devs">растёт сообщество</a> (там уже собрались классные и очень открытые специалисты — заходите). И что важно, мы развиваем экосистему базовых общедоступных сервисов. Среди которых долгожданная глобальная служба пушей, доверенные сервисы точного времени и DNS, проверка интернет-соединения и другие фичи, важные для любой мобильной платформы.</p><p>Из особо интересного: мы решили сделать службу синхронизации пользовательских данных между устройствами и развиваем довольно необычную концепцию сервисной агрегации. Она позволит добавить клиентские сервисы в Аврору не в виде приложений, а через интеграцию данных в одно из специальных типовых приложений платформы. В планах сделать такие приложения для нескольких областей — общение через различные текстовые и голосовые средства коммуникации, личная продуктивность, финансы, файловые хранилища, навигация и прочее.</p><p>Представим, что у вас пять банковских приложений, и вы перешли на Аврору. Чтобы не скачивать всё заново и потенциально не мучиться с иконками веб-версий, можно просто использовать предустановленный сервис, назовем его «Финансы», где будут данные из всех банков. Примером подобной концепции является многим хорошо знакомый Apple Wallet.</p><p>Разумеется, шаблоны работы со всеми сервисами этой экосистемы сразу интегрируем в Aurora Studio. И обеспечим автоматическую публикацию их релизов в <a href="https://www.rustore.ru/">RuStore</a> и приватных корпоративных Аврора Маркетах.</p><blockquote>Развитие Авроры сейчас находится на таком этапе, когда двигаться дальше без экосистемы средств разработки и общедоступных базовых сервисов будет всё сложнее. При этом создание и развитие экосистем задача непростая, и по плечу она, пожалуй, только сообществу крупных игроков, заинтересованных в win-win. Поэтому если не мы, то кто может быть драйвером этого развития?</blockquote><h2>Что осталось сказать</h2><p>У нас огромные планы — осталось всё это сделать. Сейчас у нас уже есть первые сборки среды разработки Aurora Studio, которые можно <a href="https://aurora.rt.ru/#download">скачать и пощупать</a>. Пока там нет всех фич, про которые рассказали в статье, но мы в процессе их реализации. И приглашаем вас протестировать альфа-версию нашей IDE.</p><p>Впрочем, это только начало, и мы не хотели бы интегрировать поддержку других фреймворков и инструментов, сформировать среду для fullstack-разработки — с поправкой на условия, в которых работают российские разработчики, и наши представления об идеальной IDE, сопутствующих сервисах и судьбе сообщества в целом.</p><p>Пишите в комментариях, на что вы обращаете внимание в среде разработки и что хотели бы видеть в IDE.</p><h3>И бонусом несколько полезных ссылок</h3><ul><li><a href="https://t.me/aurora_devs">Живое сообщество в Telegram</a></li><li><a href="https://developer.auroraos.ru/">Официальная документация для разработчиков от</a><a href="https://www.youtube.com/@AuroraOS/videos"> Открытой мобильной платформы</a></li><li><a href="https://gitlab.com/omprussia">Официальная библиотека на GitLab</a></li><li><a href="https://www.youtube.com/@AuroraOS/videos">YouTube-канал Открытой мобильной платформы, где выходят новости и обзоры</a></li><li><a href="https://developer.auroraos.ru/">Портал разработчиков</a></li><li><a href="https://gitlab.com/omprussia/edu">Учебный курс на GitLab по работе в Qt</a></li><li><a href="https://stepik.org/course/71788/info">Бесплатный курс на Stepik</a></li><li><a href="https://otus.ru/lessons/qt-aurora/">Платный курс на Otus</a></li><li><b><a href="https://www.infosystems.ru/courses/avtorizovannye_kursy/ISSF010/">Очный курс в Академии Информационных систем</a></b><br /></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Создание Android-приложений стало проще благодаря встроенному ИИ Gemini Pro в Android Studio</title>
      <link>https://tproger.ru/news/sozdanie-android-prilozhenij-stalo-proshhe-blagodarya-vstroennomu-ii-gemini-pro-v-android-studio</link>
      <comments>https://tproger.ru/news/sozdanie-android-prilozhenij-stalo-proshhe-blagodarya-vstroennomu-ii-gemini-pro-v-android-studio?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/sozdanie-android-prilozhenij-stalo-proshhe-blagodarya-vstroennomu-ii-gemini-pro-v-android-studio</guid>
      <description><![CDATA[<p>Google облегчила мобильную разработку под Android, добавив в Android Studio ИИ чат-бота Gemini Pro с функциями подсказки и написания кода</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/sozdanie-android-prilozhenij-stalo-proshhe-blagodarya-vstroennomu-ii-gemini-pro-v-android-studio">Создание Android-приложений стало проще благодаря встроенному ИИ Gemini Pro в Android Studio</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 09 Apr 2024 12:44:39 GMT</pubDate>
      <content:encoded><![CDATA[<p>Хотите, чтобы Android-разработка стала проще и вы могли сфокусироваться на креативе?</p><p>Встречайте помощника с искусственным интеллектом Gemini Pro прямо внутри Android Studio!</p><h2>Gemini Pro – это что такое?</h2><p>Это умный чат-бот от Google, понимающий ваши вопросы об Android-разработке. То есть с помощью этого умного генератора кода вы сможете быстрее писать код. К тому же он, будучи знатоком Android, будет советовать правильные решения по ходу написания проекта.</p><h2>Что он умеет?</h2><ul><li>Отвечать подробно на вопросы вроде «Как добавить камеру в мое приложение?» или «Помоги создать экран логина в Compose».</li><li>Генерировать целые куски кода по вашим описаниям.<br /></li><li>Писать комментарии и документацию к вашему коду!</li></ul><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-04-09/90171d0a-dc3f-41fd-b2fd-f65cac6efa4f.jpeg" alt="" /></figure><h2>Это безопасно?</h2><p>По словам Google, Gemini Pro заботится о конфиденциальности – он использует данные только с вашего разрешения. Вы сами решаете, какие части проекта можно показывать ИИ.</p><h2>Где новинку можно попробовать?</h2><p>Gemini Pro сейчас на стадии тестирования, но уже доступен в свежих версиях <a href="https://android-developers.googleblog.com/2024/04/android-studio-uses-gemini-pro.html">Android Studio</a>.  Ищите его в разделе Gemini in Android Studio.</p><h2>И еще немножечко на сладкое…</h2><p>Новенький шаблон Gemini API Starter поможет создать собственные приложения при помощи ИИ. Его можно использовать, например, чтобы добавить в проекты разные фишки вроде:</p><ul><li>Умного чата</li><li>Генерации подписей к изображениям<br /></li><li>Перевода<br /></li><li>И многого другого!<br /></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Почему Flutter такой популярный</title>
      <link>https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj</link>
      <comments>https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj</guid>
      <description><![CDATA[<p>Узнали у middle и senior специалистов, в чём причина популярности Flutter и какие у него перспективы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj">Почему Flutter такой популярный</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 15 Mar 2024 13:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>К 2024 году на Flutter было написано 700 000 приложений. Это очевидно много. Мы узнали у middle и senior специалистов, в чём причина популярности Flutter и какие у него перспективы.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>На сегодняшний день, в целом, можно позитивно оценить Flutter. Его основной плюс в том, что это кроссплатформенная среда, позволяющая быстро типировать и экономить время. Гипотетически, один разработчик может обслуживать полностью экосистему iOS и Android, а также создавать кроссплатформенные приложения. С помощью Flutter можно смоделировать нативное приложение под Windows, Linux и iOS, и оно будет запускаться сразу в контейнере на Flutter, адаптированном под операционную систему, на которой оно запускается. Это существенно сокращает затраченное время и количество разработчиков для поддержания разных платформ.</p><p>Дополнительным преимуществом Flutter является то, что он разрабатывается силами Google, обладающего значительными ресурсами. Для Google это проект имиджевый, они вкладывают в него финансовые средства и нанимают квалифицированных специалистов. Платформа регулярно обновляется, придается большое значение оптимизации. Flutter представляет собой серьезное решение, которое составляет значительную конкуренцию нативным приложениям.</p><p>Единственным минусом Flutter является то, что для разработки крайне специфических задач, не поддерживаемых экосистемой Flutter, придется прибегнуть к нативной разработке и коду. Однако 99% задач покрываются уже существующими плагинами и библиотеками.</p><p>Кроме того, стать серьезным разработчиком на Flutter проще, чем стать экспертом в области Data Science или фронтэнд-разработчиком. Это объясняется наличием обширного комьюнити, поддерживающего этот язык программирования.</p><p>На связи Иван Ярославцев, руководитель агентства разработки цифровых продуктов Alto. Мы готовим к запуску новое мобильное приложение, а перед публикацией кейса, хотим рассказать про технологию мобильной разработки Flutter.</p><p>А именно, почему Flutter пользуется такой популярностью у программистов и  как он помогает экономить бизнесу миллионы рублей на разработке.</p><p>Компании используют мобильные сервисы для разных задач: улучшить качество клиентского обслуживания, привлечь больше заказов, автоматизировать производство или избавить сотрудников от рутинной работы.</p><p>Но главная цель — оптимизировать ресурсы.</p><p>По нашему опыту, Flutter — лучшее решение для этой задачи. Главная его фишка — возможность создавать приложения для iOS и Android, используя один язык программирования и общий код.</p><p>Почему заказов на кроссплатформенные решения становится все больше?</p><ol><li>Цена на разработку. Экономия в среднем составляет 30-50% от нативных решений на Swift и Kotlin. Технология подходит для проектов с бюджетом до 6 млн рублей.</li><li>Сроки разработки. Использование общей кодовой базы для всех платформ сокращает время разработки на всех этапах. Например, первую версию приложения «Шампурико» мы разработали за 4 месяца.</li><li>Функциональность. Проработанность и гибкость фреймворка закрывает потребности большинства сфер бизнеса. Flutter-приложения создаются для e-commerce, фудтеха, B2B-продуктов и других направлений. <br /></li><li>Поддержка. Развивать и поддерживать один продукт с общим кодом дешевле и проще, чем несколько параллельных приложений для разных платформ.<br /></li></ol><p>Почему программисты выбирают Flutter основным стеком?</p><ol><li>Open-source библиотеки. Flutter сегодня — первый по популярности кроссплатформенный фреймворк. Под него написаны тысячи открытых библиотек, что позволяет быстро добавлять новые функции и возможности в проект.</li><li>Востребованность на рынке и обучение. Распространенность этого фреймворка открывает большие возможности для трудоустройства. Также для изучения Flutter разработаны сотни образовательных программ.</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>Учимся iOS-разработке: что должен знать любой разраб в 2024 году</title>
      <link>https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu</link>
      <comments>https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu</guid>
      <description><![CDATA[<p>Мы опросили middle и senior специалистов, какие фреймворки и инструменты iOS учить, чтобы легко найти работу в разработке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu">Учимся iOS-разработке: что должен знать любой разраб в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Feb 2024 13:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Джунов и стажёров в айти интересует, какие библиотеки, фреймворки и инструменты iOS учить, чтобы быстро и легко найти работу в разработке.</p><p>Мы опросили специалистов уровня middle и senior, которые дали свои комментарии. Вот, что они ответили.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><h2>Язык</h2><p>Очевидно, но всё же: начинать нужно со Swift. Это основной язык разработки для платформ Apple — iOS и macOS. За 10 лет с момента выхода он полностью заменил Objective-С. В целом iOS-разработчику полезно знать Objective-C, поскольку его всё ещё можно встретить в легаси проектов с историей, но основной инструмент всё же Swift.</p><h2>Архитектурные фреймворки</h2><p>Apple в своей документации по-прежнему рекомендует архитектурные шаблоны MVC, Model-View-Controller. Это первый шаблон, с которым столкнётся начинающий iOS-разработчик. Шаблон — это способ организации кода, призванный сделать его поддерживаемым, расширяемым и читаемым.</p><p>Интересно, что эппловский MVC несколько отличается от канонического, общепринятого. И кстати, многие крупные компании отказываются от MVC, поскольку он приводит к разрастанию кодовой базы, и код, напротив, становится сложным для чтения.</p><p>С этой проблемой можно работать с помощью других архитектурных шаблонов проектирования, например MVP, Model-View-Presenter и MVVM, Model-View-ViewModel.</p><h2>Библиотеки</h2><h3>UIKit и Swift UI</h3><p>UIKit — фреймворк для создания интерфейсов в iOS. Он существует почти столько же, сколько сам айфон, и включает все компоненты пользовательского интерфейса — кнопки, текстовые поля, таблицы…</p><p>SwiftUI — более новый фреймворк, который позволяет верстать пользовательские интерфейсы в соответствии с актуальным декларативным подходом. В чём отличие декларативного от более старого императивного подхода?</p><p>Императивный подход предполагает, что мы пишем код приложения как инструкцию: за шагом 1 следует шаг 2 — и никак иначе.</p><p>При декларативном подходе мы описываем желаемый результат, без явного указания последовательности действий.</p><p>Как правило, декларативный подход делает код более читаемым и поддерживаемым. Это очень важно, потому что разработчик около 80 % времени не пишет, а читает код, разбирается в нём.</p><p>Пока UIKit и SwiftUI существуют параллельно — в том числе потому, что SwiftUI работает с версиями iOS от 13 и младше. Со временем UIKit уйдёт, как и язык Objective-C.</p><h3>Core Data и SwiftData</h3><p>Это инструменты работы с базами данных. Более новый фреймворк SwiftData создан на основе Core Data и предлагает более удобный и простой синтаксис. Кстати, SwiftData и Core Data могут использоваться одновременно.</p><h3>GCD и async/await</h3><p>GCD, Grand Central Dispatch — это механизм от Apple работы с многопоточным асинхронным кодом.</p><p>Если упростить, взаимодействие фронтенда и бэкенда устроено так: мы отправляем запрос и получаем ответ. Пока этот запрос идёт к серверу, а тот собирает эти данные и пытается нам их вернуть, может пройти 2-3 секунды. Если мы будем ждать выполнения метода — нам придётся на это время «заблокировать» приложение, остановить его работу для пользователя. Это плохо, так нельзя.</p><p>Потому и нужна асинхронность. GCD отвечает как раз за асинхронность, управляет очередями запросов, в нужные моменты создаёт и останавливает их.</p><p>При этом многопоточный асинхронный код тяжело поддаётся отладке. Баг, связанный с многопоточностью и асинхронностью, тяжело выявить и исправить.</p><h2>Среда разработки</h2><p>XCode — это «родная» среда разработки для создания приложений для iPhone, iPad, Apple Watch, MacBook и других устройств экосистемы Apple.</p><p>XCode включает в себя редактор кода, интерфейсные конструкторы, отладчики — словом, все инструменты, которые нужны для разработки и тестирования.</p><p>Любые существующие альтернативы — неофициальные, Apple их не поддерживает.</p><h2>Система контроля версий</h2><p>Конечно, нет разработки без какой-либо GIT, системы контроля версий. Когда разработку ведёт команда — а это любое количество разработчиков больше одного — необходимо хранить историю изменений. Например, чтобы в любой момент можно было откатить изменения и вернуть предыдущую версию приложения. Умение работать с GIT необходимо любому разработчику, независимо от платформы, для которой он пишет.</p><p>Чтобы ответить на вопрос, что надо изучать молодым разработчиками под iOS или тем кто хотят ими стать в 2024, надо для начала в кранце описать те изменения которые происходят сейчас в индустрии.</p><p>С приходом в массовое использование LLMs которые становятся все более полезными при разработке, на первый план будет выходить базовые знания и общее понимание того, что делать программист.</p><p>Все больше и больше будут цениться не те люди которые знают какие-то фреймворки или работал с определенными библиотеками, а те, кто хорошо понимает как построить хорошую архитектуру приложения, лучшие практики в разработке, знает алгоритмы и структуры данных, понимает как работает управление памятью на iOS и т.д.</p><p>На эту теоретическую базу уже необходимо накладывать практике по написанию приложений, во время которой и появится опыт работы с фреймворками, библиотеками и всеми остальными прикладными навыками, без которых приложение не написать.</p><p>Следующий важнейший момент - это максимально быстро постараться получить опыт работы в команде, ознакомиться с современными методологиями построения рабочего процесса, понимать что такое Agile, Scram, Code Review, парное программирование и т.д.</p><p>Еще я бы советовал на самом раннем этапе разобраться в том что такое Unit тесты, для чего они нужны и как их писать и стараться через боль и слезы писать их как можно больше в своих тестовых проектах. Этот навык автоматом заставит писать качественный код, а понимание покрытия приложения тестами даст огромный плюс для начинающего разработчика.</p><p>Ниже краткий гайд того как бы я рекомендовал выстраивать изучение iOS в 2024:</p><ol><li>Потратить время на базовые знания в области алгоритмов и структур данных и изучение языка программирования Swift, понимать что такое массивы, множества, классы, структуры, перечисления и т.д. Этот пункт может быть очень тяжелым для начинающего и поэтому я бы рекомендовал не тратить на него много времени с самого начала, чтобы не потерять мотивацию, а возвращаться к нему и подтягивать знания во время остальных пунктов.</li><li>Начать изучать SwiftUI и жизненного цикла приложения в iOS, начать писать первые очень простые приложения, которые позволят продолжать тренировать и прокачивать пункт No1.<br /></li><li>Почитать про архитектуру приложений, паттерны проектирования (базовые из них). Изучать и самое главное постараться максимально понять на примерах, что такое SOLID. На этом этапе можно взять свое тестовое приложение с предыдущего этапа и переписать его используя лучшие практике.<br /></li><li>Освоить системы контроля версий хотя бы на базовом уровне. Изучать что такое Git и как с ним работать, выработать привычку делать изменения своего кода в отдельных ветках и т.д.<br /></li><li>Начать изучать сетевое взаимодействие, понимать что такое HTTP, как происходит взаимодействие с сервером, какие запросы бывают и т.д. На этом этапе я бы советовал взять любой открытый API и написать простейший клиент к нему использую URLSeession. Не надо искать библиотеке, которые помогут вам это сделать, попробуйте разобраться в тех фреймворках которые предоставляет Apple.<br /></li><li>Немного покопать в сторону многопоточности используя пример с запросами к серверу, почитать про GCD и нативный Cuncurrency в Swift (Actors, async/await, etc.)<br /></li><li>Если предыдущие этапы пройдены, и появилось базовое понимание того как работает разработка под iOS, можно смело переходить к сторонним библиотекам. Во-первых, надо изучить механизм подключения этих библиотек - Swift Package Manager (SPM). На данном этапе можно взять свое предыдущее приложение по работе с API и переписать сетевую часть на вариант с использованием сторонней библиотеки Alamofire.<br /></li><li>Начать изучать Unit тестирование и постараться покрыть свое приложение тестами. В процессе покрытия тестами вы скорее всего обнаружите, что большую часть кода покрыть тестами не получается, и это отличный знак того, что надо вернуться к первым пунктам и более детально изучить улучшение архитектуры приложения.<br /></li><li>Почитать про методологии разработки, работу в команде, Agile, Scrum и т.д.<br /></li><li>Опционально: необязательно, но безусловно будет плюсом покопать также в сторону баз данных и работы с данными в iOS: SwiftData, Core Data.<br /></li><li>Искать первую работу в этой области. Если вы действительно сможете пройти предыдущие 9 пунктов, напишете пару тестовых проектов, которые вы довели до конца, могу вас уверить, что вы сможете устроиться на начальную позицию в хорошую компанию.</li></ol><p>Если есть желание попробовать себя в разработке приложений под iOS, то по большому счету на сегодняшний день существует несколько больших фреймворков для создания приложений. Например: от Apple – UIKit, SwiftUI. От Google – Flutter, от Meta – React Native. Остальные фреймворки или мало популярны или устарели (Например Cordova и PhoneGap, Ionic).</p><p>Существуют 2 вида разработки мобильных приложений: нативная и кроссплатформенная. Стоит отметить – для новичков предпочтительнее нативная разработка. В то время как кроссплатформенные подойдут для более опытных разработчиков. Нативная разработка избавит от изучения различий между платформами, позволит сосредоточиться на нюансах разработки мобильных приложений именно для iOS, а не распыляться на все платформы.</p><p>Итак, чтобы приступить к разработке своего первого мобильного приложения для iOS, необходимо сделать следующее:</p><ol><li>Определиться с идеей и предполагаемым интерфейсом приложения.</li><li>Выбрать язык программирования, на котором вы будете писать код. Это может быть Swift или Objective-C. Но Swift предпочтительней, так как он имеет легкий синтаксис и Apple регулярно добавляет новые улучшения.<br /></li><li>Выбрать фреймворк, который вы будете использовать. Более современный и легкий для обучения будет SwiftUI, это декларативный (описательный) фреймворк от Apple, или надежный и основополагающий UIKit, это более старый фреймворк, но использующийся в большинстве iOS приложений.<br /></li><li>Установить среду разработки Xcode. Это необходимый в разработке инструмент, даже для кроссплатформенной.<br /></li><li>Начать претворять в жизнь вашу идею!<br /></li></ol><p>По началу знаний и навыков будет не хватать. Поэтому полезно будет воспользоваться открытыми библиотеками и инструментами для iOS (вы легко можете их найти на github).</p><p>Из самых популярных библиотек стоит выделить:</p><ol><li>Alamofire – для HTTP-запросов и только.</li><li>Lottie – какое iOS приложение без красивых анимаций?<br /></li><li>RxSwift/Combine – для реактивного программирования.<br /></li><li>SwiftDate – Для упрощения работы с датами. Работа на прямую с датами может вызвать множество вопросов особенно для новичков.<br /></li><li>- Kingfisher/SDWebImage – для загрузки изображений.</li></ol><p>Инструменты:</p><ol><li>Git – инструмент для управления версиями вашего приложения. Для упрощения работы можно использовать графические оболочки – Fork, SourceTree и другие.</li><li>CocoaPods и Swift Package Manager – менеджеры для установки библиотек.<br /></li><li>Firebase – сервис от Google, который поможет вести статистику и работать с БД.<br /></li><li>Fastline – для автоматизации загрузки ваших кодов на AppStore.<br /></li><li>TestFlight – чтобы устанавливать ваше приложение на телефон и хвастаться перед друзьями.<br /></li></ol><p>В мире постоянно меняющихся технологий важно быть в курсе текущих трендов и инструментов. В DigitMind Technologies мы акцентируем внимание на выборе современных и эффективных решений для разработки на iOS. Вот наши рекомендации по ключевым технологиям и инструментам, которые должен знать каждый начинающий разработчик в 2024 году.</p><h2>Устаревшие технологии</h2><p>В разработке на iOS есть инструменты и фреймворки, которые, несмотря на свою предыдущую популярность, становятся устаревшими. Например, RxSwift и SnapKit были незаменимыми инструментами для реактивного программирования и упрощения работы с AutoLayout соответственно. Однако с появлением SwiftUI и Combine, эти технологии уходят на второй план, поскольку новые инструменты предлагают более интегрированные и эффективные способы достижения тех же целей.</p><h2>Библиотеки и фреймворки, которые нужно знать в 2024 году</h2><ol><li>SwiftUI полностью изменяет подход к разработке интерфейсов на всех устройствах Apple, предлагая более простой и мощный декларативный синтаксис. Это первое, что должен освоить начинающий разработчик, стремящийся к созданию современных и адаптивных приложений.</li><li>Combine играет ключевую роль в управлении асинхронным кодом и событиями в приложениях iOS, используя концепции реактивного программирования. Освоение этой библиотеки позволяет создавать более чистый и понятный код для работы с данными и событиями.<br /></li><li>Swift Composable Architecture (TCA) предлагает структурированный подход к построению приложений, сосредоточиваясь на управлении состоянием и эффектами в декларативном стиле. TCA облегчает тестирование, поддержку и масштабирование приложений, делая его ценным инструментом для современного iOS-разработчика.<br /></li></ol><h2>Важные инструменты разработки</h2><ol><li>Xcode остаётся неотъемлемой частью экосистемы разработчика на iOS, предоставляя все необходимые инструменты для разработки, отладки и распространения приложений.</li><li>Swift Package Manager значительно упрощает управление зависимостями, позволяя легко интегрировать и обновлять библиотеки и фреймворки в проектах.<br /></li></ol><p>В iOS разработке на сегодня есть два основных фреймворка для создания интерфейсов: старый добрый UIKit и более свежий и модный SwuftUI. И перед новичками часто стоит задача - какой же из них лучше изучать, чтобы быстрее найти работу?</p><p>Короткий ответ на вопрос - лучше знать оба. :)</p><p>Ответ подлиннее: как бы нам ни хотелось уже перейти на более современные технологии, проектов на чистом SwiftUI пока еще очень мало, и знание UIKit вам, скорее всего, понадобится. Поэтому я рекомендовала бы начать изучение именно с него. Однако знание SwiftUI точно добавит очков начинающему специалисту и поможет выделиться серди конкурентов. Даже не все опытные разработчики знают этот фреймворк, и если у компании есть планы постепенно его внедрять - знания SwiftUI, даже для начала не очень глубокие, точно очень помогут в карьере.</p><p>Еще, по моему опыту, много проектов сегодня используют фреймворки для реактивного программирования (в основном, Combine и RXSwift). Далеко не все джуны их знают, поэтому изучить их основы точно будет плюсом. Начать советую с Combine - это нативный фреймворк Apple, который, как мне кажется, постепенно вытесняет RXSwift.</p><p>Что касается базовых инструментов для разработки и командной работы - в 2024 году вряд ли что-то кардинально изменится. Уверенное пользование Xcode, git, основы работы с Figma -  все это точно пригодится в любой команде.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Приключение космического барахольщика» — квест по Swift и Kotlin от Tproger x Авиасейлс</title>
      <link>https://tproger.ru/interactive/quest-tproger-x-aviasales</link>
      <comments>https://tproger.ru/interactive/quest-tproger-x-aviasales?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Чуватова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/interactive/quest-tproger-x-aviasales</guid>
      <description><![CDATA[<p>Пройдите космический квест и разгадайте тайну коробочки в квесте от Авиасейлс и Tproger.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/interactive/quest-tproger-x-aviasales">«Приключение космического барахольщика» — квест по Swift и Kotlin от Tproger x Авиасейлс</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Игры]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Feb 2024 15:38:23 GMT</pubDate>
    </item>
    <item>
      <title>Почему iOS-разработка — это отстой</title>
      <link>https://tproger.ru/articles/pochemu-ios-razrabotka---eto-otstoj</link>
      <comments>https://tproger.ru/articles/pochemu-ios-razrabotka---eto-otstoj?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-ios-razrabotka---eto-otstoj</guid>
      <description><![CDATA[<p>IT-блогер mayuko рассказала в своём видео, почему она не любит iOS-разработку: это дорого и больно.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-ios-razrabotka---eto-otstoj">Почему iOS-разработка — это отстой</a>»</p>]]></description>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 09 Feb 2024 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>IT-блогер mayuko рассказала в своём видео, почему она не любит iOS-разработку: это дорого и больно.</p><p>Вот, о чём идёт речь в ролике.</p><ol><li>Спикер по имени Маюко ведет канал, где обсуждаются темы, связанные с технологиями, карьерой и жизнью.</li><li>Маюко анонсировала новую линейку товаров (мерч), доступную для покупки.<br /></li><li>Она имеет шестилетний опыт работы iOS-разработчиком в Кремниевой долине и ранее активно рассказывала о преимуществах этой профессии.<br /></li><li>Маюко решила поделиться и недостатками карьеры iOS-разработчика, подчеркивая, что нет идеальных технологий или профессий.<br /></li><li>Она упомянула, что не все компании нуждаются в приложениях, что ограничивает возможности для трудоустройства iOS-разработчиков.<br /></li><li>Не каждая компания, имеющая iOS-приложение, готова инвестировать в мобильную разработку, что также сужает спектр возможностей для разработчиков.<br /></li><li>Разработка под iOS требует дорогостоящего оборудования (MacBook), что является финансовым барьером для многих начинающих разработчиков.<br /></li><li>Интегрированная среда разработки Xcode, несмотря на свою интеграцию с продуктами Apple, может быть сложной в использовании и иногда дает непонятные ошибки.<br /></li><li>iOS-разработка является нишевой технологией, что затрудняет переход к другим технологиям и языкам программирования.<br /></li><li>Процесс публикации приложений в App Store требует прохождения проверки, что замедляет выпуск обновлений и требует строгого планирования релизов.<br /></li><li>В сообществе iOS-разработчиков существует своего рода 'культ Apple', что может создавать неприятную атмосферу и ощущение эксклюзивности.<br /></li><li>Маюко признает, что, несмотря на недостатки, она все еще любит iOS-разработку и продолжит заниматься ею, стремясь дать полное представление о профессии.<br /></li></ol><p>Ниже — транскрибированный перевод ролика на русский язык.</p><p>Как многие из вас знают, я работала в Силиконовой долине iOS-разработчиком в течение шести лет. И за последние два-три года на моем канале я много говорила о том, почему мне нравится разработка под iOS. И хотя я не жалею о выбранном мной пути карьеры, потому что он предоставил мне множество отличных возможностей, и я очень благодарна за них, и мне нравится создавать iOS-приложения, я также считаю важным говорить о недостатках, потому что после двух-трех лет гиперболизации разработки под iOS я чувствую, что пришло время рассказать о том, почему мне это не нравится, потому что ничто не идеально, вы знаете, нет идеальной технологии или идеальной карьеры, поэтому я просто хотела пролить свет на эту сторону. Если вы смотрите это видео, то, возможно, вы рассматриваете карьеру в разработке под iOS, или просто изучаете рынок труда и хотите узнать о плюсах и минусах всего этого.</p><p>К сожалению, лично я не могу дать много плюсов и минусов для всех остальных областей, потому что разработка под iOS - это все, что я знаю, но я надеюсь, что это поможет в любом случае.</p><h2>Не всем нужно приложение</h2><p>Итак, первый пункт заключается в том, что не каждой компании нужно приложение. Если подумать о всех платформах, сервисах и веб-сайтах, многим из них нужен веб-сайт, но не каждому нужно приложение для iOS и Android. И поэтому выбор карьеры в разработке под iOS означал, что мои возможности были ограничены в выборе места работы. Конечно, в 2020 году и в 2010-х годах большинство людей все равно хотели создать приложение для своего продукта. И поэтому это не было таким ограничением, но если сравнить количество вакансий в веб-разработке, например, с разработкой под iOS, то размеры совершенно разные. В то же время некоторые продукты лучше подходят для приложений под iOS, чем для веб-сайтов.</p><p>Так что здесь есть обе стороны медали, но я считаю, что для компаний более универсальным является желание создать веб-сайты перед созданием приложения.</p><h2>Не всем нужны iOS-разработчики</h2><p>Следующий пункт заключается в том, что не каждой компании нужно много iOS-разработчиков. Связано с предыдущим пунктом, даже если у компании есть приложение для iOS, это не обязательно означает, что им всегда хочется много вкладывать в мобильную разработку.</p><p>И это потому, что сценарий использования не всегда имеет смысл, или они не нашли такой, который имеет. Я начала заниматься разработкой под iOS в 2014 году, и на протяжении всего шести лет мне также приходилось бороться, чтобы убедить компании инвестировать в разработку под iOS. Всегда идет дебаты о том, что важнее, мобильное приложение или веб-сайт, что стоит приоритезировать. И часто мобильное приложение проигрывает. Честно говоря, я потратила немало времени на убеждение руководителей, продуктовых лидеров, что мобильная разработка стоит вложений, хотя я и инженер. Но как еще я буду иметь задачи, если не убежу людей важности этой работы?</p><p>Однако со временем ситуация становится лучше.</p><p>Все больше и больше компаний говорят: "Да, конечно, нам нужно приложение для этого". Или, знаете, они сразу делают ставку на мобильные устройства. Но, думаю, это стоит иметь в виду.</p><h2>Быть iOS-разработчиком — это дорого</h2><p>Следующая причина, почему мне не нравится разработка под iOS, и, вероятно, это мой главный минус, заключается в том, что быть разработчиком под iOS действительно дорого. Для тех, кто не знает, разрабатывать приложения под iOS и Mac приложения можно только на Mac, нельзя делать это на Linux или Windows, что означает, что для создания приложений под iOS вам нужен MacBook.</p><p>На рынке представлено множество продуктов от Apple с различными ценовыми категориями, но я считаю, что вам нужен как минимум MacBook Pro. Вы можете запустить Xcode на любом Mac, но если вы запустите его на, например, MacBook Air, он будет работать очень медленно.</p><p>Я считаю, что 13-дюймовый MacBook Pro имеет минимальные характеристики процессорной мощности для запуска всего. Кроме того, Xcode занимает почти 20 гигабайт места на вашем компьютере, поэтому это исключает многих людей, если Mac такие дорогие, и это то, что вам нужно для входа в эту область.</p><p>Так что финансовая нагрузка реальна. Это буквально исключает многих людей из числа потенциальных разработчиков под iOS, потому что не каждый может себе позволить Mac.</p><p>Вот почему вещи вроде веб-разработки набирают обороты намного быстрее, потому что любой человек с любым компьютером, независимо от своего финансового положения, может начать программировать. И Apple сознательно выбирает такие ценовые категории, и пока они не представят линейку Mac за двести-триста или даже пятьсот долларов, это будет крайне эксклюзивно. Так что это то, что мне действительно не нравится в разработке под iOS.</p><h2>Xcode слишком сложный</h2><p>Следующее, что мне не нравится, это то, что работать с Xcode довольно сложно. Xcode, для тех, кто не знает, является официальной средой разработки для iOS, созданной Apple. И это здорово, потому что она интегрирована на всех уровнях, Apple создает язык программирования, компьютеры, телефоны, среду разработки, фреймворки и все остальное.</p><p>Но иногда она просто не работает для меня. В сообществе разработчиков под iOS даже есть много шуток о том, как уговорить Xcode сделать то, что вы хотите. И по сравнению с некоторыми сторонними инструментами, она все еще лучшая, но это не делает ее более простой для работы иногда. Поскольку разработка под iOS требует процесса компиляции, времена компиляции могут быть очень долгими в зависимости от вашего компьютера. И иногда она выдает криптичные, труднопонимаемые сообщения об ошибках.</p><p>Иногда вам приходится очищать кэш. И вам приходится перезапускать компьютер и так далее, так что это просто часть разработки под iOS, и я бы хотела, чтобы это работало немного проще, но ни один инструмент разработки не идеален, так что, думаю, это то, что у нас есть. Тем не менее, это все равно попало в мой список причин, почему мне не нравится разработка под iOS.</p><h2>Разработка под iOS слишком нишевая</h2><p>Разработка под iOS - это своего рода узкая технология, поэтому, я считаю, что ее довольно сложно перевести на другие технологии, которые существуют. Мое впечатление о веб-разработчиках и других разработчиках заключается в том, что им довольно легко или относительно легко освоить другие виды технологий и языков программирования. Но потому что разработка под iOS - это закрытая экосистема, и вещи меняются, но не слишком радикально, это просто сложнее сменить карьеру и перейти, например, в разработку фронт-энда. Так что если вы выбрали путь разработчика под iOS, вы не можете просто так переключиться на другие вещи. Но, я имею в виду, iOS все равно узкая область. И я говорю это потому, что используемые в iOS и Swift шаблоны исторически очень, но, да, становится все сложнее и сложнее, я чувствую, освоить другие вещи.</p><p>Но, да, это все равно, я имею в виду, это все равно узкая область.</p><h2>Деплой — это боль</h2><p>Следующее в списке, что, я знаю, это действительно большая проблема, с которой сталкиваются все разработчики под iOS, - это то, что вы не можете развертывать вещи в любое время.</p><p>В отличие от веб-разработки, где вы можете развертывать тысячи вещей в день и развертывать в любое время суток, это не так для разработки под iOS. И это потому, что у нас есть процесс проверки в App Store. Apple ввела это, чтобы обеспечить уровень качества и безопасности для всех приложений, которые у них есть в App Store для своих пользователей, что замечательно.</p><p>Я считаю, что это хорошо. Это означает, что вы не можете загрузить вирус, если загрузите приложение из App Store.</p><p>Но для разработчиков это означает, что вам придется проходить процесс проверки с Apple каждый раз, когда вы захотите обновить свое приложение. Краткий обзор заключается в том, что вы отправляете бинарный файл в Apple, они проверяют его примерно за день или два, а затем могут принять или отклонить. И если он принят, то вы можете опубликовать его. Но если он отклонен, вам придется много раз общаться и пытаться исправить проблему. И вам придется следовать всем рекомендациям по проверке магазина приложений.</p><p>Так что да, то, что вам приходится ждать день, чтобы Apple занялась вашим приложением, делает весь этот процесс намного длиннее. Итак, вам придется как-то планировать свои релизы. И это также означает, что если вы выпустите производственную ошибку, то, черт возьми, она будет там, знаете, по крайней мере полдня.</p><p>Так что да, вам просто нужно быть более осторожными.</p><h2>iOS-разработчики странные</h2><p>И наконец, на последнем месте, и я не очень знаю, как это передать, но я подумала, что должна это сказать, это то, что разработка под iOS как бы немного камповая, что, возможно, все разработки как-то таковы, но мне кажется, что особенно iOS-разработка.</p><p>И я имею в виду, я думаю, что дело в том, что это Apple, знаете, многие почитают Apple. И иногда в сообществе разработчиков под iOS кажется, что они так почитают Apple, что это похоже на религию или культ, и это просто как-то странно, это как будто Apple - это бог, который меняется и выпускает обновления, и вы всегда просто, как, о, боже, Apple, это так удивительно, это так здорово, или вы всегда критикуете его за то, что он не сделал, и это просто, как, успокойтесь, это просто компания, и некоторые продукты, есть такие вещи, как соперничество с Android, и я просто, как, парень, кому это важно?</p><p>Люди будут использовать тот телефон, который им хочется. И да, возможно, это имеет значение в бизнес-мире, но разработчикам под iOS нет смысла возмущаться из-за того, кто лучше и кто хуже. Все существует по какой-то причине, и нет лучшего или худшего. Так что просто оставьте это.</p><p>Это не так уж и важно, понятно? Так что да, из-за этого своеобразного культурного аспекта разработки под iOS и финансового барьера, который вам придется преодолеть, чтобы стать одним из них, это не всегда самое гостеприимное место. Я имею в виду, есть множество отличных ресурсов, разработчиков под iOS, учебных пособий и учителей и веб-сайтов и ресурсов, которые очень гостеприимны.</p><p>Я могу назвать несколько и оставлю их в описании ниже. Но да, некоторые аспекты этого просто какие-то странные, и я просто, почему? Почему вы должны быть такими? Но да, это, вероятно, можно сказать и о всех других разработках и технологиях. Это просто, я имею в виду, это также присуще сообществу Apple. Так что да, вот так.</p><p>Надеюсь, вам понравилось это видео, и вы услышали немного моего личного мнения, если вы используете мое, почему я не люблю разработку под iOS. Люблю ли я ее все еще? Да.</p><p>Буду ли я продолжать это делать? Конечно. Но да, как я уже сказала, я хочу, чтобы вы все получили полное представление о том, что это не такая идеальная технология. И, возможно, вы это уже знали, но я просто хотела поговорить из своего опыта, как я делаю на остальном этом канале.</p>]]></content:encoded>
    </item>
    <item>
      <title>Тренды в мобильной разработке в 2024 году</title>
      <link>https://tproger.ru/articles/trendy-v-mobilnoj-razrabotke-v-2024-godu</link>
      <comments>https://tproger.ru/articles/trendy-v-mobilnoj-razrabotke-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Юлия Волощенко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/trendy-v-mobilnoj-razrabotke-v-2024-godu</guid>
      <description><![CDATA[<p>Рассказали, что в мобильной разработке будет популярно в 2024 году и на какие технологии стоит делать ставку.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/trendy-v-mobilnoj-razrabotke-v-2024-godu">Тренды в мобильной разработке в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 22 Jan 2024 13:40:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>2023 год принес много нового, интересного и даже неожиданного для мобильной разработки. Это и версии уже известных языков разработки, и популярных библиотек, так и совершенно новые направления, инструменты и технологии.</p><p>Подробнее, что же будет популярно в 2024 году, на какие технологии стоит делать ставку, расскажет Анна Жаркова, руководитель группы разработки компании Usetech, мобильный разработчик с опытом более 10 лет, эксперт Mobile Broadcast и Skillbox, а также член программных комитетов Mobius, Codefest и DevFest (Омск).</p><h2>Искусственный интеллект</h2><p>Начнем мы с самого популярного и многообещающего направления, а именно с использования систем Искусственного Интеллекта. <a href="https://www.mckinsey.com/mgi/overview/in-the-news/ai-could-increase-corporate-profits-by-4-trillion-a-year-according-to-new-research">McKinsey Global Institute</a> пишут о возможном увеличении прибыли компаний на $4,4 триллиона в год благодаря ИИ. Кроме того, бизнес чаще начинает внедрять генеративный ИИ в повседневные приложения.</p><p>Технологии ML давно используются в мобильной разработке. Это и различные библиотеки для распознавания и поиска изображений, сканирования и распознавания текста, работы с видео, звуком. И встроенные возможности софта для разработки приложений, которые помогают делать код лучше, бороться с утечками памяти и т.п. Та же самая технология FaceId использует в своей основе инструментарий ML.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2024-01-22/120ae242-520c-4962-9905-bbc5fbc21239.png" alt="" /><figcaption>Источник: https://vilmate.com/blog/how-to-use-machine-learning-in-mobile-apps/</figcaption></figure><p>С конца 2022 года отмечается настоящий всплеск по разработке систем ИИ. На данный момент нейросеть ChatGPT занимает первую строчку в рейтинге технологий генеративного ИИ. В российском сегменте нельзя не отметить мощный аналог от компании Яндекс Yandex GPT. Компании планируют активно встраивать решения на основе нейросетей в свои приложения. Это может быть не только сбор и обработка информации для улучшения пользовательского опыта. Например, сбор и анализ информации позволит строить модели поведения пользователей, сценарии, на основе которых улучшать подбор рекомендуемого контента и т.п. Также это решение различных генеративных задач. Например, автоматический перевод текста, умное взаимодействие с пользователем.</p><p>В плане самой разработки ИИ может быть использован для генерации и оптимизации кода. Много споров вызывают такие вопросы, как: насколько качественные решения будут создавать системы ИИ, а также насколько безопасно использовать их для анализа кода приложений. Но перспектива использования таких решений, тенденция к их развитию, определенно, есть.</p><h2>Кроссплатформа, Kotlin Multiplatform, Flutter</h2><p>Технологии кроссплатформенной мобильной разработки под несколько платформ одновременно популярны уже довольно давно. На текущий момент самыми используемыми являются SDK Kotlin Multiplatform (KMP) от JetBrains и Flutter от Google. Оба решения активно развиваются, и без сомнения, в 2024 году порадуют новыми решениями. Кстати, JetBrains проводит ежегодный опрос по использованию Kotlin, который доступен по <a href="https://www.jetbrains.com/lp/devecosystem-2023/kotlin/">ссылке</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2024-01-22/3c05c91a-b183-465b-97ea-ee28745567e9.png" alt="" /><figcaption>Источник: https://www.jetbrains.com/lp/devecosystem-2023/kotlin/</figcaption></figure><p>Осенью 2023 года произошло то, чего ждали многие разработчики и почитатели технологии KMP. Технология перешла в статус Stable и стала полностью готова к полноценному использованию. Это означает, что многие, актуальные для Alfa и Beta версий SDK проблемы, были решены. Например, улучшили поддержку Kotlin/Native, работу с многопоточностью, памятью и т.п. Одной из целей роадмапа на 2024 год сформулировали реализацию прямого взаимодействия между языками Kotlin и Swift. Несмотря на то, что разработчики Google являются авторами конкурирующего продукта Flutter, компания официально делает большую ставку на KMP. Поддержка кросс-платформы включается во многие решения. Так что советуем присмотреться к данному продукту.</p><p>Еще одним трендом связанным с кроссплатформенной разработкой является использование Compose Multiplatform для реализации кросс-платформенного UI. Данный декларативный фреймворк объединяет такие технологии как Compose for Desktop, Compose iOS, Compose for Web, а также Jetpack Compose для Android, и позволяет быстро и относительно просто создавать общий UI для разных платформ. В 2023 году вышла альфа-версия Compose для iOS. В 2024 году ожидается выход Бета-версии, в которую войдут улучшения по работе с нативным UI iOS, а также поддержка кросс-платформенного решения для навигации.</p><p>В общемировых тенденциях мобильной разработки сохраняется популярность таких решений, как React Native, гибридной разработки на Cordova и ionic, а также Xamarin. Также сохраняется тренд на PWA разработку,</p><h2>Российская разработка, импортозамещение</h2><p>Еще в 2022 году возникла потребность в собственных решениях для импортозамещения, а также развития отечественных технологий. Одним из самых актуальных направлений мобильной разработки становится разработка под Aurora OS. Если сначала попробовать устройства под ее управлением могли в основном участники специальной бета-программы и энтузиасты, помогающие компании OMP в разработке и улучшении продукта, то уже осенью 2023 года смартфоны и планшеты на Aurora OS становятся доступны для приобретения для всех желающих. Готовится к выходу 5 версия OS  с поддержкой встроенного магазин приложений на RuStore. Многие российские компании уже работают над своими собственными решениями с поддержкой Aurora OS.</p><p>Компания OMP также обновили и улучшили инструменты для разработчиков. Предлагается использовать не только QT/QML/C++, но и специальную версию Flutter для разработки под Aurora. Так что здесь стоит отметить сочетание двух трендов мобильной разработки.</p><p>Определенно, стоит уделить внимание платформе <a href="https://mobile.rosa.ru/">Rosa Mobile</a>. Данная ОС была заявлена как замена Android, и освоить разработку приложений под нее, было бы весьма нелишним.</p><p>Также актуальным трендом остается переход на отечественные сервисы. Например, решения от Yandex для сбора метрик, карты, погода и другие SDK. Замена сервисов Firebase <a href="https://www.rustore.ru/help/">сервисами RuStore</a> (те же пуш-уведомления).</p><h2>Нативная разработка</h2><p>Технологии и фреймворки меняются, нативная разработка остается. Это основа основ, база, которую должен знать каждый разработчик. Использование родных языков и инструментов, как и подхода Native First, будет актуально всегда. К тому же для реализации проектов со сложной логикой, сложным UI, стоит выбирать именно нативную разработку.</p><p>Ежегодно разработчики платформ iOS/Android, а также языков Swift и Kotlin, выпускают много новых и интересных решений, про которые рассказывают на тематических конференциях WWDC и Google I/O.</p><p>Особое внимание стоит уделить усиливающемуся тренду на декларативную разработку в мобильных приложениях. Фреймворки SwiftUI и Jetpack Compose активно развиваются, стабильно улучшаются, становятся более удобными и надежными в работе. Их все чаще используют в разработке приложений различной сложности. Много библиотек и готовых решений, заточенных под SwiftUI и Jetpack Compose. Можно сказать, что это новый стандарт мобильной разработки под Android и iOS.</p><p>Также стоит обратить внимание на дополнение мобильных приложений <a href="https://developer.apple.com/videos/play/wwdc2023/10028/">интерактивными виджетами</a>, которые помогут привлечь внимание к приложениям и предоставить мгновенный доступ к ряду функций.</p><h2>Виртуальная реальность</h2><p>В 2023 году на конференции WWDC компания Apple представила одну из самых громких новинок — очки виртуальной реальности Vision Pro, работающие на платформе <a href="https://developer.apple.com/visionos/">VisionOS</a>.  Разумеется, это далеко не самый первый такой девайс в мире, и подобные аппараты уже давно используются в игровой индустрии. Ставка делается на уникальные технологии иммерсивности, улучшенное качество звука и изображения. В рамках создания девайса были проведены масштабные разработки в области пространственных вычислений. Поддержка VisionOS была включена в такие инструменты, как: ARKit, RealityKit, Unity, RealityComposer и т.п. И инструментарий, и документация на данный момент доступны для всех заинтересованных разработчиков. Старт продаж самого устройства намечен на 2024-2025 год.</p><p>Недавно создатели Vision Pro <a href="https://twitter.com/DylanMcD8/status/1747307110847680611?s=20">сообщили</a> о скором запуске магазина приложений для очков виртуальной реальности. А это значит, что в 2024 году нас ждет бум различных приложений для AR/VR устройств: игры, виртуальные примерочные, приложения для подбора интерьера, иммерсивный просмотр фильмов, прослушивание музыки и т.п. Кроме того, согласно <a href="https://www.statista.com/outlook/amo/ar-vr/worldwide">Statista</a>, к 2028 году число пользователей рынка AR и VR в мире достигнет 3674,0 млн пользователей.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2024-01-22/85422a97-f0a2-4768-9bd5-624dc9e43818.png" alt="" /></figure><p>Также и Google, и Apple уделяют большое внимание улучшению иммерсивного опыта пользователей и на стандартных смартфонах, часах и планшетах.</p><h2>Не только смартфоны. IoT</h2><p>Каждый год выпускаются новые различные устройства под управлением ОС Android, iOS. Это не только смартфоны и планшеты, но и часы, смарт-телевизоры, игровые приставки, фитнес-трекеры, компьютеры автомобилей, а также устройства системы “умный дом”. Компании-разработчики ОС заинтересованы не только в поддержке новых возможностей устройств и гаджетов, но и улучшении инструментария для сторонних разработчиков.</p><p>Использование NFC, Bluetooth в приложениях по-прежнему остается актуальным. Yahoo Finance прогнозирует рост в области NFC<a href="https://finance.yahoo.com/news/near-field-communication-nfc-market-213000434.html?guccounter=1&amp;guce_referrer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&amp;guce_referrer_sig=AQAAALwl1HTpULp9ZvS_n8uhLfu6SphAaiYcsmcHcjctk3dE_1rciyChCs618ZjwDh-3wHv8hsDHMQKnDz9xLwcM52sE6ogK90uwb8JJR_5ZnMpU8VOZK4ynqgMws7Ry4bOtN6KxXay6zVsK6FUCKTv1biA8vvoDwlyYiZD2l8TUTiQo"> с 2023 по 2030 годы на 33,1 миллиарда долларов США</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2024-01-22/e4a88b7a-947b-4bdd-a905-d7124de21c82.png" alt="" /><figcaption>Источник: https://www.fnfresearch.com/near-field-communication-nfc-market</figcaption></figure><h2>Безопасность, улучшенная работа с сетью</h2><p>Сохранение конфиденциальных сведений было и остается одной из главных задач разработчиков. Об этом свидетельствует <a href="https://www.gartner.com/en/newsroom/press-releases/2023-09-27-gartner-says-cisos-need-to-champion-ai-trism-to-improve-ai-results">прогноз Gartner</a>. Внедрение усиленных мер безопасности (аутентификация по биометрии, использование блокчейн и т.п) весьма актуальны и в 2024 году. Также особое внимание следует уделять стабильной и безопасной работе с сетью, в том числе и работе с облачными сервисами, с NFC, при подключении к другим устройствам. Современные мобильные ОС предлагают широкий спектр нативных средств для реализации и поддержки безопасной работы приложений.</p><h2>Подведем итог</h2><p>В 2024 мобильные платформы, языки и инструменты разработки продолжат свое развитие. Основными направлениями, на которые мы рекомендуем обратить внимание, будут являться:</p><ul><li>нативная разработка;</li><li>кроссплатформа;</li><li>разработка под различные мобильные устройства, IoT;</li><li>поддержка и использование российских технологий;</li><li>безопасность, работы с сетью;</li><li>AR/VR.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Mobile App Localization: Breaking Language Barriers for Global Audiences</title>
      <link>https://tproger.ru/articles/mobile-app-localization-breaking-language-barriers-for-global-audiences</link>
      <comments>https://tproger.ru/articles/mobile-app-localization-breaking-language-barriers-for-global-audiences?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Yury Podorozhnyy]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/mobile-app-localization-breaking-language-barriers-for-global-audiences</guid>
      <description><![CDATA[<p>App localisation demands a well-crafted strategy and technological support, thus we have prepared a guide describing the key steps.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/mobile-app-localization-breaking-language-barriers-for-global-audiences">Mobile App Localization: Breaking Language Barriers for Global Audiences</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Dec 2023 12:30:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>According to the <a href="https://www.statista.com/statistics/271644/worldwide-free-and-paid-mobile-app-store-downloads/">annual report by Statista</a>, in 2022, 255 billion mobile apps were downloaded globally. This indicates an insatiable demand for content in users’ native languages. Breaking down language and cultural barriers is crucial for reaching a broad user base and ensuring that your app’s benefits are accessible to all. App localisation is the key element that can help expand your mobile app’s reach, boost download rates, and elevate revenue figures on a global scale.</p><p>Successful app localisation demands a well-crafted strategy and technological support, thus we have prepared a guide describing the key steps and concepts of the process.</p><h2>What is localisation</h2><p>Before we go further into the discussion of the localisation process, let’s clarify the distinctions among translation, localisation, and internationalisation—terms often used interchangeably. While they may sound synonymous, each carries its distinct meaning.</p><p><b>Translation</b>, executed by either human translators or machines, involves replacing words from one language with their equivalents in another, aiming to maintain the same meaning (what is being said).</p><p><b>Localisation</b>, on the other hand, goes deeper, incorporating cultural nuances and norms to capture not just what is being said but also how it’s expressed.</p><p>Serving as the technical backbone for translation and localisation, <b>internationalisation</b> is a task handled by developers.</p><p>In this article we mainly will dwell on the process of localisation.</p><h2>Reasons to localise your app</h2><p>Though English is often regarded as a universal tool bridging diverse native languages, recent research challenges this assumption by revealing a strong user preference for content in their own language.</p><p>The <a href="https://csa-research.com/Featured-Content/For-Global-Enterprises/Global-Growth/CRWB-Series/CRWB-B2C">“Can’t Read, Won’t Buy” report</a> shows that 65% of respondents prefer content in their language even if it’s poor quality. This report draws insights from a survey conducted by CSA Research, involving 8,709 consumers across 29 locales. As you can see, localisation is essential if you plan to scale the business. Below are the advantages it offers.</p><h3>Expanding Market Reach</h3><p>App localisation serves as the cornerstone for venturing into new markets. It can help your business evolve from a startup to an enterprise level. Thus, for example, the Arab audience due to the significant number of Arabic script users, makes it the third most written language globally. With around 660 million people across 22 countries using Arabic, language and UI directionality (right-to-left) localisation can become a game-changer for a business.</p><h3>Enhancing App Engagement</h3><p>Users value app content tailored to their preferences and requirements, significantly impacting their overall experience. Tailored content not only boosts engagement but also fosters loyalty among users.</p><h3>Driving Sales Growth</h3><p>A strategic investment in localisation leads to a substantial market share increase in each new country entered, consequently elevating revenue streams.</p><h3>Amplifying App Downloads and Visibility</h3><p>Researches prove that app store descriptions written in the local language can enhance app downloads by up to 38%, underscoring the importance of localised content in increasing visibility and user adoption.</p><h2>Localisation Types</h2><p>There are several strategies of app localisation that can be used depending on the specific objectives and resources. The two primary approaches are <b>Minimum Viable Localisation (MVL)</b> and <b>Full App Localisation</b>.</p><h3>Minimum Viable Localisation</h3><p>MVL focuses on localising key features, app store descriptions, and metadata, making it suitable for early-stage swift market entry. The launch of Evernote in China serves as a great example of MVL, where the note-taking app successfully adapted crucial elements to the local market, achieving success with a simplified product and Chinese branding.</p><h3>Full App Localisation</h3><p>Full App Localisation is a comprehensive approach that suits more global companies committed to maximising reach and revenue.</p><p>Here are a few examples of companies that have effectively implemented app localisation and benefited from it.</p><p><b>WhatsApp</b> — the popular messaging app that supports multiple languages, regional dialects, and cultural nuances to cater to its diverse user base across the globe.</p><p><b>Netflix</b> — a streaming giant, not only offers a variety of subtitles but also produces original content in different languages.</p><p><b>Duolingo</b> — a language learning app itself, Duolingo employs effective localisation strategies. It tailors language courses, interfaces, and content to suit the preferences and cultural contexts of users in various regions.</p><p><b>Apple Maps</b> is another example of an app that enhances user experience through localization. It not only provides directions and maps in local languages but also displays familiar logos of subway systems to users and even adjusts its language to respect local conventions, such as using “boarding lines” in London and “boarding trains” in New York.</p><p><b>Uber</b> — the ride-sharing platform Uber has successfully localised its app to accommodate different languages, payment methods, and cultural norms in various countries. This has contributed to its widespread adoption across diverse markets.</p><p>Each of these examples showcases how companies, regardless of their industry, can benefit from thoughtful app localisation to connect with users on a global scale.</p><h2>Building a strategy</h2><p>Creating a successful app localisation strategy is crucial for reaching a broader audience. Considerations for this may include:</p><h4>1. Identifying target markets</h4><ul><li>Research potential markets based on demographics, user behaviour, and market demand</li><li>Evaluate competition and identify regions where your app could gain traction</li></ul><h4>2. Understanding cultural nuances</h4><ul><li>Adapt content to cultural preferences, language variations, and local customs</li><li>Be mindful of cultural sensitivities to avoid unintentional misunderstandings</li></ul><h4>3. Deciding on a launch approach (regional or global)</h4><ul><li>Choose between a phased regional launch or a simultaneous global release based on your app’s scalability and target audience</li></ul><h4>4. Setting a budget</h4><ul><li>Estimate costs associated with translation, cultural adaptation, and technical adjustments</li><li>Consider potential return on investment (ROI) and allocate resources accordingly</li></ul><h4>5. Prioritising localised elements</h4><ul><li>Identify crucial app elements for localisation, such as user interfaces, content, and marketing materials</li><li>Prioritise elements that significantly impact user experience and engagement</li></ul><h4>6. Gathering resources</h4><ul><li>Collect all necessary assets, including text, images, videos, and other content requiring translation or adaptation</li></ul><h4>7. Assigning responsibilities</h4><ul><li>Clearly define roles and responsibilities for team members involved in the localisation process</li><li>Ensure accountability and effective communication among team members</li></ul><h4>8. Involving stakeholders</h4><ul><li>Engage stakeholders, including marketing, customer support, and development teams, to align goals and expectations</li><li>Seek input from local teams or partners for market-specific insights</li></ul><h4>9. Establishing a timeline</h4><ul><li>Develop a realistic timeline that accommodates the complexities of translation, adaptation, and quality assurance</li><li>Set milestones and deadlines for each phase of the localisation process</li></ul><h4>10. Selecting language service providers</h4><ul><li>Choose reliable language service providers (LSPs) with expertise in your target markets</li><li>Evaluate their track record, linguistic capabilities, and industry-specific experience</li></ul><h4>11. Fostering collaboration among teams</h4><ul><li>Encourage seamless collaboration between development, design, marketing, and localisation teams</li><li>Implement tools and communication channels to streamline cooperation</li></ul><h4>12. Monitoring the process</h4><ul><li>Implement monitoring mechanisms to track progress, identify bottlenecks, and address issues promptly</li><li>Regularly review key performance indicators (KPIs) to ensure alignment with goals</li></ul><h4>13. Choosing an app localisation platform</h4><ul><li>Evaluate localisation platforms that suit your app’s requirements and scale</li><li>Consider features such as integration capabilities, ease of use, and support for collaborative workflows</li></ul><h4>14. Defining metrics and KPIs</h4><ul><li>Establish key metrics and performance indicators to measure the success of your localisation efforts</li><li>Monitor user engagement, downloads, and revenue generation across different markets</li></ul><p>These considerations collectively contribute to creating the app localisation strategy that can provide a successful and culturally sensitive expansion into diverse markets.</p><h2>Tips and Tricks to Ensure Smooth Localization</h2><p>As we have already discussed, localising your mobile app involves more than just translation—it’s about creating a seamless experience tailored to different cultures and languages. Here are some tips and tricks to guide you through the process:</p><h4>1. Anticipate Text Expansion or Contraction</h4><ul><li>Different languages may alter text length. For instance, translating from English to German can result in a 20-35% text expansion, while English to Swedish may lead to a 20-35% contraction</li><li>Plan for flexibility in your design to accommodate varying translations. Tools like <a href="https://www.figma.com/">Figma</a> and <a href="https://lokalise.com/">Lokalise</a> can assist in this process</li></ul><h4>2. Support Right-to-Left Languages</h4><ul><li>Languages like Hebrew and Arabic are written from right to left. Neglecting this can distort your design and lead to bugs</li><li>Choose tools, such as Lokalise with Sketch integration, that support right-to-left languages to maintain design integrity</li></ul><h4>3. Provide Context to Linguists</h4><ul><li>Replace traditional spreadsheets with special tools, enabling linguists to translate with contextual screenshots</li></ul><h4>4. Maintain Consistency with a Glossary</h4><ul><li>Develop a glossary and style guide to ensure consistent translations</li><li>Use <a href="https://www.transifex.com/">Transifex</a>, <a href="https://lokalise.com/">Lokalise</a>, or <a href="https://poeditor.com/">POEditor</a> to set up project-specific glossaries, defining terms and specifying translatability and case sensitivity</li></ul><h4>5. Test Cultural Imagery for Better Customer Experience</h4><ul><li>Enhance customer experience by ensuring cultural familiarity and avoiding confusion or offence</li><li>Test content and UI/UX culturally before a full release, incorporating feedback from select customers, champions, and native speakers during Beta testing</li></ul><h4>6. Use Locale Alongside Language</h4><ul><li>Consider regional differences by using locale settings alongside language codes (e.g., fr_be for Belgian French)</li></ul><p>Remember, the success of app localisation goes beyond translation. It’s about crafting an experience that resonates with users globally. By integrating the practices mentioned in the article into your app’s life cycle, you can deliver an inclusive and engaging user experience, transcending language barriers and reaching new heights in the global app market.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как разрабатывался трекер подписок Nocta — конкурс пет-проектов</title>
      <link>https://tproger.ru/articles/kak-razrabatyvalos-mobilnoe-prilozhenie-novyj-treker-podpisok-nocta-konkurs-pet-proektov</link>
      <comments>https://tproger.ru/articles/kak-razrabatyvalos-mobilnoe-prilozhenie-novyj-treker-podpisok-nocta-konkurs-pet-proektov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Inna N]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-razrabatyvalos-mobilnoe-prilozhenie-novyj-treker-podpisok-nocta-konkurs-pet-proektov</guid>
      <description><![CDATA[<p>Рассказали о разработке пет-проекта на Android — мобильного трекера подписок Nocta, который уже выложен в Google Play.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-razrabatyvalos-mobilnoe-prilozhenie-novyj-treker-podpisok-nocta-konkurs-pet-proektov">Как разрабатывался трекер подписок Nocta — конкурс пет-проектов</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 30 Oct 2023 11:10:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>Nocta Pro – приложение трекер подписок под Android. Много возможностей, уникальные функции, бесплатно и никакой рекламы.</p><p>Добрый день, меня зовут Инна, я андроид-разработчик, хочу написать о своем приложении Nocta Pro. Создание его началось осенью прошлого года, а опубликовано в Google Play оно в конце августа. Возможно, статья получится интересной для тех, кто пишет свой проект или задумывается о нем. Она о том, как проходила разработка.</p><h2>Идея</h2><p>У меня большой опыт в разработке. Больше всего нравилось писать под Android. Но жизнь сложилась так, что в последние полтора года на работе вначале попросили писать под iOS, потом освоился React Native. Но мне захотелось вернуться обратно в Android мир. Вначале отдохнуть от работы, т.к. она в то время была достаточно тяжелой, а потом подкачать свои устаревшие знания. И это лучше всего делать на реальном проекте.</p><p>Мой опыт показывает, что самое главное в приложении — это UI и UX. Будь оно сто раз полезно, но если будет выглядеть коряво, то обречено на провал (потом я подкорректировала это мнение, но об этом позже). И мне очень повезло с тем, что нашелся человек, его зовут Ярослав, он начинающий продуктовый дизайнер, у которого была идея и который уже набросал свою задумку в Figma. Мне оставалось только спросить — не хотел бы он, чтобы его проект был реализован? По ходу рассказа привожу комментарии Ярослава ниже курсивом.</p><h2>Приложение</h2><p>Nocta представляет собой трекер подписок. Сейчас почти у каждого есть какие-то регулярно оплачиваемые подписки. Некоторыми мы пользуемся всего один раз в пробный период (их необходимо вовремя отключить), а некоторые используем постоянно. Также у поставщиков подписок бывают разные тарифные планы (еженедельные, ежемесячные, годовые, да хоть каждые два дня) — их можно прикинуть и сравнить, какой выгоднее использовать и посмотреть сколько ты в результате экономишь, сколько будет заплачено денег всего и по каждой подписке, и можно легко переключаться на другие планы.</p><p><i>Ярослав: </i><i>Идея такого приложения мне пришла в голову еще в далеком 2020 году, однако реализовать его не представлялось возможным из-за нехватки опыта, знаний и ресурсов. Что тогда, что сейчас, все представленные продукты на рынке содержат хотя бы один критический недостаток, который сводит на нет вообще весь смысл пользования таким трекером. Я горжусь Nocta потому, что в этом продукте решены сразу все известные недостатки и проблемы, и, более того, представлен ряд классных и полезных функций, которых вообще нигде нет. </i></p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/f0cb269d-d35c-430d-8a8c-8009bd01ec13.png" alt="" /><figcaption>Nocta Pro – имеет темную и светлую темы</figcaption></figure><p>Некоторые подписки могут быть в другой валюте. Есть Pay Upfront (Предоплата), что означает оплату подписки вперед на несколько циклов.</p><p><i>Ярослав: Pay Upfront – это классная и уникальная фича, которой нет ни в каком другом трекере. Она нужна, чтобы посчитать сколько денег нужно для того, чтобы оплатить подписку вперед на какой-то период. Особенно, когда бывают странные циклы списания – раз в две недели или раз в 30 дней. Ты оплачиваешь эту подписку и последующие уведомления приходят тогда, когда подходит следующая дата списания. Это удобная фича, которой лично я часто пользуюсь.</i></p><h2>Как быстро попробовать приложение в действии</h2><p>Нет ничего проще. Устанавливаете Nocta Pro и добавляете тестовые подписки. Проверить подходит оно или нет — можно за минуту, ничего не нужно делать сложного или разбираться как добавить подписку.</p><p><i>Ярослав: </i><i>Когда я просматривал приложения, которые уже были, то каждый раз после установки я видел пустой экран, и для того, чтобы понять как им пользоваться, мне нужно было создавать подписки со множеством полей (это у нас в Nocte можно заполнить всего два поля – название подписки и ее стоимость). Поэтому пришла в голову идея для тех, кто только что установил приложение и хочет понять, подойдет оно ему или нет. Одним кликом добавляешь тестовые подписки и все – можешь рассматривать приложение со всех сторон. Таким образом, мы сэкономили много времени тем, кому приложение не подойдет.</i></p><p>Подобных интересных вещей в приложении еще много. Все максимально продумано.</p><h2>Реализация</h2><p>Я решила затянуть в приложение все новое, что было на тот момент — конечно же kotlin (до этого все мои больше 20 проектов были на java), современную архитектуру (MVVM), Jetpack Compose, Hilt, Compose Navigation, WorkManager, Glance Widget, Room, SqLite и т.д.</p><p>Начинать было тяжело. Экранов и логики нарисовано еще до начала реализации очень много. И чтобы преодолеть этот барьер — я просто решила попробовать сделать самый первый экран со списком. Это было ошибкой, нужно было рассмотреть все, что есть, и принять обдуманные решения. Потом, когда процесс уже встал на рельсы, я поменяла структуру базы данных, кое-что переделала, доработали requirements — автор идеи написал больше 30 страниц описывающих user flow и всяких расчетов, таблиц и правил, а также несколько таблиц в Excel, которые рассчитывали несколько сценариев с подписками, это очень помогло.</p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/3ef4f0a8-fe63-42ee-ae22-0e90c7b89932.png" alt="" /><figcaption>Дизайн спецификации</figcaption></figure><p><i>Ярослав: Мне пришлось написать документ, который я назвал – дизайн спецификации. Это сложная штука, в нем мне пришлось вводить такой язык – собственные термины и использовать их на протяжении всего документа, в формулах и т.д. Например, ППСГ – потенциально потраченная стоимость за год, которая для каждой подписки считается по своему. И оперируя этим словариком терминов я создавал этот документ, который получился объемным, мне понравилось над ним работать, хотя наверное его можно было бы сделать сильно лучше.</i></p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/aca8269b-1a71-4f29-8c8f-acfbbc1a0a6b.png" alt="" /><figcaption>Расчеты по подпискам</figcaption></figure><p><i>Ярослав: </i><i>Еще пригодился Excel – файл. В нем были примеры подписок и все расчеты. Я его создал еще до реализации для того, чтобы использовать в эскизах экранов, чтобы они выглядели как можно правдоподобнее и были связаны друг с другом общей логикой. Позднее мы проверяли все данные с помощью этих расчетов.</i></p><p>Разработка достаточно сложная вещь, каждый день мы сталкиваемся с какими-то проблемами, которые нужно решать, недостатком знаний, которые нужно восполнять и т. д. У меня специфика работы была такая, что заказчик долго ждать не будет, поэтому если например задача не решается за 2 часа — я переключаюсь на что-то другое (а потом приходит решение) или принимаю решение делать не совсем оптимально, чтобы посмотреть на результат, а уже далее действовать в зависимости от общего мнения. Поэтому в некотором смысле — все приложение получилось таким компромиссом между попытками сделать хорошо и правильно, и продвижением вперед. Когда работаешь один — сложно сделать правильно с первого раза, что-то не получается, или просто пока не знаешь как сделать. Затем, уже спустя время, где-то находишь эти знания и рефакторишь код, исправляешь ошибки — когда это уже очевидно. Если буксовать и все время сомневаться — то весь проект рискует остаться недоделанным. У нас же была цель — Google Play Market — финальная точка, после которой можно выдохнуть.</p><p>Во время реализации дизайн в Figma был переработан, дополнен, уточнен и перепроверен.</p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/610d230b-9499-4c6b-bf4a-45692ec70533.png" alt="" /><figcaption>От варфрейма до итогового экрана</figcaption></figure><h2>Столкновение с реальностью</h2><p><i>Ярослав: </i><i>Как изменилась идея в начале разработки? Я столкнулся с тем, что разработчик пришел и сказал “нельзя”. В первую очередь это было связано с курсом валют. Первоначальная идея была такая, что курс валют приходит автоматически с накидыванием сверху полутора процентов банковских комиссий, потому что актуальный курс списания выше чем курс обменников. И тогда я подумал, что все, приложение не имеет смысла, но мы потом придумали, что можно заносить эти курсы вручную и даже напоминать обновить эти курсы.. и при этом убили двух зайцев – у пользователя всегда будут актуальные курсы валют и мы отказались от сервера. И даже я считаю это наверное плюс нашего приложения,  т.к. если подумать , то автоматический курс валют не отвечал бы потребностям пользователя.</i></p><p><i>Ярослав: </i><i>Еще один момент, который пришлось учесть, это использовать “темные паттерны”, к примеру уведомления, чтобы пользователь их не смахивал, а открывал и использовал приложение, чтоб Google не отозвал разрешение у приложения, нужно туда помещать интригу. Вначале было задумано уведомление “Через 3 дня спишется 100 рублей за подписку ХХХ”, а теперь “Скоро платеж” и чтобы узнать какой платеж пользователь должен нажать на уведомление и перейти в приложение, и таким образом поддерживается активность, в результате которой у нас с меньшей вероятностью отзовут разрешения.</i></p><p>А еще, когда пишешь свой проект, то ты сам себе начальник и неизбежно сталкиваешься с тем, что где-то хочешь упростить реализацию, что-то не делать, т. к. это сложно или долго. Но этот проект имел большую цель — попробовать на практике как можно больше сложных вещей.</p><p>Проект сейчас имеет 24 модуля. Для одного разработчика пет-проекта — это даже много, а когда хочешь попробовать, как оно получится — то вполне нормально для такого размера приложения.</p><h2>UI</h2><p>Приложение в классическом материальном дизайне. Я использовала библиотеку androidx.compose.material3. Для рисования интерфейса – Jetpack Compose. Сам дизайн продуман до мелочей, аккуратные отступы между элементами, паддинги тоже разные для оптической компенсации элементов в списке с точностью до пункта. Нами продумана вся дизайн система, она одинаковая — в Figma и перенесена в один из модулей приложения, легко найти и поправить, легко добавлять и использовать в любом месте. Есть система шрифтов, цветовая схема. Темная и светлая темы. Аккуратные картинки к каждой подписке пользователя. Иконки приложения для Monet в Android.</p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/9f380bb7-4802-4f59-abd3-488cdee15441.png" alt="" /><figcaption>iOS версия приложения</figcaption></figure><p><i>Ярослав: </i><i>В самом начале Nocta планировалась как кейс для iOS и там было основных 20 экранов. Потом пришлось переделывать все экраны с учетом не только дизайна, но и с учетом логики того, как взаимодействуют окна, структура. iOS версия раньше смотрелась как-то прикольно, но теперь она устарела и Android версия выглядит значительно лучше. Кроме того, у меня прибавилось опыта, если я раньше мог пропускать экраны, которые содержат определенный стейт, то сейчас я сразу вижу, что экран должен содержать, какой стейт и как с ним взаимодействовать.</i></p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/bb1cab93-65cf-4d3c-adec-8d8bb9a33deb.png" alt="" /><figcaption>UI kit</figcaption></figure><p><i>Я разработал UI kit, в нем содержатся – цветовая схема (светлая и темная), шрифты, и элементы дизайна, это как будто кирпичи, из которых формируются экраны.</i></p><p><i>Картинки к подпискам я пытался сделать лаконичными, чтобы не приходилось в них копаться, пытаясь выбрать то, что нужно. Я внимательно пролистал список иконок к андроиду в плагине Figma и выбрал те, который наиболее подходят для подписок.</i></p><h2>Функционал</h2><p>Это одна из самых сложных основ приложения. Оно содержит много расчетов с датами, много разных строк, которые обозначают эти даты, периоды. Для того, чтобы правильно их сделать – нам пригодился документ, где была бы описана вся логика, а также тестовые примеры</p><h2>База данных</h2><p>Самая легкая часть. Обожаю базы данных, делать их структуру и особенно — писать запросы. Поэтому у меня очень много что сделано запросами, а не простым вытаскиванием данных из таблицы и последующей обработкой с полным перебором. Sqlite классная быстрая база данных, возможности которой нужно использовать.</p><h2>Уведомления</h2><p>Ни для кого не секрет — Google с каждым выходом новой версии операционной системы ужесточает правила для приложений в плане потребления энергии или безопасности. И получается, что приложения, которыми пользуется владелец устройства — те имеют зеленый свет, а у остальных понемногу отбирают разные полученные ранее права. Наше приложение задумывалось так, чтобы пользователь вложил свое время вначале — заполнил данные по своим подпискам, установил нужные уведомления и в общем-то больше не обращался к приложению, просто получал уведомления о будущих платежах, чтобы оно его не беспокоило лишний раз, не надоедало, не раздражало. Но увы, такие приложения обречены на фактическое сокращение функциональности. Не будешь пользоваться — через месяц (а ведь есть подписки, которые оплачиваются раз в год!) не увидишь уведомления — ОС забирает разрешение и все. Открывать настройки, искать нужный пункт меню и приложение, включать уведомления — только одно перечисление этого уже вызывает раздражение.</p><p>Пришлось изменить текст уведомления. Вначале мы думали выводить текст «Следующий платеж 100 рублей через 2 дня по такой-то подписке». Теперь просто выводится «Следующий платеж через 2 дня». И нужно кликнуть на уведомление и откроется окно с подпиской. Увы, это неизбежная реальность.</p><p>Есть еще второй вид уведомлений – это напоминания пользователю уже в самом приложении. Напоминание сделать бэкап, или напоминание о том, что нужно разрешить системные уведомления.</p><h2>Виджет</h2><p>Еще один вариант решения проблемы с уведомлениями — сделать виджет, который будет показывать список нескольких ближайших платежей на экране. Если пользователь его поставит, то приложение будет периодически работать, пользователю не нужно будет в него даже заходить. Сделать виджет, который одобрит дизайнер, достаточно сложно, а сделать Glance Widget, по которому очень мало информации даже в документации — еще сложнее. Сделать его приемлемого размера на экране — уже задачка со звездочкой, т. к. в определенных версиях действуют одни правила, в более новых — другие и т. д. У нас виджет двух типов. Вначале я сделала более простой вариант — там кнопки быстрого доступа для открытия приложения, создания новой подписки или открытия календаря. А затем виджет с самыми ближайшими подписками.</p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/72b3dc92-1646-4d4a-b348-11aaa1e4ca35.png" alt="" /><figcaption>Работа над дизайном виджетов, у нас их два вида.</figcaption></figure><p>Для виджета пришлось делать свою дизайн систему, т. к. используемый там «jetpack compose», на деле им не является, и пока что там нельзя сделать полноценную дизайн систему, т. к. он находится в разработке. Также там есть ограничения по использованию шрифтов и размеров, управлять ими как в приложении не получится, да и выглядит он в итоге на разных устройствах по-разному.</p><p>Как-то прочла замечание одного разработчика (спасибо ему), что после добавления кнопки установки виджета в самом приложении, его использование значительно возросло. Мы добавили такую же кнопку. Это и напоминает о том, что у нас есть виджет, и значительно облегчает его установку, сравните сами – легко ли найти виджет в длинном списке всех виджетов устройства, а затем искать ему место, или просто нажать на кнопку?</p><h2>Перевод на русский язык</h2><p>Это тоже было достаточно сложной частью. В приложении очень много различных фраз, которые отображаются на экране, обозначающих, например, период времени или количество чего-то («в следующем месяце», «через 2 года», «скоро», «каждый год») и очень много нюансов когда и что отображается. В английском языке все достаточно просто, там нет падежей, фразы строятся однотипно. При переводе на русский я пересмотрела многое, чтобы все правильно отображалось, но уже с целью на будущее, чтобы можно было переводить на другие языки.</p><h2>Бэкапы</h2><p>Как вы уже поняли, сервера у нас нет, поэтому отвечать за сохранность своих знаний должны сами пользователи. Я добавила удобную функциональность по создании бэкапа с данными, и восстановление данных из файла, так же приложение напоминает (как можно более ненавязчиво) что неплохо сделать бэкап. Некоторые операционные системы сами делают бэкап и при установке приложение — данные уже там.</p><h2>Справочная система</h2><p>У нас реализована и продумана справочная система, то есть в местах, где пользователю нужна поддержка в плане “что это такое?” – реализованы небольшие диалоги с подсказками, но есть и экраны, где объясняются фичи и концепции, что и для чего это нужно, как это работает, например, о функции Предоплаты.</p><h2>Публикация в Google Play</h2><p>Это тоже достаточно нетривиальная задача для человека, который давно там ничего не публиковал, т. к. все постоянно меняется. Я вначале решила, что опубликую приложение в Open Testing части. Она по сути ничем не отличается от Production, кроме того, что отзывы приватные, видны только владельцу.</p><p>Очень волнительно было ждать вердикта Google (и сейчас тоже волнительно). Интересный факт в том, что во время проверки приложения, Google также тестирует приложение и публикует его результат. Если находит баг — то предоставляется видео тестирования, при котором произошло падение. И один из интересных багов был найден и исправлен. Также, он проводит глубокий анализ со скриншотами на разных устройствах и широкий анализ приложения на адаптивность к пользователям с особыми потребностями.</p><h2>Реклама</h2><p>Ну а теперь о том, как изменилось мое мнение что важно для приложения. Увы и ах, без вложений в рекламу ничего не получается. Nocta получилась большое и красивое приложение, законченное, которым приятно пользоваться, со мной связалось несколько разработчиков (удалось «прорекламировать» только в чатах по разработке) и мы даже стали друзьями и делимся чем-то полезным.</p><p>Но реальность такова, что денег на это больше нет.</p><figure><img src="https://media.tproger.ru/user-uploads/91432/2023-10-26/af575d6b-897b-47c0-8393-c094f1c4e46a.png" alt="" /></figure><h2>Планы</h2><p><i>Ярослав: Не знаю насчет планов.. внутри приложения всегда можно добавлять, докручивать какие-то интересные фичи, тот же самый max-концепт, разделение на профили, теги, wizards, даже что-то безумное, какие-то сториз “а вы знаете, чтобы сэкономить на подписках, можно применить вот эту тактику”, добавить notification hub, с ним поработать, т.к. они у нас в разных местах возникают, разделить приложение max, basic, pro. Это в сторону фич, в сторону платформы – хотелось бы видеть приложение на iOS.</i></p><p>Вообще в планах у нас были две или три версии приложения. Одна — самая простая, для тех, кому нужна базовая функциональность. Вторая — Pro, платная, которая и была реализована и была выложена бесплатно. Но уже есть планы на дальнейшее развитие, продуманные фичи для добавления. Однако пока не знаю, будет ли продолжение (добавление крупных фич) в связи с тем, что сейчас получать доход от приложения уже сложно.</p><p>Конечно, было бы неплохо иметь сервер, сделать регистрацию пользователей и синхронизацию их данных, или, к примеру, автоматические курсы валют. Но освоение мною этих вещей это too much.</p><p>Небольшие доработки и добавления, изменения, конечно же будут. Сейчас, когда исправлены основные баги, я занята поиском новой работы.</p><p>Надеюсь, наше приложение понравится тем, кто любит такое ? Пожалуйста, пользуйтесь, присылайте нам свои пожелания, оставляйте оценки в Google Play Store, передайте ссылку своим друзьям, если знаете, что оно им понравится, мы благодарны вам за это.</p><ol><li><a href="https://play.google.com/store/apps/details?id=com.cordylussoftware.nocta">Ссылка на Google Play Store</a>;</li><li>Связаться с нами можно в <a href="https://t.me/noctatracker">телеграм</a>;</li><li>Мой <a href="https://www.linkedin.com/in/inna-n-775457a2/">профиль </a>и резюме.</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>GradCit: AI фоторедактор — конкурс пет-проектов</title>
      <link>https://tproger.ru/articles/gradcit-ai-fotoredaktor-konkurs-pet-proektov</link>
      <comments>https://tproger.ru/articles/gradcit-ai-fotoredaktor-konkurs-pet-proektov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Виталий Монастырев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gradcit-ai-fotoredaktor-konkurs-pet-proektov</guid>
      <description><![CDATA[<p>Сделал свой фоторедактор с AI — для разных платформ.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gradcit-ai-fotoredaktor-konkurs-pet-proektov">GradCit: AI фоторедактор — конкурс пет-проектов</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 29 Oct 2023 14:22:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всем привет!</p><p>Меня зовут Виталий Монастырев и в статье расскажу о процессе разработки AI фоторедактора <a href="https://gradcit.com/">GradCit</a>, который умеет дорисовывать фон, позволяет редактировать черты лица, может создавать стикеры, заменять небо на фото и многое другое.</p><h2>Идея проекта</h2><p>Я достаточно давно занимаюсь программированием и мне хотелось попробовать свои силы в разработке собственного продукта. Считаю это достаточно полезным занятием, так как в процессе приходится развивать не только навыки разработки, но и маркетинга для продвижения приложения, планирования при принятии решений о добавлении нового функционала, тестирования и так далее.</p><p>Мне всегда нравилось делать фотографии на смартфон и я задумался, что можно попробовать сделать свой фоторедактор. С одной стороны, фоторедакторов в магазинах приложений сейчас и так много, но с другой — идея создания простого фоторедактора не выглядит суперсложной и кажется вполне реализуемой. Кроме того, можно для начала добавить какие-нибудь базовые фильтры для MVP-версии и далее наращивать функционал.</p><h2>Базовая архитектура</h2><p>Итак, с тематикой приложения определились. Теперь самое время подумать, что мы хотим в него добавить и какие компоненты нам нужны. Как я упомянул выше, для совсем базового функционала достаточно сделать обычные фильтры, которые можно накладывать на изображение. Однако, если мы хотим добавить приложению фишки, которые бы выделяли его на фоне конкурентов, то усилий потребуется чуть больше.</p><p>Сейчас очень активно развивается направление машинного обучения, с его помощью можно редактировать фотографии намного проще, чем раньше. Например, мы можем определять при помощи ML-алгоритмов различные элементы на фото автоматически и затем применять алгоритмы обработки. Но здесь стоит оговориться, что некоторые ML-алгоритмы достаточно ресурсозатратны и их не запустить на большинстве смартфонов. Для этих целей может потребоваться обработчик на стороне сервера, поэтому стоит предусмотреть этот момент в нашей архитектуре.</p><p>Следующий момент, который показался мне важным, это возможность делиться фотографиями. Безусловно, у нас есть различные мессенджеры и социальные сети, где мы можем публиковать свои фото, сторизы и прочее, но возможность публикации фотографий можно использовать в дальнейшем, чтобы проводить на основе приложения различные интерактивные конкурсы с аудиторией. Кроме того, мы получаем собственную независимую платформу, что в современном изменчивом мире является совсем не лишним.</p><p>Базовая архитектура в моем случае выглядит следующим образом:</p><p>Пройдемся по компонентам:</p><ul><li><b>Client</b> — приложение, которое запускается на устройстве пользователя. В моем случае в качестве клиентов выступают приложения для iOS, iPadOS и macOS. Первая версия создавалась исключительно под iPhone и использовался язык Swift. Предвижу вопрос, почему не использовались языки для кросс-разработки, чтобы писать одно приложение под iOS и Android. Меня всегда смущала производительность таких приложений и возможность использования новейших инструментов. Также на выбор в пользу нативного языка повлияло и наличие различных инструкций и туториалов.</li><li><b>Backend server —</b> набор API, который отвечает за общение с клиентским приложением. Включает в себя методы аутентификации, работы с базами данных и ML server’ом. Backend server реализован на Spring.</li><li><b>ML server</b> — включает в себя ресурсоемкие ML-расчеты, которые невозможно провести на устройстве пользователя. Так как большинство ML-алгоритмов работают на Python, то сервер был реализован на Flask.</li><li><b>Kafka</b> — была использована, чтобы отгружать в нее информацию об уведомлениях, которые необходимо выслать на устройства пользователей. Это могут быть уведомления о том, что кто-то оценил фотографию, подписался на профиль, оценил фотографию и другое.</li><li><b>Notification server</b> — занимается отправкой уведомлений на устройства. Данные об уведомлениях забираются из топика Kafka. Реализован также на Spring.</li><li><b>Redis</b> — хранит кэшированную информацию о недавних запросах в оперативной памяти. Это позволяет быстрее возвращать ответ клиенту.</li><li><b>MySQL</b> — выступает в роли основной базы данных для хранения информации. Скорее всего в дальнейшем придется переезжать на что-то другое, но пока она справляется.</li></ul><h2>Интерфейс</h2><p>Первая версия приложения разрабатывалась исключительно под iPhone, поэтому интерфейс был не заточен под перевороты и масштабирование экрана. В связи с этим на оптимизацию под iPad и Mac ушло несколько месяцев. Необходимо было предусмотреть повороты экрана, режим Split View, а также другие пропорции экрана.</p><p>Пользователю на главном экране доступны следующие вкладки:</p><ul><li><b>Камера.</b> Позволяет сделать или выбрать фото из галереи и перейти к его редактированию.</li></ul><ul><li><b>Карта.</b> Выложенные фото при желании можно отметить на карте мира, которая является общей для всех пользователей приложения. Более того, для таких фотографий становится доступен режим AR. Если его выбрать, то на экране в режиме навигатора появляется расстояние и направление до места съемки.</li></ul><ul><li><b>Лента.</b> Доступны вкладки «Новое», «Топ» и «Подписки». Во вкладке «Новое» отображаются последние публикации, которые набрали минимальный рейтинг; в «Топе= отображаются недавние публикации с сортировкой по рейтингу; в «Подписках» соответственно подписки.</li></ul><ul><li><b>Поиск.</b> Позволяет находить пользователей, либо записи по хэштегу.</li></ul><ul><li><b>Профиль.</b> Здесь отображаются опубликованные фотографии, отметки на карте и опубликованные текстовые записи.</li></ul><p>Добавлю небольшой комментарий относительно одной из основных проблем, с которыми я столкнулся при проектировании интерфейса. В моем случае пользователь может переходить бесконечное количество раз из одного ViewController в другой. Например: со вкладки ленты перейти на страницу записи, затем со страницы записи на страницу профиля, оттуда на страницу подписок, оттуда снова в профиль и так далее.</p><p>Каждый ViewController потребляет определенное количество оперативной памяти и если не заняться этим вопросом, то через N-количество итераций приложение вылетет с ошибкой по памяти. Для решения данной проблемы я реализовал инструмент кэширования страниц. При переходе со страницы на страницу сохраняется информация о последовательности переходов и о вкладках, закрытая вкладка удаляется из стека контроллеров. Отображаемая информация сохраняется в кэш. Размер кэша в оперативной памяти ограничен, поэтому информация также сохраняется в постоянную память устройства. Для того чтобы работали свайпы переходов (когда мы пальцем тянем от края экрана слева направо, чтобы открыть предыдущую страницу), при открытии новой страницы формируется предыдущая.</p><p>Реализованный механизм решает проблему утечки памяти, при бесконечном переходе по вкладкам. Возможно, есть способы, как это можно реализовать по другому и более просто, но я не нашел ничего похожего. Если кто-то сталкивался с подобными трудностями, то буду рад узнать как вы решали проблему в комментариях.</p><h2>Возможности редактора</h2><p>В редакторе доступно множество самых разных инструментов. При их интеграции стояла задача того, как совместить их работу между собой. Для этого используется своеобразная логика стека, где каждый эффект применяется последовательно к изначальному фото. Расскажу подробнее про функционал, который доступен в редакторе.</p><ul><li><b>ИИ маска.</b> Позволяет отметить область на экране и задать prompt для замены фона. Дорисовка происходит на стороне сервера, так как требуется достаточно большое количество вычислительных ресурсов.</li></ul><ul><li><b>Маска.</b> Позволяет удалить лишний объект с фото. Для маски доступна возможность запуска модели прямо на смартфоне (при помощи Core ML), но при этом страдает качество изображения, поэтому пока модель работает также на сервере.</li></ul><ul><li><b>Редактор лица.</b> В данном режиме приложение распознает лица на фото и определяет отдельные элементы: глаза, губы, нос, рот и прочее. Далее происходит обработка с определенными элементами. Это может быть как добавление искажения поверх изображения, так и наложение фильтра.</li></ul><ul><li><b>Замена неба.</b> Инструмент определяет небо на фотографии и позволяет заменить его на выбранное изображение. Для большей реалистичности на фото накладывается дополнительный фильтр.</li></ul><ul><li><b>Стикеры.</b> В приложении доступны как стикеры по умолчанию, так поддерживается и добавление собственных стикеров. Добавить свой стикер можно через меню, либо нативно, перетащив его из фотогалереи.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/91428/2023-10-20/41474ca7-7ec9-4b0e-a046-d117fbe41134.png" alt="" /></figure><ul><li><b>Замена фона.</b> Модель машинного обучения автоматически определяет основной объект на фото и заменяет фон на выбранный.</li></ul><ul><li><b>А также!</b> Инструменты рисования, множество самых разных фильтров, HLS-настройка, рамки и многое другое.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/91428/2023-10-19/d8624ec8-e4d2-4c07-b714-97213e4b1bb3.png" alt="" /></figure><h2>Заключение</h2><p>В статье я постарался описать общую архитектуру приложения, а также поделился самыми интересными возможностями редактора на живых примерах. На данный момент я продолжаю развитие приложение и постоянно добавляю новый функционал. Если у вас возникли какие-либо вопросы, либо пожелания, то я с радостью отвечу на них в комментариях.</p><p>Скачать приложение можно вот тут для iPhone и Mac:</p><p>А вот тут для iPad:</p>]]></content:encoded>
    </item>
    <item>
      <title>Как я пытался писать красивый код</title>
      <link>https://tproger.ru/articles/kak-ya-pytalsya-pisat-krasivyj-kod</link>
      <comments>https://tproger.ru/articles/kak-ya-pytalsya-pisat-krasivyj-kod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Intergalactic]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-pytalsya-pisat-krasivyj-kod</guid>
      <description><![CDATA[<p>Недавно прошёл конкурс красоты кода. Участие по направлению Android в этом конкурсе было интересным опытом, которым я поделюсь в статье.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-pytalsya-pisat-krasivyj-kod">Как я пытался писать красивый код</a>»</p>]]></description>
      <category><![CDATA[Задачи повышенной сложности]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Кодстайл]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 05 Oct 2023 10:08:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>Недавно прошёл конкурс красоты кода. Участие по направлению Android в этом конкурсе было интересным опытом, которым я поделюсь в статье.</p><p>Содержание:</p><ul><li><a href="https://tproger.ru/#one">О конкурсе</a></li><li><a href="https://tproger.ru/#two">Задание по направлению Android</a></li><li><a href="https://tproger.ru/#three">Моё решение</a></li><li><a href="https://tproger.ru/#four">Решение ChatGPT</a></li><li><a href="https://tproger.ru/#five">Звонок другу</a></li><li><a href="https://tproger.ru/#six">Комментарий победителя в номинации «Изящный код» и его решение</a></li></ul><h2>О конкурсе</h2><blockquote>Компьютерный код может написать любой разработчик. Красивый код пишут лишь единицы. Чистый, изящный, лаконичный, читаемый и понятный код, который работает без багов — это настоящее произведение искусства в сфере разработки.</blockquote><p>Для участников стояла задача написать красивый код по одному из пяти направлений (Python, Java, Data Science, Front-end, Android).</p><p>Каждое направление предусматривало 3 номинации:</p><ul><li>Краса кода — решение, признанное максимально эффективным по мнению жюри;</li><li>Изящный код — самое лаконичное решение, соответствующее поставленной задаче;</li><li>Звезда кода — самое неординарное решение по общей оценке жюри.</li></ul><p>Призы конкурса: iPhone 14, умная колонка и приглашение на вечеринку в честь Дня программиста.</p><h2>Задание по направлению Android</h2><p>Вводные данные:</p><h2>Моё решение</h2><p>Итак, нам нужно вывести список категорий и характеристик. При этом элементы в списке должны находиться разные типы элементов: категория, характеристика, концевик категории (её ID).</p><p>Первое, что пришло на ум — List. Это плохое решение, ведь так в этот список можно положить вообще всё, что угодно.</p><p>Я посмотрел, что объединяет входные дата-классы. Воспользовавшись nullable-свойствами, я создал общий дата-класс. В названии его я буквально написал, что он содержит.</p><p>Объекты этого класса будут наполнять результирующий список.</p><p>Дальше ничего не интересного: я просто воспользовался вложенными циклами.</p><p>С помощью именованных аргументов конструктора класса, в список сначала добавляется категория, потом все соответствующие характеристики, затем ID категории. Такое довольно простое решение.</p><p>Небольшая оптимизация:</p><p>В данном случае после добавления характеристики (feature) в итоговый список (categoriesWithFeatures), она удаляется из списка характеристик (mutableFeatures), поэтому следующая итерация цикла пройдёт быстрее, так как в списке будет меньше элементов.</p><p>Однако в данном случае необходимо создавать mutableFeatures (изменяемый дупликат списка features), что может быть неэффективно по памяти, если начальный список достаточно большой.</p><p>Эта оптимизация подходила бы, если входная функция возвращала изменяемый список:</p><p>После участия в конкурсе я нашёл конструкции языка и методы, которые позволяют улучшить код. Например, вместо моего дата-класса больше подошёл бы Sealed Class с тремя потомками: Категорией, Характеристикой и ID категории.</p><h2>Решение ChatGPT</h2><p>Я попросил ChatGPT решить поставленную задачу, и вот что он написал:</p><p>Моё решение лучше этого, потому что оно, как минимум, работает. Ура, моё решение лучше решения ChatGPT, плюс самооценка!</p><p>Что же делает наш умный товарищ:</p><ul><li>Пытается добавить элемент к неизменяемому списку (currentCategory?.features?.add(feature));</li><li>Пишет комментарии в решении, которое должно читаться без комментариев.</li></ul><p>Хорошо, давайте закроем на это глаза. Закрыли, но решение всё ещё плохое: оно не соответствует поставленной задаче:</p><ul><li>Основная функция в итоге возвращает список объектов CategoryWithFeatures. Этот класс содержит данные категории и список характеристик. Всё это он запихал в один класс. Теперь нет отдельных элементов категории, характеристики и ID категории, которые должны быть в результирующем списке по условию задачи.</li><li>Его цикл работает только, если во входных данных характеристики идут строго по порядку: сначала характеристики одной категории, потом другой. В противном случае в цикле создаются дубликаты категорий.</li></ul><p>Вот, что мы в итоге получаем:</p><figure><img src="https://media.tproger.ru/user-uploads/73470/2023-10-04/5e041999-6656-43ee-990c-fd8869c18180.jpeg" alt="" /><figcaption>Входные и выходные данные, дублирование категорий</figcaption></figure><p>Я также показал своё решение chatGPT и попросил его улучшить. Вот его версия моего решения:</p><p>Мой дата-класс он оставил без изменений и поменял саму функцию. Теперь сначала с помощью функции groupBy создаётся Map&gt;, где ключи — ID категории, значения — списки характеристик. Потом всё те же вложенные циклы, только теперь нужные характеристики не нужно искать, а просто брать из созданного Map.</p><p>В итоге:</p><ul><li>Результат работы такой же;</li><li>Вложенные циклы остались;</li><li>Перед вложенными циклами появились: ещё один цикл от функции groupBy и дополнительная переменная;</li><li>Код стал короче, но, как по мне, его читаемость не изменилась.</li></ul><h2>Звонок другу</h2><p>Не получив фидбека от организаторов конкурса, я попросил его у друга. Вместе с фидбеком я получил ещё один вариант решения:</p><blockquote>Я попытался переписать код, но в итоге сложность по времени получилась такая же. Пока что не придумал другого варианта.</blockquote><p>Действительно, во втором цикле из-за функции addAll (которая циклически добавляет все элементы списка featuresFromMap) у нас снова получаются вложенные циклы. При этом читаемость кода снизилась.</p><p>К слову, весь первый цикл делает почти то же самое, что и функция groupBy. Разница в том, что groupBy вернёт Map&gt;, а цикл — MutableMap&gt;.</p><blockquote>Мне не нравится моя мапа на самом деле. Я добавил список не фичей, а этого класса только из-за того, что не хотел дополнительно забивать память потом. Хотя мб я, кстати, неправильно посчитал, и такой вариант ничем не отличается. Короче, в промышленном коде так делать не стоит.</blockquote><h2>Комментарий победителя конкурса и его решение</h2><p>Давид Жубрёв, победитель в номинации «Изящный код», разрешил опубликовать его решение:</p><p>Рассмотрим, что здесь происходит. Метод flatMap в соответствии с лямбда-функцией преобразует каждый элемент списка категорий в List, где первый элемент — объект категории. Список характеристик фильтруется по ID категории и преобразовывается в массив. С помощью оператора * каждый элемент массива вкладывается в упомянутый List. Последний элемент List — ID категории.<br />После этого flatMap избавляется от вложенных списков и возвращает одномерный список всех элементов.</p><p>Хоть в результате и получается List, решение очень лаконичное и понятное, что идеально соответствует номинации. По временной сложности всё остаётся так же, но выглядит лучше. Если добавить сюда другую структуру данных, например, тот же Sealed Class, то будет, возможно, лучшее решение поставленной задачи.</p><p>Победитель прокомментировал конкурс и своё участие в нём:</p><blockquote>Я не возлагал больших надежд на победу, для меня это был, скорее, небольшой фан. Я был очень удивлен, когда мне написали о победе, но было крайне приятно)</blockquote><p>Спасибо за прочтение данной статьи! Буду рад узнать ваше мнение о конкурсе и представленных решениях ?</p>]]></content:encoded>
    </item>
    <item>
      <title>Конечно, дети могут разрабатывать приложения для iPhone. Но это нелегко</title>
      <link>https://tproger.ru/articles/konechno-deti-mogut-razrabatyvat-prilozheniya-dlya-iphone-no-eto-nelegko</link>
      <comments>https://tproger.ru/articles/konechno-deti-mogut-razrabatyvat-prilozheniya-dlya-iphone-no-eto-nelegko?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Гусельников Вячеслав Сергеевич]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/konechno-deti-mogut-razrabatyvat-prilozheniya-dlya-iphone-no-eto-nelegko</guid>
      <description><![CDATA[<p>Рассказали, как дети, которые увлекаются программированием, смогли разработать свои успешные приложения для iPhone.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/konechno-deti-mogut-razrabatyvat-prilozheniya-dlya-iphone-no-eto-nelegko">Конечно, дети могут разрабатывать приложения для iPhone. Но это нелегко</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Программирование для детей]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 28 Aug 2023 12:08:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>В магазине Apple App Store представлено около 2 млн. приложений, которые разрабатываются самыми разными людьми — от детей в своих спальнях до профессиональных разработчиков в огромных офисах. Потенциальная аудитория только в США составляет около 125 млн. человек, что является большим стимулом для разработки приложений на iOS.</p><p>Для кого-то успех измеряется прибылью и количеством загрузок, а для кого-то разработка приложения — это служение делу и стремление помочь людям. Это может быть достойным занятием и ради самого себя.</p><p>Так было с Рахулом Кумаром, который начал заниматься кодированием в 7 лет. В 2020 году из-за ограничений, связанных с блокировкой школы Covid-19, ему стало скучно сидеть в своей комнате, и он решил разработать приложение для iPhone до окончания школы.</p><p>Имея доступ к отцовскому MacBook, Кумар создал <a href="https://apps.apple.com/ru/app/emsafe-emergency-travel-app/id1633575773">EmSafe</a> — приложение для экстренных поездок, призванное помочь беженцам, иммигрантам, перемещенным лицам и тем, кто не знает английского языка, получить доступ к службам экстренной помощи в более чем 230 регионах мира.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-08-28/aaa1a355-bcf7-432b-97b0-f2534f375690.png" alt="" /></figure><p>До того как Кумар начал кодировать на Swift, у него был опыт работы с Java и Python, но он самоучка и не получал помощи от родителей.</p><blockquote>«Когда я начинал, мне было трудно писать на этих языках, и я часто просто оставлял проекты незавершенными на несколько недель, потому что не мог легко найти конкретный ресурс для решения своей проблемы».</blockquote><p>Его проект столкнулся с трудностями, когда он отправил его на внутреннее рецензирование в Apple. Хотя инструменты разработки и поддержка сообщества бесплатны, для того чтобы отправить приложение на рассмотрение и распространять его через App Store, необходимо зарегистрироваться в программе Apple Developer Program (99 долл. в год). Apple предлагает подробный набор рекомендаций, которым необходимо следовать для публикации любого приложения или игры.</p><p>«Мне приходилось постоянно устранять проблемы, которые находили специалисты App Review, например, проблемы с текстом кнопки или с отображением оповещения», — рассказывает Кумар.</p><p>Но он упорно продолжал работать и в итоге был выбран компанией Apple в качестве победителя конкурса Worldwide Developers Conference Swift Student Challenge в 2021 и 2022 годах. Кумар выпустил первую версию EmSafe в июле.</p><p>Впервые Apple выпустила Swift Playgrounds в виде приложения для iPad в 2016 году, а в 2020 году появилась версия для MacOS. Это бесплатное приложение позволяет редактировать код в одном окне и видеть, как он будет выглядеть в готовом приложении, в другом (в реальном времени).</p><p>Имеются встроенные уроки и задачи, которые можно пройти, а также загрузить примеры игровых площадок, чтобы посмотреть, как они работают. Программа предназначена для обучения основам с помощью наглядных примеров, а также для выявления ошибок в коде по мере его ввода. Можно создать приложение для iPhone полностью в Swift Playgrounds, но можно также экспортировать проекты в Xcode (полноценную среду разработки Apple).</p><p>«Apple предоставила множество руководств по кодированию в Playgrounds для начинающих, но через некоторое время мне понадобилась более подробная и продвинутая информация», — говорит Кумар. Он чувствовал, что ему не хватает опыта кодирования, необходимого для понимания плотной документации для разработчиков. «Основным способом обучения разработке приложений для iOS было изучение таких сайтов, как Hacking With Swift, а также поиск фрагментов кода на GitHub».</p><p>Бен Робинсон, молодой разработчик игры <a href="https://apps.apple.com/gb/app/anxiety-relief-find-your-calm/id1460568970">Anxiety Relief: Find Your Calm</a>, рассказывает похожую историю. Он начал разрабатывать свое первое приложение для iPhone в 13 лет, но уже несколько лет изучал программирование.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-08-28/6a715223-cc8a-4b7f-b63a-6ac81ec8ea46.png" alt="" /></figure><blockquote>Документация Apple поначалу казалась ему довольно пугающей. Если я не знал точно, как работает API (интерфейс прикладного программирования), то мне было трудно найти нужный компонент. Необходимо совершить ментальный скачок от процедурного мышления к абстрагированию кода и использованию объектно/протокольно-ориентированных конструкций.</blockquote><p>Поначалу он запутался в том, что слишком буквально воспринимал все, что кодировал, и пытался реализовать функции, выполняющие слишком много операций. Но, по его словам, сообщество разработчиков iOS поддержало его и предложило множество ресурсов, которые можно было использовать. Как и Кумар, Робинсон нашел полезными учебные пособия Пола Хадсона «Hacking With Swift», в которых он знакомится с различными API-интерфейсами и побуждает его создавать на их основе различные вещи.</p><blockquote>У меня не было знакомых разработчиков приложений, и когда у меня возникали трудности, я обычно полагался на те ответы, которые мог найти на Stack Overflow. Все разработчики-самоучки сталкиваются с этой проблемой, но это также сделало меня более выносливым и независимым. Я стал более уверенно логически мыслить и эффективно решать возникающие проблемы.</blockquote><p>В дальнейшем Робинсон создал iOS-версию игры «Мафия» для игры с друзьями и надеется сделать карьеру в технологическом секторе. «Если у вас есть идея, действуйте! Никогда не знаешь, какая идея окажется той самой, которая взлетит», — советует он начинающим разработчикам. «Если ваша идея достаточно интересна, вы всегда сможете приобрести необходимые навыки, чтобы воплотить ее в жизнь».</p><p>Кумар поддержал эти слова, добавив, что лучше всего начинать с нескольких небольших проектов, ориентированных на то, что вам действительно интересно. Так вы быстро научитесь и будете иметь больше мотивации довести дело до конца. Он также советует потратить приличное количество времени на мозговой штурм и визуализацию приложения, прежде чем приступать к кодированию.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дорожная карта по Android-разработке с нуля</title>
      <link>https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta</link>
      <comments>https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta</guid>
      <description><![CDATA[<p>Рассказываем, как стать Android-разработчиком с нуля, следуя дорожной карте. Вы узнаете, что изучать и в какой последовательности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta">Дорожная карта по Android-разработке с нуля</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 23 Aug 2023 10:50:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как стать разработчиком Android-приложений с нуля, с чего начать и куда развиваться — поможет понять дорожная карта:</p><figure><img src="https://media.tproger.ru/uploads/2021/01/Android-1.png" alt="" /></figure><ol><li><a href="https://tproger.ru/#part1">Java или Kotlin?</a></li><li><a href="https://tproger.ru/#part2">Начало работы</a></li><li><a href="https://tproger.ru/#part3">Система контроля версий</a></li><li><a href="https://tproger.ru/#part4">Android Architecture</a></li><li><a href="https://tproger.ru/#part5">Создание приложений</a></li><li><a href="https://tproger.ru/#part6">Продвинутая разработка</a></li><li><a href="https://tproger.ru/#part7">Заключение</a></li></ol><h2>Java или Kotlin?</h2><p>Мы уже проводили <a href="https://tproger.ru/articles/java-vs-kotlin/">сравнение Java и Kotlin</a>, в ходе которого пришли к выводу, что оба языка важны. Так, без знания Java будет сложно разобраться в Kotlin, который всё ещё использует JVM. С другой стороны, Kotlin сделал большой шаг вперёд и ориентируется именно на Android-разработку, тогда как Java используется также для бэкенда, десктоп-приложений и Big Data.</p><h2>Начало работы</h2><p><a href="https://developer.android.com/studio">Скачайте Android Studio</a> и разберитесь с данной IDE.</p><p>Теперь настало время поближе познакомиться с выбранным языком. Если вы решили со старта взяться за Kotlin, имейте в виду, что документация предполагает хотя бы базовое знание Java.</p><p>Что Kotlin, что Java являются полноценными ООП языками, поэтому освойте принципы объектно-ориентированного программирования.</p><p>Изучите структуры данных и алгоритмы, подкрепите теорию практикой.</p><p>Скачайте систему автоматической сборки <a href="https://gradle.org/install/">Gradle</a>, потому как ручная сборка проектов с указанием нужных библиотек и фреймворков — процесс трудоёмкий.</p><h2>Система контроля версий</h2><p>Если вы ещё не работали с VCS, самое время начать. Изучите возможности и основные команды Git, выберите для себя один из веб-сервисов для хостинга проектов и попрактикуйтесь на первых репозиториях.</p><h2>Android Architecture</h2><p>Различные паттерны разработки позволяют повысить качество кода, сделать его более понятным и масштабируемым. К основных паттернам относятся:</p><ul><li>MVVM (Model–View–ViewModel);</li><li>MVI (Model-View-Intent);</li><li>MVP (Model-View-Presenter).</li></ul><p>Подробнее о них можно узнать из <a href="https://habr.com/ru/post/344184/">статьи</a>.</p><h2>Создание приложений</h2><p>А здесь самое интересное.</p><p>Activity в Android — это по сути окно приложения. Простые приложения состоят из одного окна, сложные — из двух и более. Жизненный цикл Activity включает в себя шесть коллбэков:</p><ul><li>onCreate() — создание активити;</li><li>onStart() — подготовку к отображению на экране;</li><li>onResume() — отображение на экране;</li><li>onPause() — приостановку процессов;</li><li>onStop() — состояние невидимости;</li><li>onDestroy() — завершение работы.</li></ul><p>Далее изучите создание гибких интерфейсов с использованием фрагментов и начните выполнять отладку с помощью Android Studio Debugger.</p><p>Для работы с компонентами используйте такие инструменты, как Room, Navigation, WorkManager, LiveData, Data Binding. Из сторонних библиотек будут полезны Glide, Retrofit, GSON и Firebase.</p><p>Разберитесь с <a href="https://developer.android.com/reference/android/content/Intent">Intent</a> для взаимодействия между объектами Activity и объектом <a href="https://developer.android.com/reference/android/content/Context">Context</a>, который предоставляет доступ к ресурсам и другим объектам, в том числе к Activity.</p><p>Ну и как стать Android-разработчиком с нуля без практики? Следуйте инструкциям из данного видеоурока и подключитесь к NASA через API, чтобы получить доступ к фотографиям из космоса:</p><h2>Продвинутая разработка</h2><p>Продолжайте развиваться, осваивая безопасную разработку. Для тестирования подойдут фреймворки JUnit и Espresso, для управления зависимости — библиотеки Dagger и Koin. Дополнительно почитайте о параллелизме и многопоточности, узнайте, что это и как используется в создании Android-приложений.</p><h2>Заключение</h2><p>Так как же стать Android-разработчиком с нуля? Определитесь с языком программирования, научитесь работать с Android Studio, Gradle и веб-сервисом для хостинга проектов. Вам предстоит разобраться в основных паттернах и их отличиях, изучить создание гибких интерфейсов, а также подключаться к другим сервисам через API. Продвинутая разработка предполагает тестирование, управление зависимостями, работу с параллелизмом и многопоточностью.</p>]]></content:encoded>
    </item>
    <item>
      <title>Вышло приложение ChatGPT для Android</title>
      <link>https://tproger.ru/articles/vywlo-prilozhenie-chatgpt-dlya-android</link>
      <comments>https://tproger.ru/articles/vywlo-prilozhenie-chatgpt-dlya-android?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vywlo-prilozhenie-chatgpt-dlya-android</guid>
      <description><![CDATA[<p>OpenAI выпустила приложение с языковой моделью ChatGPT для Android-устройств. Пока оно доступно только для США, Индии, Бангладеш и Бразилии.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vywlo-prilozhenie-chatgpt-dlya-android">Вышло приложение ChatGPT для Android</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 26 Jul 2023 09:14:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>OpenAI <a href="https://play.google.com/store/apps/details?id=com.openai.chatgpt">выпустила</a> мобильное приложение с языковой моделью ChatGPT для Android-устройств. Ранее компания обещала, что выложит приложение на неделе с 24 июля.</p><p>Как и в случае с веб-приложением ChatGPT, воспользоваться языковой моделью на Android можно будет бесплатно. Стоимость подписки на ChatGPT Plus стоит $20.</p><p>Преимущество модельной версии ChatGPT заключается в том, что оно использует сервис Whisper от OpenAI для преобразования речи в текст.</p><p>Пока Android-приложение доступно только для пользователей из США, Индии, Бангладеш и Бразилии. С 31 июля OpenAI обещает сделать его доступным для других стран.</p><p>То же самое происходило, когда OpenAI выпустила приложение для iOS: сперва им могли воспользоваться только в США, и только потом ChatGPT стала доступна для остальных стран.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сбер создал PWA-приложение для смартфонов</title>
      <link>https://tproger.ru/news/sber-sozdal-pwa-prilozhenie-dlya-smartfonov</link>
      <comments>https://tproger.ru/news/sber-sozdal-pwa-prilozhenie-dlya-smartfonov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/sber-sozdal-pwa-prilozhenie-dlya-smartfonov</guid>
      <description><![CDATA[<p>Сбер создал веб-приложение на основе технологий PWA, которые позволяют использовать сайт как обычное приложение для смартфона.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/sber-sozdal-pwa-prilozhenie-dlya-smartfonov">Сбер создал PWA-приложение для смартфонов</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Сбер]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 25 Jul 2023 11:04:51 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сбер <a href="http://www.sberbank.ru/ru/sberpress/all/article?newsID=67b59217-0980-40eb-94be-724923c352bd&amp;blockID=1303&amp;regionID=66&amp;lang=ru&amp;type=NEWS">создал</a> веб-приложение на основе технологий PWA (Progressive Web Application) и WebAuthn (Web Authentication), которые позволяют создать ярлык на рабочем столе смартфона и использовать сайт как обычное приложение для смартфона. Технологию PWA уже используют Twitter, Instagram, Pinterest, Starbucks.</p><p>При этом PWA-приложение будет выглядеть как обычное приложение из AppStore или Play Market. Чтобы воспользоваться услугами, не нужно заходить в браузер на сайт банка или бояться, что магазин приложений удалит старую версию с вашего смартфона.</p><p>PWA-приложение (Progressive Web App) – это веб-приложение, которое похоже на нативное мобильное приложение, но разрабатывается и работает на базе веб-технологий, таких как HTML, CSS и JavaScript.</p><p>Основная идея PWA заключается в том, чтобы объединить преимущества веб и мобильных приложений. К примеру, PWA может кэшировать объекты и работать, даже если на устройстве нет интернета.</p><p>При этом PWA-приложение доступно для всех пользователей, вне зависимости от браузера и устройства. С точки зрения разработки, PWA позволяет не тратиться на создание приложений под разные браузеры, ОС и экраны.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что почитать начинающим мобильным разработчикам</title>
      <link>https://tproger.ru/articles/chto-pochitat-nachinayushhim-mobilnym-razrabotchikam</link>
      <comments>https://tproger.ru/articles/chto-pochitat-nachinayushhim-mobilnym-razrabotchikam?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Мария Кривоченко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-pochitat-nachinayushhim-mobilnym-razrabotchikam</guid>
      <description><![CDATA[<p>Собрали материалы, которые помогут начинающим мобильным разработчикам освоиться в профессии. Внутри много ссылок на сайты, статьи и каналы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-pochitat-nachinayushhim-mobilnym-razrabotchikam">Что почитать начинающим мобильным разработчикам</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 07 Jul 2023 10:58:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>В статье IT-команда KION собрала порталы, подкасты и Telegram-каналы, которые помогут вкатиться в сферу. С них будет полезно начать обучение мобильным разработчикам.</p><h2>iOS-разработка</h2><h2>Документация</h2><p>Несколько лет назад от iOS-разработчиков требовали знать Objective-C, но сейчас обязателен только Swift. Язык активно развивается, а значит, <a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/">перечитывать документацию</a> придётся примерно раз в год.</p><p>Также важно изучить документацию двух фреймворков, на которых, как правило, ведётся разработка:</p><ul><li>Привычный <a href="https://developer.apple.com/documentation/uikit">UIKit</a>, актуальный уже более 10 лет. Вопросы по этому фреймворку по прежнему входят в программу любого собеседования.</li><li>Новый <a href="https://developer.apple.com/xcode/swiftui/">SwiftUI</a>, который приходит на смену UIKit и активно дорабатывается и продвигается компанией Apple. Его знание пока не обязательно для прохождения собеседования, но привлечёт внимание работодателя.</li></ul><h2>Курсы и не только</h2><ul><li>CS193p от Стэнфордского университета — Полноценный обучающий курс от ведущего мирового университета. Покрывает темы от основ до глубин. Раньше фокусировался на <a href="https://www.youtube.com/playlist?list=PL3d_SFOiG7_8ofjyKzX6Nl1wZehbdiZC_">UIKit</a>, теперь — на <a href="https://www.youtube.com/playlist?list=PLpGHT1n4-mAsxuRxVPv7kj4-dQYoC3VVu">SwiftUI</a>.</li><li><a href="https://www.coursera.org/specializations/algorithms">Algorithms and data structures</a> от Стэнфордского университета — Для тех кто в IT всерьёз и надолго. Подготовит к решению алгоритмических задач, которые задают на собеседованиях.</li><li><a href="https://kindly-dugong-2a2.notion.site/iOS-study-DataSource-by-Slava-Slutsker-3f79ba2c51ce45e9b32eae4666585e9d">iOS study DataSource</a> by Slava Slutsker — Своего рода роадмап для iOS-разработчика. Много ссылок на книги, блоги, лекции, курсы, разбитые по уровням, скиллам и темам.</li><li><a href="https://www.hackingwithswift.com/">Hacking with Swift</a> — Более тысячи бесплатных советов, методик и обучающих материалов по Swift. Автор написал несколько книг про разработку для iOS, macOS, watchOS. Ведёт <a href="https://www.youtube.com/@twostraws">канал на YouTube</a>.</li><li><a href="https://www.artemnovichkov.com/">Artem Novichkov</a> — портал, на котором Артём собирает собственные эксперименты со Swift. Например, как реализовать<a href="https://www.artemnovichkov.com/blog/spoiler-view"> текст-спойлер как у Telegram на SwiftUI.</a></li><li><a href="https://sparrowcode.io/ru">Код Воробья</a> — Портал с туториалами и разбором системных компонентов/приложений. В подвале сайта есть ссылки на их Telegram-канал и чат. В канале часто разбирают, как устроены те или иные системные приложения в iOS. А в чате можно задавать вопросы — там всегда помогут и объяснят.</li><li>Материалы «Додо Пиццы» —  например, <a href="https://habr.com/ru/amp/publications/720632/">этот</a> и <a href="https://habr.com/ru/companies/dododev/articles/452876/">этот</a>.</li></ul><h2>Подкасты</h2><ul><li><a href="https://soundcloud.com/podlodka">Podlodka</a> — Уже прошло более 11 сезонов, в которых лучшие российские разработчики рассказали о применяемых подходах, лайфхаках и best practices. Еще здесь можно найти ответы на вопросы с собеседований (а зачастую и сами вопросы).</li></ul><ul><li><a href="https://mobiusconf.com">Mobius</a> — Лучшая русскоязычная конференция. В основном материалы для разработчиков уровня middle/senior. Много лекций по iOS с прошлых конференций доступны на <a href="https://www.youtube.com/@MobiusConf">канале</a>.</li></ul><h2>Telegram-каналы для продвинутых разработчиков</h2><ul><li><a href="https://t.me/iosgr">iOS Good Reads</a></li></ul><ul><li><a href="https://t.me/ios_heads">iOS.Devs</a></li></ul><p>Каналы обзорные, авторские, полезны тем, что не постят много и делают выжимку за неделю/период. Существуют продолжительное время и имеют русскоязычных подписчиков, вместе с которыми вы сможете узнавать новое.</p><p>Когда я начинал учиться, старался изучать самые популярные ресурсы. Статьи на <a href="https://habr.com/ru/hub/swift/">Хабр</a> и Medium, записи конференций для разработчиков на платформах Apple Worldwide Developers Conference, официальную документацию Apple по SWIFT и её перевод от <a href="https://swiftbook.ru">SwiftBook</a>.</p><p>На Swiftbook вообще достаточно курсов для новичков (не бесплатных, но хороших). Правда, материалы по Swift постепенно устаревают, так что лучше не забывать про документацию. Хороший раздел Туториалы, где лежит много небольших статей о функционале.</p><h2>Android-разработка</h2><h2>Освой Android играючи</h2><p>Для тех, кто не понимает, что такое Android, как в него вкатиться и что делать. Здесь все представлено в лёгкой игровой форме, буквально с котиками. К тому же это «островок дружелюбия» в агрессивной среде программирования.</p><p><a href="https://developer.alexanderklimov.ru/android/">На платформе</a> 34 бесплатных урока: как поставить саму Android Studio, как сделать первую программу и так далее — всё со скриншотами и на русском языке.</p><h2>Stack Overflow</h2><p>Тут можно найти разбор почти любого проблемного кейса. Так что <a href="https://stackoverflow.com/">сайт</a> помогает, когда времени искать что-то в документации нет. Есть даже такая шутка в узких кругах: если он перестанет работать, разработчики перестанут выполнять свои задачи.</p><h2>Полезные статьи и не только</h2><ul><li>​​<a href="https://itvdn.com/ru/blog/article/250-about-android#q2u67efp4aad">Собеседование по Android</a> — 250+ распространённых вопросов для джунов, мидлов и сеньоров (хотя, конечно, здесь собрано не всё). Понравилось разделение по градациям уровней. Я бы ориентировался на эту статью как минимум для первого собеседования, чтобы чувствовать себя более уверенным и подкованным.</li></ul><p>После собеседований рекомендую записывать вопросы, на которые вы не смогли ответить — и после разбирать их. Так, вы сможете лучше подготовиться для других собеседований. Или даже вернуться через какое-то время в ту же компанию и сказать: я закрыл свои пробелы, хочу ещё раз пособеседоваться с вами — это нормальная практика.</p><ul><li><a href="https://habr.com/ru/amp/publications/721084/">Вопросы и ответы для собеседования по Kotlin</a> — Статья про Kotlin в целом, не только о платформе. Тоже будет полезна для прохождения собеседований.</li><li><a href="https://habr.com/ru/amp/publications/162017/">Java собеседование. Коллекции</a> — На собеседованиях кандидатов любят погонять по коллекциям, поэтому советую статью на эту тему. Мне в своё время она помогла закрыть «пробелы» в теоретических знаниях.</li><li>Для вдохновения рекомендую послушать ролики на YouTube и подкасты от представителей профессии: с чего они начинали, с какими сложностями сталкивались. Могу посоветовать <a href="https://www.youtube.com/watch?v=mXFMm22aZXg">интервью</a>, где рассказываю о собственном пути в Android-разработке.</li></ul><p>Важный совет — уметь гуглить на английском языке. На русском информации по теме не так много.</p><h2>И немного про базы данных</h2><p>Если вы уже освоили базу, можно попробовать усложнить свои проекты, и добавить в них, например, БД. И для этого понадобится знание новой темы —  SQL.</p><p>Для практики я советую начинающим специалистам <a href="https://www.sql-ex.ru/?Lang=0">SQL-EX</a>. Он простой и достаточно популярный, подойдет и для разработчиков, и для аналитиков — всех, кому нужно попрактиковать SQL. В своё время я использовал этот сайт-задачник для оттачивания навыков по работе с SQL.</p><p>Когда человек проходит какой-то курс, ему часто не хватает именно практики, чтобы уверенно и бегло писать запросы. А после — показать навык на собеседовании, получить оффер и спокойно работать. И этот сайт как раз решает проблему.</p><p>Ещё посоветовал бы телеграм-каналы, которые ведут сами действующие специалисты. В них часто встречаются разборы кейсов из реальной практики, разборы тестовых заданий и ошибок, советы по прохождению собеседований.</p><h2>Как лучше организовать обучение</h2><ul><li>RTFM. Читайте документацию в первоисточнике.</li><li>Обязательно пишите код, много кода. Для этого заведите себе в GitHub пет-проект. Например, простое приложение для показа новостной ленты/погоды/галереи изображений.</li><li>Перенимайте опыт у экспертов.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Как создать мобильное приложение для бизнеса</title>
      <link>https://tproger.ru/articles/kak-sozdat-mobilnoe-prilozhenie-dlya-biznesa</link>
      <comments>https://tproger.ru/articles/kak-sozdat-mobilnoe-prilozhenie-dlya-biznesa?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[DD Planet]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-sozdat-mobilnoe-prilozhenie-dlya-biznesa</guid>
      <description><![CDATA[<p>Как создать мобильное приложение: что делать на старте, как оценить затраты, какие способы разработки оптимальны и какие нюансы учитывать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-sozdat-mobilnoe-prilozhenie-dlya-biznesa">Как создать мобильное приложение для бизнеса</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 20 Jun 2023 11:57:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня владельцам бизнеса предлагается множество возможностей для создания мобильного приложения. При достаточном бюджете его можно доверить профессионалам, при минимальном — разработать самостоятельно или с помощью конструкторов. Автор статьи — руководитель мобильной разработки DD Planet, Павел Кузнецов — рассказывает, как спланировать разработку.</p><p>Вне зависимости от выбранного пути собственно разработка — это лишь один из этапов создания приложения. Я разделил этот процесс на 6 основных шагов, в которых расскажу, что делать на старте, как оценить затраты, какие способы разработки оптимальны для вашего бизнеса и какие нюансы нужно учитывать, чтобы создать эффективное приложение.</p><h2>Шаг 1. Определите бизнес-задачу</h2><p>Первое, что необходимо понимать перед созданием мобильного приложения — то, что это не игрушка или дань моде, а рабочий инструмент, направленный на решение конкретных целей бизнеса. Причем инструмент достаточно дорогостоящий. Поэтому создавать приложение имеет смысл в том случае, когда оно будет способствовать решению вашей бизнес-задачи.</p><p>Приведу несколько примеров, когда разработка приложения оправдана: вы хотите увеличить охват целевой аудитории за счет активных пользователей мобильных устройств, упростить процессы покупки или оформления заявки, продвигать скидки и акции и т.д.</p><p>В конечном счете все это должно привести к росту прибыли, охвата или других важных для вас бизнес-показателей. Если мобильное приложение не ориентировано на это, высокие затраты на разработку могут не окупить себя.</p><h2>Шаг 2. Проанализируйте целевую аудиторию и конкурентов</h2><p>На этом этапе важно понять, пользуется ли ваша целевая аудитория мобильными устройствами и какие у нее потребности.</p><p>Приложение является довольно действенным инструментом для компаний, ориентированных на молодежь и активных пользователей гаджетов. Если ваш бизнес локальный или направлен на пожилую аудиторию — скорее всего, эффективнее и дешевле будет привлекать покупателей с помощью других каналов.</p><p>Успешное мобильное приложение не только решает задачи бизнеса, но и удовлетворяет потребности ваших клиентов или сотрудников:</p><ul><li>На вашем сайте высока доля мобильного трафика — возможно, пора переходить в мобайл.</li></ul><ul><li>Покупатели в магазине часто забывают карту лояльности — было бы удобно иметь ее в электронном виде прямо в мобильном.</li></ul><ul><li>Клиенты не всегда знают о текущих акциях — проинформируйте их об этом в приложении.</li></ul><ul><li>Боятся, что товар закончится, пока они едут в магазин — предоставьте возможность зарезервировать его в 2 клика прямо с мобильного.</li></ul><ul><li>Ваши сотрудники тратят много времени на определенные процессы – оптимизируйте их. Создайте базу знаний, CRM, внутрикорпоративные мессенджеры, портативные кассы, передающие заказы покупателей на склад и др.</li></ul><p>Эти и многие другие потребности можно закрывать с помощью мобильных приложений. Очень полезно также заглянуть к конкурентам и посмотреть, какие возможности они предоставляют в приложении и какие фишки используют.</p><h2>Шаг 3. Оцените вашу инфраструктуру данных</h2><p>Любое бизнес-приложение построено на работе с данными клиентов и самого бизнеса (бухгалтерии, склада и пр). Поэтому важно понимать, есть ли у вас необходимая инфраструктура или потребуются дополнительные затраты на ее построение.</p><p>Если компания активно работает в онлайне, скорее всего, данные собираются и хранятся в электронном виде. В этом случае существующая архитектура данных подходит для наполнения мобильного приложения. Потребуется лишь ее доработать и построить канал взаимодействия с приложением.</p><p>Если вы не собираете данные или ведете учет в бумажном виде, мобильное приложение обойдется существенно дороже. На построение только архитектуры данных придется выделить от 40% бюджета. Самый недорогой вариант — простой интернет-магазин.</p><p>Если речь идет о нейронных сетях и анализе данных, то серверные работы займут существенную часть бюджета.</p><h2>Шаг 4. Выберите способ и инструмент разработки</h2><p>Как разрабатывать приложение: самостоятельно или на заказ — зависит от вашего бюджета и желаемого результата. Давайте разберем оба варианта.</p><h3>Мобильное приложение своими руками</h3><p>Разработать приложение самостоятельно можно, когда бюджет небольшой или вовсе отсутствует. Обычно к этому варианту прибегают представители малого и среднего бизнеса, которым достаточно стандартных решений по готовым шаблонам.</p><p>Существует три варианта самостоятельной разработки приложения:</p><h4>Написание кода своими силами</h4><p>Если вы обладаете навыками программирования или готовы получить их, то вполне можете написать приложение самостоятельно. Технологии можно использовать разные: от натива (Swift или ObjectiveC для iOS, Java или Kotlin для Android) до всевозможных фреймоворков — например, Xamarin (C#), ReactNative (Javascript) или Flutter(Dart).</p><p>В этом случае затраты на разработку будут минимальны, но сам процесс, скорее всего, займет много времени. Итоговое качество продукта будет зависеть только от вас самих.</p><h4>Онлайн-сервисы для создания приложений на основе готового контента</h4><p>Это наиболее простой способ создания приложений — чтобы им воспользоваться, вам понадобится только сайт, адаптированный под мобильные устройства. Такие сервисы конвертируют браузерную версию в приложение без существенных изменений. Весь процесс может занять несколько минут. Способ подходит для небольших сайтов с качественным адаптивным дизайном или мобильной версией. Быстро, дешево и сердито.</p><p>Если вас интересует такой вариант, рекомендую также в качестве альтернативы рассмотреть возможность доработки своего сайта и создания PWA – progressive web app. Эта технология позволяет получить своеобразный гибрид сайта и приложения: в десктопе он будет отображаться как обычный сайт, а в мобильной версии — имитировать приложение. Возможно, вам окажется достаточно этого функционала и не придется делать отдельное приложение.</p><h4>Конструкторы мобильных приложений</h4><p>С их помощью уже можно создать полноценное приложение с нуля. Никакими навыками программирования обладать не нужно — вся работа ведется в визуальном редакторе. Функционал конструкторов включает как готовые шаблоны, так и отдельные элементы: формы, кнопки, иконки и т.д.</p><p>По итогам вы получите простое мобильное приложение с шаблонным дизайном. Его функционал будет ограничен только возможностями использованного вами конструктора.</p><h4>Затраты на самостоятельную разработку</h4><p>Во многих сервисах доступны бесплатный базовый функционал и Pro-версии. Стоимость платных тарифов сильно разнится в зависимости от опций, периода оплаты и пр. В среднем для создания стандартного приложения понадобится около 50-150$ в месяц.</p><p>Не забудьте, что на разработке дело не заканчивается и даже готовые решения требуют поддержки и обновлений. Многие конструкторы предлагают публикацию приложения в магазинах и дальнейшее сопровождение за дополнительную плату.</p><h3>Профессиональная разработка мобильного приложения</h3><p>С ростом бизнеса шаблонные мобильные приложения, конечно же, его задач уже не решат. Крупная компания должна предоставлять клиентам качественный сервис, удобный интерфейс и функционал, отвечающий потребностям пользователей. Кроме того, у нее должна быть возможность отстроиться от конкурентов. На этом этапе компании борются за лучший клиентский опыт, поэтому без разработчиков уже не обойтись.</p><p>Существует несколько подходов к разработке в зависимости от задач приложения, желаемых сроков реализации и используемых технологий. Как правило, команда разработчиков выбирает тот способ и инструмент, с которыми она привыкла работать. Для собственника бизнеса они не играют большого значения, но следует знать основные нюансы.</p><h4>Разработка отдельного приложения под каждую платформу</h4><p>Данный подход предполагает написание кода отдельно под Android и под iOS. Целесообразен он в тех случаях, когда требуется уникальный дизайн для каждой платформы с соблюдением всех гайдлайнов, максимальная производительность приложения и полный доступ к функциональности (дактилоскопический сканер, алгоритмы дополненной и виртуальной реальности, тонкие настройки беспроводного соединения, трансляция геолокации и т.д.).</p><p>Минусы очевидны: это наиболее затратный способ с точки зрения времени и ресурсов. Каждая операционная система предполагает свой язык программирования (Swift или Objective-C для iOS, Java или Kotlin для Android) и способ описания UI-дизайна. Это обязывает разработчиков реализовывать весь функционал для каждой из платформ по отдельности, практически без возможности переиспользования наработок одной платформы на другой. Если проект сложный или команда не имеет опыта работы с двумя операционными системами, есть вероятность, что потребуется задействовать по отдельной команде на каждую платформу.</p><h4>Кроссплатформенная разработка</h4><p>В этом случае мобильные приложения на Android и iOS разрабатываются с использованием общей бизнес-логики и с единым описанием дизайна, что снижает затраты. Наиболее популярные инструменты кроссплатформенной разработки: React Native, Xamarin (Xamarin.Forms) и Flutter. На выходе получается приложение, которое выглядит и работает одинаково на обеих платформах.</p><p>В числе недостатков такого подхода: сложность соблюдения гайдлайнов каждой платформы, ограничения используемых фреймворков (например, отсутствует доступ к каким-либо функциям устройства) и меньшее быстродействие, по сравнению с нативом. Если есть необходимость в более сложных решениях, не факт, что разработчик сможет их реализовать.</p><h4>Комбинация нативного подхода и кроссплатформенного</h4><p>Для более сложных приложений мы используем этот подход. Его особенность состоит в том, что мы имеем общую бизнес-логику, но дизайн создается отдельно под требования Android и iOS. В этом случае разработчик фактически работает с нативным кодом каждой платформы, но с помощью единого языка программирования C#. Это дает возможность переиспользовать код на обеих платформах.</p><p>В DD Planet мы используем фреймворк Xamarin, который позволяет сгладить все различия платформ и написать код на одном языке. Это оптимальный вариант для сложных приложений – он позволяет соответствовать гайдлайнам каждой платформы и решать бизнес-задачи любой сложности.</p><h4>Затраты на заказную разработку</h4><p>Стоимость профессиональной разработки мобильных приложений под ключ начинается от 500 тыс. руб. Она зависит от уровня инфраструктуры данных и сложности самого приложения.</p><h2>Шаг 5. Протестируйте</h2><p>Тестирование — важный этап, который должен сопровождать весь процесс разработки. Проще и дешевле устранить баги в самом начале, чем постоянно дорабатывать после релиза.</p><p>Что необходимо тестировать:</p><ul><li>Функционал. Оцениваем, соответствует ли приложение ТЗ и потребностям бизнеса, и проверяем работоспособность всех функций.</li></ul><ul><li>Конфигурации. Тестируем на разных устройствах, конфигурациях и версиях операционных систем.</li></ul><ul><li>Высокие нагрузки. Проверяем, как ведет себя приложение при увеличении числа активных пользователей, пиковых нагрузках, нестабильном подключении к сети, добавлении ресурсоемкого функционала и т.д.</li></ul><ul><li>Юзабилити. Анализируем удобство взаимодействия пользователей с приложением при различных сценариях поведения.</li></ul><ul><li>Безопасность. Выявляем уязвимости к сетевым атакам, вирусам и взломам, обеспечиваем безопасность пользовательских данных.</li></ul><h2>Шаг 6. Регулярно поддерживайте приложение</h2><p>Как часто требуется техническая поддержка? Если разработка и тестирование прошли с ошибками, то приложение нужно будет постоянно дорабатывать. Конечно, это не лучшая ситуация. Тем не менее, даже качественный продукт нужно регулярно поддерживать.</p><p>В среднем устранение недочетов требуется примерно раз в месяц. Учесть все при тестировании нельзя: клиенты используют огромное множество устройств с разными характеристиками, поэтому на отдельных гаджетах в любом случае будут всплывать мелкие баги.</p><p>Помимо мелких доработок, изредка появляется необходимость в масштабных обновлениях. Обычно это происходит с выходом новых девайсов, на которых приложение работает не так, как ожидалось.</p><p>Из наиболее ярких примеров — новые требования Apple к приложениям после выхода iPhone X. На обновления владельцам дали два месяца. Если спустя это время приложения отображались на устройстве некорректно, их удаляли из магазина.</p><p>Как правило, гарантийная поддержка на первое время входит в стоимость разработки.</p><h2>Краткое резюме по созданию эффективного приложения</h2><p>Создание мобильного приложения — довольно сложный и вдумчивый процесс. Даже если вы прибегнете к одному из онлайн-сервисов, гарантирующих разработку приложения за пару минут, не поленитесь провести предварительный анализ ваших потребностей, целевой аудитории и конкурентов, а также запланируйте ресурсы на дальнейшую техническую поддержку.</p><p>Продуманный подход и следование всем этапам позволят вам создать мобильное приложение без необходимости серьезных доработок в будущем, сэкономить на непредвиденных расходах и увеличить прибыльность вашего бизнеса.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как создать привлекательный интерфейс для бизнес-приложения</title>
      <link>https://tproger.ru/articles/kak-sozdat-privlekatelnyj-interfejs-dlya-biznes-prilozheniya</link>
      <comments>https://tproger.ru/articles/kak-sozdat-privlekatelnyj-interfejs-dlya-biznes-prilozheniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[AurumSoft ]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-sozdat-privlekatelnyj-interfejs-dlya-biznes-prilozheniya</guid>
      <description><![CDATA[<p>Создание привлекательного интерфейса для бизнес-приложения – это один из ключевых факторов успеха. Рассказываем, как его создать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-sozdat-privlekatelnyj-interfejs-dlya-biznes-prilozheniya">Как создать привлекательный интерфейс для бизнес-приложения</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Веб-дизайн]]></category>
      <category><![CDATA[Figma]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 22 May 2023 09:57:42 GMT</pubDate>
      <content:encoded><![CDATA[<p>Создание привлекательного интерфейса для бизнес-приложения — это один из ключевых факторов успеха любого проекта. Ведь именно интерфейс первым делом попадает на глаза пользователя и оказывает решающее влияние на его мнение о продукте. Каким должен быть привлекательный интерфейс и как его создать — об этом мы сегодня и поговорим.</p><h2>Что такое интерфейс</h2><p>«Интерфейс» в переводе с английского состоит из слов interaction ― взаимодействие ― и face ― лицо.</p><p>Интерфейс для бизнес-приложения — это средство взаимодействия пользователя с информационной системой. Хороший интерфейс должен быть интуитивно понятным и удобным в использовании, чтобы пользователи могли быстро и эффективно выполнять свои задачи. Интерфейс является ключевым элементом любого приложения, который определяет эффективность работы пользователей.</p><h2>Почему интерфейс важен в любом бизнес-процессе</h2><p>Многие компании уделяют большое внимание производительности и эффективности своих бизнес-процессов, чтобы максимизировать прибыль и удовлетворять потребности своих клиентов. Однако, не менее важную роль играет интерфейс, т.е. то, как пользователи взаимодействуют с продуктом или услугой. Если процесс взаимодействия с клиентом затруднен или неудобен, это может привести к потере клиентов и уменьшению прибыли.</p><p>Одним из примеров может быть интернет-магазин. Если на сайте или в приложении магазина нельзя совершить покупку в несколько кликов, то клиенты могут разочароваться и перейти к другому поставщику. Другим примером может быть облачный сервис, который используется сотрудниками компании. Если интерфейс интуитивно непонятен, то процесс работы может замедлиться, а производительность команды снизиться.</p><p>Кроме того, удобный интерфейс может увеличить лояльность пользователей. Если пользователь хорошо знаком с продуктом и умеет легко им пользоваться, то вероятность того, что он вернется к этому продукту, увеличивается. Поэтому компании должны уделять достаточно внимания разработке удобного интерфейса, чтобы его использование было максимально комфортным и эффективным для всех пользователей.</p><h2>Основные виды интерфейсов для бизнес-приложений</h2><p>Чаще всего выделяют два базовых вида интерфейса для бизнес-приложений, каждый из которых имеет свои особенности и применение:</p><h3>Мобильные интерфейсы</h3><p>Это интерфейсы мобильных приложений, с которыми пользователи взаимодействуют с экрана смартфона или планшета. Отсюда и особенности:</p><ul><li>Крупные элементы интерфейса — блоки меню, кнопки или иконки — которые заполняют экран полностью: так, чтобы их было хорошо видно даже при маленьком разрешении.</li></ul><ul><li>Расположение элементов обосновано анатомически: так, чтобы ими было удобно управлять с помощью одной руки, а пальцы не промахивались мимо кнопки.</li></ul><figure><img src="https://media.tproger.ru/uploads/2023/05/84dc1ffe-2ac3-491c-92ea-500ace711895-scaled.jpg" alt="" /></figure><h3>Веб-интерфейсы</h3><p>Это интерфейсы сайтов и онлайн-сервисов, которые работают в десктопных браузерах. От мобильных их отличает то, что масштаб и композиция элементов здесь могут быть любыми, а управляют ими с помощью мыши или тачпада. В таких графических интерфейсах чаще встречаются большие текстовые блоки, видео и анимация.</p><figure><img src="https://media.tproger.ru/uploads/2023/05/31fc4799-356d-4588-9f8d-0352c6812a8a-scaled.jpg" alt="" /></figure><h2>Инструменты для создания качественного интерфейса</h2><p>Создание интерфейса для бизнес-приложения может происходить с помощью различных инструментов и технологий. Вот несколько из них:</p><ul><li><a href="https://www.sketch.com">Sketch:</a> это инструмент для дизайна интерфейсов, который используется для создания векторных иллюстраций и элементов интерфейса. Sketch позволяет создавать макеты и дизайны, а также работать с готовыми библиотеками символов и плагинами.</li></ul><ul><li><a href="https://www.figma.com">Figma: </a>это веб-приложение для дизайна интерфейсов, которое позволяет создавать прототипы и работать с другими участниками команды в режиме реального времени. Figma также позволяет работать с библиотеками символов и плагинами, что делает процесс дизайна более эффективным.</li></ul><ul><li><a href="https://adobexdplatform.com">Adobe XD:</a> это инструмент для создания интерфейсов, который позволяет создавать прототипы, анимации и элементы интерфейса. Adobe XD также позволяет работать с другими продуктами Adobe, такими как Photoshop и Illustrator, что делает процесс дизайна более удобным.</li></ul><ul><li><a href="https://www.invisionapp.com">InVision:</a> это платформа для создания интерактивных прототипов и дизайна интерфейсов. InVision позволяет создавать анимации и переходы между страницами, а также работать с другими участниками команды.</li></ul><ul><li>HTML, CSS и JavaScript: это языки программирования, которые используются для создания веб-интерфейсов. Они позволяют создавать интерактивные элементы, анимации и прототипы, а также работать с различными библиотеками и фреймворками.</li></ul><p>Конечный выбор инструментов и технологий для создания интерфейса зависит от потребностей и возможностей команды и проекта.</p><h2>Этапы создания интерфейса</h2><p>Создание интерфейса для бизнес-приложения — это процесс, состоящий из нескольких этапов. Рассмотрим каждый:</p><p><b>1. </b><b>Исследование пользователей и целей приложения.</b> На этом этапе необходимо изучить потребности и цели пользователей, а также определить, каким образом интерфейс приложения может помочь им достичь этих целей.</p><p><b>2. Проектирование информационной архитектуры.</b> На этом этапе создаются структура и организация информации в приложении. Это включает в себя создание карт сайта и диаграмм потоков данных, которые помогут организовать информацию и логику приложения.</p><p><b>3. Создание макетов и прототипов.</b> На этом этапе создаются визуальные макеты и прототипы, которые показывают, каким образом пользователи будут взаимодействовать с приложением. Макеты могут быть созданы как на бумаге, так и в специальных программных инструментах.</p><p><b>4. Тестирование прототипов.</b> Прототипы необходимо тестировать, чтобы проверить, насколько эффективно пользователи могут взаимодействовать с приложением. На этом этапе выявляются недостатки интерфейса и предлагаются улучшения.</p><p><b>5. Создание графического дизайна.</b> На этом этапе определяется стиль и цветовая гамма приложения, а также создаются визуальные элементы интерфейса, такие как кнопки, иконки и шрифты.</p><p><b>6. Разработка интерфейса.</b> На этом этапе происходит создание кода, который реализует интерфейс приложения. В этом процессе используются языки программирования, такие как HTML, CSS и JavaScript.</p><p><b>7. Тестирование и улучшение. </b>На этом этапе проводится тестирование уже разработанного интерфейса приложения. Выявленные недостатки устраняются, а интерфейс приложения улучшается и оптимизируется в соответствии с потребностями пользователей.</p><p>Каждый из этих этапов является важным для создания привлекательного и эффективного интерфейса приложения. Правильное планирование и реализация каждого из них помогут создать удобный и понятный интерфейс для пользователей.</p><h2>Рекомендации для создания привлекательного интерфейса бизнес-приложения</h2><ul><li>Сделайте интерфейс интуитивно понятным. Люди должны легко понимать, как использовать приложение и какие функции оно предоставляет.</li></ul><ul><li>Держите дизайн чистым и простым.</li></ul><ul><li>Используйте привлекательные и нейтральные цвета и шрифты.</li></ul><ul><li>Создавайте качественные изображения и иконки.</li></ul><ul><li>Размещайте элементы так, чтобы пользователи могли легко находить нужные функции.</li></ul><ul><li>Старайтесь создавать дизайн, который соответствует брендингу вашей компании.</li></ul><h2>Совет от эксперта:</h2><blockquote>Создавайте такой интерфейс, чтобы с ним могла работать даже ваша бабушка, либо чтобы ей можно было по телефону рассказать, как совершать те или иные операции, потому что в бизнес-приложении далеко не всегда работают IT-специалисты, а оно должно быть доступным и понятным для всех пользователей.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Основы OkHttp в Android-разработке</title>
      <link>https://tproger.ru/articles/osnovy-okhttp-v-android-razrabotke-2</link>
      <comments>https://tproger.ru/articles/osnovy-okhttp-v-android-razrabotke-2?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Intergalactic]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/osnovy-okhttp-v-android-razrabotke-2</guid>
      <description><![CDATA[<p>Как применять OkHttp — библиотеку и, по совместительству, HTTP-клиент с открытым исходным кодом для Java и Kotlin.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/osnovy-okhttp-v-android-razrabotke-2">Основы OkHttp в Android-разработке</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 21 Feb 2023 08:35:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>OkHttp — библиотека и по совместительству HTTP-клиент с открытым исходным кодом для Java и Kotlin, разработанная Square, которая также создала Retrofit.</p><p>OkHttp предоставляет простой, легкий в использовании API для выполнения HTTP-запросов, включая поддержку протоколов HTTP/1.1 и HTTP/2. Библиотека поддерживает все стандартные методы HTTP и может легко обрабатывать несколько одновременных запросов, а также предоставляет расширенные возможности: кэширование запросов/ответов, объединение подключений в пул (connection pooling), аутентификация и др.</p><p>О том, почему иногда стоит использовать OkHttp, а не вездесущий Retrofit, можно посмотреть в <a href="https://youtu.be/r6Ga9a5w6V0">видео от Android Broadcast</a>. Краткое пояснение дано в следующем пункте статьи.</p><p>В статье подробно рассмотрены основные объекты и методы библиотеки и представлены основы работы с ней в Android-разработке.</p><p>Содержание:</p><ul><li>Преимущества OkHttp</li><li>Основные классы и методы</li><li>Простой GET-запрос (синхронный/асинхронный)</li><li>Сериализация/десериализация</li><li>Простой POST-запрос</li><li>Особенности работы с HTTPS</li><li>Аутентификация на сервере</li><li>Использование вместе с ViewModel</li></ul><h2>Преимущества OkHttp</h2><p>OkHttp — это библиотека более низкого уровня, чем Retrofit. Это означает, что HTTP-запросы, автоматизированные в Retrofit с помощью аннотаций, придётся писать вручную. Однако в этом и главный плюс библиотеки: она предоставляет более обширный функционал и настройки соединения, что может повысить производительность и сократить использование памяти. К слову, Retrofit под капотом использует OkHttp.</p><p>Библиотека разработана как легкая и эффективная, с акцентом на снижение задержек и повышение работоспособности. Это достигается за счет применения различных методов оптимизации, таких как повторное использование соединений, сжатие и конвейеризация.</p><p>Преимущества OkHttp:</p><ul><li>Гибкость: Библиотека предоставляет больше контроля над процессом сетевого взаимодействием за счёт дополнительных функций, например, пользовательской обработки запросов и ответов.</li><li>Лёгкость: OkHttp — более компактная библиотека, чем Retrofit, что позволяет минимизировать размер используемой приложением памяти.</li><li>Кэширование: Библиотека имеет встроенную поддержку HTTP-кэширования, что может повысить производительность и снизить нагрузку на сеть.</li><li>Аутентификация: OkHttp предоставляет гибкий и расширяемый API аутентификации, что упрощает реализацию различных её моделей.</li><li>Перехватчики (Interceptors): Это механизм, позволяющий легко настраивать запросы и ответы, а также хороший выбор для приложений, требующих расширенной обработки запросов.</li><li>WebSockets: OkHttp обеспечивает встроенную поддержку WebSockets, что позволяет легко реализовать коммуникацию с сервером в режиме реального времени.</li></ul><h2>Основные объекты и методы</h2><h4>Настройка клиента и запроса</h4><p>Класс <a href="https://square.github.io/okhttp/4.x/okhttp/okhttp3/-ok-http-client/">OkHttpClient </a>— клиент для HTTP-вызовов, который можно использовать для отправки запросов и чтения ответов.</p><p><a href="https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.Builder.html">OkHttpClient.Builder</a> — класс предоставляющий методы для настройки клиента, например кэш, аутентификация, перехватчики, тайм-ауты и др. По завершению настройки используется метод build(), который возвращает экземпляр класса OkHttpClient.</p><p>OkHttp работает лучше при создании одного экземпляра OkHttpClient и повторном его использовании для всех HTTP-вызовов. Так происходит потому, что каждый клиент содержит свой собственный пул соединений и пул потоков. Повторное использование соединений и потоков уменьшает задержку и экономит память. И наоборот, создание клиента для каждого запроса приводит к трате ресурсов на незадействованные пулы.</p><p>Класс <a href="https://square.github.io/okhttp/3.x/okhttp/okhttp3/Request.html">Request</a> представляет собой HTTP-запрос. <a href="https://square.github.io/okhttp/3.x/okhttp/okhttp3/Request.Builder.html">Request.Builder</a> позволяет установить параметры запроса, например url и заголовки.</p><p>В целом, HTTP-заголовки представляют собой что-то похожее на Map: каждое поле имеет одно значение или не имеет его вовсе. Однако некоторые заголовки могут иметь несколько значений. В связи с этим для добавления заголовка к запросу применяются два метода:</p><ul><li>header(name, value) — устанавливает только одно значение заголовка name. При этом все существующие значения заголовка будут удалены, и после этого будет установлено новое значение.</li><li>addHeader(name, value) — добавляет заголовок без удаления уже имеющихся значений.</li></ul><p>При чтении заголовка из ответа используйте header(name), чтобы вернуть последнее вхождение заголовка (зачастую это единственное вхождение). Если значение отсутствует, header(name) вернет null. Чтобы прочитать все значения заголовка в виде списка, используйте headers(name).</p><p>Для установки целевого URL-адреса запроса используется метод <b>url()</b>. По завершению настройки запроса используется метод <b>build()</b>, который возвращает объект Request.</p><h4>Отправка запроса</h4><p><b>newCall </b>— метод класса OkHttpClient, который подготавливает запрос к выполнению в будущем. Принимает объект Request и возвращает объект Call.</p><p>Класс <b>Call </b>(вызов) — это запрос, который был подготовлен к выполнению. Вызов может быть отменен. Поскольку экземпляр класса представляет одну пару запрос/ответ, он не может быть выполнен дважды. Для выполнения запроса существуют два метода:</p><ul><li>execute() — при синхронном вызове. Метод незамедлительно выполняет запрос и блокирует поток до тех пор, пока ответ не будет доступен для обработки или пока не возникнет ошибка.</li><li>enqueue() — при асинхронном вызове. Метод назначает запрос на выполнение в определенный момент в будущем. Диспетчер определяет, когда будет выполнен запрос: обычно сразу же, если в данный момент не выполняются несколько других запросов. Позже клиент получает объект responseCallback либо с HTTP-ответом, либо с исключением в случае возникновения ошибки.</li></ul><h4>Чтение ответа</h4><p>Класс <a href="https://square.github.io/okhttp/4.x/okhttp/okhttp3/-response/">Response </a>представляет HTTP-ответ. Тело ответа — свойство экземпляра класса, которое может быть использовано только один раз и затем закрыто. Все остальные свойства неизменяемы.</p><p>Прежде чем как-либо использовать тело ответа, необходимо проверить, был ли запрос к серверу успешен. Для этого существует метод <b>isSuccessful() </b>вышеупомянутого класса. Метод проверяет код состояния (status code) HTTP-ответа и возвращает значение true, если код находится в диапазоне 200-300. Если код находится за пределами этого диапазона, он возвращает значение false, указывающее, что запрос не был успешным.</p><p>Неуспешный запрос означает, что возникли проблемы на стороне клиента или сервера. Например, запрос был неправильно составлен, на сервере произошла ошибка или сервер некорректно обработал запрос. Если не проверять код состояния, то в конечном счёте можно работать с ответом, который не содержит ожидаемых данных.</p><p>Для получения тела ответа используется метод <b>body()</b> класса Response, который возвращает экземпляр класса ResponseBody.</p><p><a href="https://square.github.io/okhttp/4.x/okhttp/okhttp3/-response-body/">ResponseBody </a>— одноразовый поток от сервера к клиенту, содержащий тело ответа в виде необработанных байтов. Каждое тело ответа поддерживается активным подключением к веб-серверу.</p><p>Класс ResponseBody поддерживает потоковую передачу очень больших ответов. Например, его можно использовать для чтения ответа, размер которого превышает всю память, выделенную текущему процессу. Можно даже передавать в потоковом режиме ответ, объем которого превышает общий объем памяти на текущем устройстве, что является обычным требованием для стриминговых видео-приложений.</p><p>Класс не загружает весь ответ в память, поэтому тело ответа может быть считано только один раз. Для этого существует несколько методов:</p><ul><li>bytes() и string() — считывают весь текст ответа в память, а затем возвращают его в виде массива байтов или строки соответственно. Методы следует использовать только для небольших ответов. При считывании больших ответов будет вызвана ошибка OutOfMemoryError.</li><li>source, byteStream, charStream — предназначены для потокового чтения ответа. Метод source возвращает объект BufferedSource, позволяющий читать тело ответа в виде потока байтов. byteStream работает аналогично, но возвращает объект InputStream. charStream — возвращает объект Reader, который позволяет читать тело ответа в виде потока символов.</li></ul><p>Если использовать body() без упомянутых методов, то будет получен сам объект ResponseBody, с которым ничего особо не поделаешь.</p><h2>Простой GET-запрос (синхронный/асинхронный)</h2><p>Перед использованием библиотеки нужно добавить соответствующую зависимость в Gradle:</p><p>Номер последней версии можно посмотреть на <a href="https://search.maven.org/artifact/com.squareup.okhttp3/okhttp/4.10.0/jar">Maven Central</a>.</p><p>Синхронный запрос (Java):</p><p>Синхронный запрос (Kotlin):</p><p>В то время как в Java используются методы объектов, в Kotlin иногда используются их свойства. Например, свойство body объекта Response.</p><p>Каждое тело ответа поддерживается ограниченным ресурсом. Поэтому после использования оно должно быть закрыто. Закрытие ресурса освобождает все системные средства, которые были выделены ресурсу, и делает его доступным для сбора мусора (garbage collection). Если не закрыть тело ответа, произойдет утечка ресурсов, что в конечном итоге может привести к замедлению или крашу приложения.</p><p>Для закрытия ресурса можно использовать метод close(), но предпочтительнее использовать блок try-with-resources (Java) и метод use (Kotlin). Обе конструкции выполняют блок кода относительно заданного ресурса, а затем корректно закрывают его, независимо от того, вызвано исключение или нет.</p><p>Асинхронный запрос (Java):</p><p>Асинхронный запрос (Kotlin):</p><p>Асинхронный запрос выполняется в потоке Worker. Когда ответ доступен для чтения выполняется обратный вызов (сallback). Этот вызов выполнится после того, как будут готовы заголовки ответа. Чтение тела ответа все еще может блокировать поток. OkHttp в настоящее время не предлагает асинхронных API для получения тела ответа по частям.</p><p>Callback имеет два абстрактных метода:</p><ul><li>onResponse — вызывается, когда HTTP-ответ был успешно получен от удаленного сервера.</li><li>onFailure — вызывается, когда запрос не может быть выполнен из-за проблем с подключением, тайм-аута или при его отмене. Поскольку в сети может произойти сбой во время соединения с сервером, возможен случай, когда удаленный сервер успевает принять запрос до сбоя.</li></ul><h2>Сериализация/десериализация</h2><p>В данном пункте кратко рассмотрена сериализация и десериализация объектов (их преобразование в определённую последовательность байтов, которую можно передать по сети, и наоборот).</p><p>Для того, чтобы преобразовать объект в строку JSON или наоборот можно воспользоваться библиотеками Gson и/или Moshi.</p><p>Вкратце, если вам нужна проста использования и широкий набор функций, то выбираете Gson. Если нужна производительность и эффективное использование памяти, то лучшим выбором будет Moshi.</p><p>Рассмотрим пример сериализации с помощью Moshi (Java).</p><p>То же самое в Kotlin:</p><p>Для сериализации необходимо создать объект Moshi, адаптер и передать ему тип сериализуемого объекта. В данном случае это тип Class.</p><p>Если требуется сериализовать более сложный объект, например коллекцию, то тип можно передать двумя способами.</p><p>1) С помощью метода Types.newParameterizedType(), который создает новый параметризованный тип.</p><p>2) С помощью класса TypeToken библиотеки Gson. Класс используется для передачи информации о типах во время выполнения программы. Конструктор класса возвращает представленный класс из заданного типа.</p><p>Разница способов состоит в том, что TypeToken более типобезопасен (typesafe), а Types.newParameterizedType более эффективен.</p><p>Десериализация осуществляется аналогичным образом.</p><p>При сериализации/десериализации Moshi может вызывать разного рода исключения, к примеру если десериалируемая строка не является строкой JSON или если строка не соответствует объекту, в который её пытаются преобразовать.</p><p>Если серверная и клиентская часть настроены правильно, то такого не должно происходить. Но всё же рекомендуется оборачивать операции Moshi в блок try-catch.</p><h2>Простой POST-запрос</h2><p>Чтобы сделать POST-запрос, используется метод post() класса Request.Builder. Метод принимает RequestBody, который он добавляет к запросу.</p><p>POST-запрос в Java:</p><p>POST-запрос в Kotlin:</p><p>Объект MediaType необходим для описания типа содержимого тела запроса или ответа. Обычно он используется для установки заголовка “Content-Type” в HTTP-запросе.</p><p>Чтобы получить объект <a href="https://square.github.io/okhttp/3.x/okhttp/index.html?okhttp3/MediaType.html">MediaType </a>можно использовать один из статических методов одноименного класса:</p><ul><li>MediaType.parse(String) — создает новый экземпляр MediaType с указанным типом содержимого и кодировкой. Функция возвращает медиатип для строки, или null, если строка не является правильно сформированным медиатипом.</li><li>MediaType.get(String) — работает аналогично MediaType.parse, но если строка сформирована неправильно, то вызывает исключение IllegalArgumentException.</li></ul><p>В Kotlin используется метод <b>toMediaType()</b> объекта String. Метод является аналогом MediaType.get(String).</p><p><a href="https://square.github.io/okhttp/3.x/okhttp/okhttp3/RequestBody.html">RequestBody </a>— класс, представляющий собой тело запроса. Экземпляр класса создаётся с помощью метода create.</p><p><b>RequestBody.create(MediaType, String)</b> создает тело запроса с указанным содержимым и его типом. Метод имеет несколько реализаций. Содержимое можно передать в виде массива байтов, файла, строки или объекта okio.ByteString. Тип содержимого всегда указывается с помощью объекта MediaType. Этот объект также устанавливает заголовку “Content-type” соответствующее значение, поэтому вручную устанавливать этот заголовок не нужно.</p><p>Аналогом RequestBody.create(MediaType, String) в Kotlin является метод <b>toRequestBody(MediaType?)</b> объекта String.</p><h2>Особенности работы с HTTPS</h2><p>OkHttp пытается балансировать между двумя задачами:</p><ul><li>Подключение к максимально возможному количеству хостов. Сюда входят как современные хосты, на которых используются последние версии boringssl, так и немного устаревшие хосты, на которых используются старые версии OpenSSL.</li><li>Безопасность соединения. Сюда входит проверка удаленного веб-сервера с помощью сертификатов и конфиденциальность данных, передаваемых с помощью надежных шифров.</li></ul><p>При согласовании соединения с HTTPS-сервером OkHttp должен знать, какие предлагать версии TLS и наборы шифров. Для клиента, который хочет максимизировать возможность соединения с различными серверами, это будут устаревшие версии TLS и слабые по конструкции наборы шифров. Для клиента, который хочет максимизировать безопасность, это будут только последняя версия TLS и самые сильные наборы шифров.</p><p>Конкретные решения по безопасности и соединению реализуются с помощью ConnectionSpec. OkHttp включает четыре встроенных типа соединений:</p><ul><li>RESTRICTED_TLS – безопасная конфигурация, предназначенная для удовлетворения более строгих требований по соответствию.</li><li>MODERN_TLS – безопасная конфигурация, позволяющая подключаться к современным HTTPS-серверам.</li><li>COMPATIBLE_TLS – безопасная конфигурация, которая подключается к безопасным, но менее современным серверам HTTPS.</li><li>CLEARTEXT – небезопасная конфигурация, которая используется для URL-адресов http://.</li></ul><p>По умолчанию OkHttp будет пытаться установить соединение MODERN_TLS. Если соединение MODERN_TLS не удастся, okhttp3 переключится на другой тип соединения. Точный механизм отката зависит от конкретной реализации okhttp3 и конфигурации, установленной разработчиками.</p><p>Настроить конфигурацию можно следующим образом:</p><p>В <a href="https://square.github.io/okhttp/features/https/">официальной документации</a> можно найти дополнительные способы работы с HTTPS, такие как создание собственной спецификации подключения, закрепление сертификата и настройка доверенных сертификатов.</p><h2>Аутентификация на сервере</h2><p>Аутентификацию на сервере можно реализовать двумя способами.</p><p>1) Вручную добавить заголовок аутентификации. Полезно в случае, если нужна аутентификация только для одного запроса. Для того, чтобы добавлять заголовок ко всем запросам клиента, можно создать перехватчик. Способ полезен, если у вас статический ключ API или токен, который нужно отправлять с каждым запросом.</p><p>2) Использовать интерфейс Authenticator — полезно, когда необходимо динамически аутентифицироваться или нужна дополнительная настройка процесса аутентификации.</p><p>Интерфейс позволяет выполнить либо предварительную аутентификацию перед подключением к серверу, либо реактивную аутентификацию после получения ответа от веб-сервера или прокси-сервера.</p><p>Рассмотрим пример реактивной аутентификации. В таком случае, если код состояния ответа равен 401 (Unauthorized), OkHttp посылает повторный запрос, включающий заголовок “Authorization”.</p><p>При этом важно сделать проверку, была ли в первоначальном запросе попытка аутентификации. Если да, то, скорее всего, дальнейшие попытки будут бесполезны, и аутентификатор должен отказаться от них.</p><p>Здесь метод authenticator с помощью лямбда-функции устанавливает экземпляр интерфейса Authenticator, который предоставляет механизм для проверки ответа от сервера и возвращает запрос, включающий в себя учетные данные клиента. Метод Credentials.basic используется для кодирования имени пользователя и пароля при базовой аутентификации.</p><h2>Использование вместе с ViewModel</h2><p>Простой асинхронный запрос в ViewModel можно сделать следующим образом.</p><p>Метод <b>postValue </b>передаёт задачу по установке значения главному потоку. Если попытаться присвоить значение напрямую, то будет вызвано исключение java.lang.IllegalStateException: Cannot invoke setValue on a background thread.</p><p>Необходимо делать именно асинхронный запрос, чтобы не блокировать поток интерфейса и чтобы приложение оставалось отзывчивым. Либо можно самостоятельно настроить синхронный вызов в другом потоке.</p><p>Начиная с SDK 10 при попытке синхронного вызова в главном потоке будет вызвано исключение android.os.NetworkOnMainThreadException.</p><p>Чтобы сделать запрос в отдельном api-файле и передать ответ переменной из ViewModel можно воспользоваться механизмом callback.</p><p>В файле SomeApiService.kt находится интерфейс RequestCallback, класс SomeApiService с методом makeRequest, который делает запрос к серверу, и объект SomeApi, через который будет осуществляться доступ к экземпляру класса.</p><p>В MainViewModel.kt функция getResponseFromApi реализует интерфейс RequestCallback и передает его в качестве параметра методу makeRequest().</p><p>Представленный код можно обернуть во viewModelScope.launch {…}, чтобы запрос был отменён при очистке (разрушении) MainViewModel.</p><h2>Заключение</h2><p>OkHttp — гибкая библиотека, выступающая в роли HTTP-клиента.</p><p>В отличии Retrofit настраивать клиент, писать запросы и обрабатывать ответы необходимо вручную. Это одновременно и преимущество и недостаток OkHttp. Недостаток заключается в необходимости писать много шаблонного кода. Преимущество — возможность кастомизировать соединение.</p><p>Из-за слабой кастомизируемости в некоторых случаях Retrofit может не подойти, и без OkHttp не обойтись. Также благодаря кастомизации OkHttp можно повысить производительность и уменьшить использование памяти.</p><p>Полезные ресурсы: <a href="https://square.github.io/okhttp/4.x/okhttp/okhttp3/-authenticator/">Подробнее про Authenticator</a>; <a href="https://square.github.io/okhttp/recipes/#asynchronous-get-kt-java">Различные примеры использования библиотеки</a>; <a href="https://square.github.io/okhttp/features/interceptors/">Перехватчики (Interceptors)</a>.</p>]]></content:encoded>
    </item>
  </channel>
</rss>