<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Очередной дилетант</title><subtitle>Автор курса English for IT &amp; Computer Science</subtitle><author><name>Очередной дилетант</name></author><id>https://teletype.in/atom/nerepetitor</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/nerepetitor?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/nerepetitor?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-16T16:13:51.154Z</updated><entry><id>nerepetitor:composeBuildError</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/composeBuildError?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Starting in Kotlin 2.0, the Compose Compiler Gradle plugin is required</title><published>2026-03-17T09:32:33.548Z</published><updated>2026-03-17T09:32:33.548Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/8d/09/8d09e3a8-558f-4b34-bea5-80b66ab047db.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/5e/fe/5efef13e-c19f-4c02-a352-5aafd8e4676f.png&quot;&gt;</summary><content type="html">
  &lt;p id=&quot;d2FH&quot;&gt;Если сборка проекта Android завершилась следующим сообщением об ошибке:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;86Na&quot;&gt;&lt;code&gt;Starting in Kotlin 2.0, the Compose Compiler Gradle plugin is required&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;gexA&quot;&gt;Это означает, что вам нужно подключить плагин &lt;strong&gt;Compose Compiler&lt;/strong&gt;. С момента выхода Kotlin 2.0 Compose Compiler поставляется вместе с Kotlin и должен быть добавлен в проект как плагин.&lt;/p&gt;
  &lt;p id=&quot;GYwL&quot;&gt;Убедитесь, что в каталоге &lt;strong&gt;libs.versions.toml&lt;/strong&gt; &lt;code&gt;[plugins]&lt;/code&gt; у вас есть зависимость &lt;code&gt;org.jetbrains.kotlin.plugin.compose&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;FFw0&quot; data-lang=&quot;kotlin&quot;&gt;kotlin-compose = { id = &amp;quot;org.jetbrains.kotlin.plugin.compose&amp;quot;, version.ref = &amp;quot;kotlin&amp;quot; }&lt;/pre&gt;
  &lt;p id=&quot;LCQ4&quot;&gt;Версия плагина должна совпадать с версией Kotlin.&lt;/p&gt;
  &lt;p id=&quot;6fJ9&quot;&gt;Добавьте плагин на уровне проекта(&lt;strong&gt;build.gradle.kts&lt;/strong&gt;):&lt;/p&gt;
  &lt;pre id=&quot;734g&quot; data-lang=&quot;kotlin&quot;&gt;plugins {
    alias (libs.plugins.kotlin.compose) apply false
}&lt;/pre&gt;
  &lt;p id=&quot;jCUK&quot;&gt;и на уровне модуля (&lt;strong&gt;build.gradle.kts&lt;/strong&gt;):&lt;/p&gt;
  &lt;pre id=&quot;EeCF&quot; data-lang=&quot;kotlin&quot;&gt;plugins {
    alias(libs.plugins.kotlin.compose)
}&lt;/pre&gt;
  &lt;p id=&quot;1EgW&quot;&gt;Так же убедитесь, что на уровне модуля включена поддержка Jetpack Compose:&lt;/p&gt;
  &lt;pre id=&quot;oN0q&quot; data-lang=&quot;kotlin&quot;&gt;android {
    buildFeatures {
        compose = true
    }
}&lt;/pre&gt;
  &lt;p id=&quot;Kipq&quot;&gt;Синхронизируем проект, нажав на &lt;strong&gt;Sync now&lt;/strong&gt; вверху (или воспользовавшись сочетанием &lt;strong&gt;Ctrl&lt;/strong&gt; + &lt;strong&gt;Shift&lt;/strong&gt; + &lt;strong&gt;O&lt;/strong&gt;).&lt;/p&gt;
  &lt;figure id=&quot;7Wqf&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/29/7c/297c3efd-4d36-4dfa-bb7b-6da857efba1f.png&quot; width=&quot;1713&quot; /&gt;
    &lt;figcaption&gt;Gradle сообщает, что в файлах произошли изменения&lt;/figcaption&gt;
  &lt;/figure&gt;

</content></entry><entry><id>nerepetitor:passwordVisibility</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/passwordVisibility?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Скрытие пароля в Android (Jetpack Compose)</title><published>2026-02-24T07:36:29.073Z</published><updated>2026-02-24T07:36:29.073Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/4b/8c/4b8c942a-947c-4472-b589-94ea8a3a4332.png"></media:thumbnail><category term="android" label="Android"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a2/d6/a2d6b62a-9e9e-486f-bdc1-3e11822f9e60.png&quot;&gt;Дайте пользователям возможность показать или скрыть пароль.</summary><content type="html">
  &lt;p id=&quot;5azb&quot;&gt;Дайте пользователям возможность показать или скрыть пароль.&lt;/p&gt;
  &lt;p id=&quot;u32O&quot;&gt;Реализовать это в &lt;strong&gt;Jetpack Compose&lt;/strong&gt; можно при помощи &lt;code&gt;trailingIcon&lt;/code&gt;. Это иконка в конце поля ввода, которую можно сделать кликабельной. &lt;/p&gt;
  &lt;figure id=&quot;fgmN&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e1/86/e186a98d-da34-4952-ac7a-428cf0e36ab4.png&quot; width=&quot;567&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rs6c&quot;&gt;Объявим переменную &lt;code&gt;passwordVisible&lt;/code&gt;. Она будет принимать значения &lt;code&gt;true&lt;/code&gt; или &lt;code&gt;false&lt;/code&gt; в зависимости от того, хочет ли пользователь видеть пароль.&lt;/p&gt;
  &lt;p id=&quot;ZsZp&quot;&gt;Чтобы сохранить состояние при рекомпозиции и смене конфигурации (например, при повороте устройства), будем использовать &lt;code&gt;rememberSaveable&lt;/code&gt; (эта функция хранит значение в &lt;code&gt;Bundle&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;z3pb&quot;&gt;Инициализируем &lt;code&gt;passwordVisible&lt;/code&gt; через &lt;code&gt;mutableStateOf()&lt;/code&gt; , используя делегат &lt;code&gt;by&lt;/code&gt;. Пусть изначально пароль будет скрыт — в &lt;code&gt;mutableStateOf()&lt;/code&gt; в качестве параметра передаём значение &lt;code&gt;false&lt;/code&gt;. &lt;/p&gt;
  &lt;pre id=&quot;e77P&quot; data-lang=&quot;kotlin&quot;&gt;var passwordVisible by rememberSaveable { mutableStateOf(false) }&lt;/pre&gt;
  &lt;p id=&quot;N9TJ&quot;&gt;Для работы с делегатом &lt;code&gt;by&lt;/code&gt; импортируем следующие функции:&lt;/p&gt;
  &lt;pre id=&quot;57gu&quot; data-lang=&quot;kotlin&quot;&gt;import androidx.compose.runtime.setValue
import androidx.compose.runtime.getValue&lt;/pre&gt;
  &lt;p id=&quot;MLTC&quot;&gt;Создадим поле ввода. В &lt;code&gt;OutlinedTextField&lt;/code&gt; за отображение текста отвечает параметр &lt;code&gt;visualTransformation&lt;/code&gt;. &lt;/p&gt;
  &lt;p id=&quot;ykwR&quot;&gt;В коде ниже если &lt;code&gt;passwordVisible == true&lt;/code&gt;, то применяется &lt;code&gt;VisualTransformation.None&lt;/code&gt; (пароль виден), если &lt;code&gt;false&lt;/code&gt; — применяется &lt;code&gt;PasswordVisualTransformation&lt;/code&gt; (пароль в виде точек •••••••).&lt;/p&gt;
  &lt;pre id=&quot;X8Lm&quot; data-lang=&quot;kotlin&quot;&gt;visualTransformation = if (passwordVisible) VisualTransformation.None
else PasswordVisualTransformation()&lt;/pre&gt;
  &lt;p id=&quot;pqos&quot;&gt;В ресурсы проекта добавим два значка (&lt;code&gt;ic_visibility_off&lt;/code&gt; и &lt;code&gt;ic_visibility_on&lt;/code&gt;) для иконки. Передадим в &lt;code&gt;trailingIcon&lt;/code&gt; лямбда-выражение:&lt;/p&gt;
  &lt;pre id=&quot;OT4m&quot; data-lang=&quot;kotlin&quot;&gt;trailingIcon = {
    IconButton(
        onClick = { passwordVisible = !passwordVisible }
    ) {}
}&lt;/pre&gt;
  &lt;p id=&quot;qYtH&quot;&gt;&lt;code&gt;IconButton&lt;/code&gt; содержит обработчик события:&lt;/p&gt;
  &lt;pre id=&quot;v5Qg&quot; data-lang=&quot;kotlin&quot;&gt;onClick = { passwordVisible = !passwordVisible }&lt;/pre&gt;
  &lt;p id=&quot;zURR&quot;&gt;При нажатии состояние &lt;code&gt;passwordVisible&lt;/code&gt; будет инвертироваться.&lt;/p&gt;
  &lt;p id=&quot;WI6i&quot;&gt;Ресурс для &lt;code&gt;Icon&lt;/code&gt; выбирается динамически в зависимости от значения в переменной &lt;code&gt;passwordVisible&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;jxgd&quot; data-lang=&quot;kotlin&quot;&gt;@Composable
fun PasswordField(
    value: String,
    onValueChange: (String) -&amp;gt; Unit
) {
    var passwordVisible by rememberSaveable { mutableStateOf(false) }

    OutlinedTextField(
        value = value,
        onValueChange = onValueChange,
        label = { Text(&amp;quot;Password&amp;quot;) },

        visualTransformation = if (passwordVisible) 
        VisualTransformation.None
        else PasswordVisualTransformation(),

        trailingIcon = {
            IconButton(
                onClick = { passwordVisible = !passwordVisible }
            ) {
                Icon(
                    painter = painterResource(
                        if (passwordVisible) R.drawable.ic_visibility_on
                        else R.drawable.ic_visibility_off
                    ),
                    contentDescription = if (passwordVisible) 
                    &amp;quot;Hide password&amp;quot; else &amp;quot;Show password&amp;quot;
                )
            }
        }
    )
}&lt;/pre&gt;

</content></entry><entry><id>nerepetitor:iconDesign</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/iconDesign?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Дизайн иконки приложения</title><published>2026-02-20T06:50:18.736Z</published><updated>2026-02-20T07:09:54.388Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/52/ae/52aef934-5f13-4889-868c-9695b7fa03ff.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/75/9e/759eed88-d399-4975-905a-147a1bdf9da0.png&quot;&gt;Создание иконки в Figma</summary><content type="html">
  &lt;p id=&quot;toPs&quot;&gt;Иконка должна доносить до пользователя идею приложения. Вписываться в интерфейс, но при этом быть уникальной.&lt;/p&gt;
  &lt;p id=&quot;HJAE&quot;&gt;Минимализм всё ещё в тренде, поэтому не перегружайте иконку лишними деталями.&lt;/p&gt;
  &lt;p id=&quot;ZfG8&quot;&gt;Мелкий текст тяжело читать, и его использование создаст проблемы в случае локализации, если, к примеру, приложение выйдет на китайский рынок. При этом вы можете использовать первую букву из названия компании, как это делают Tumblr или Pinterest:&lt;/p&gt;
  &lt;figure id=&quot;TVyY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/99/ad/99ad6442-fe3a-4453-8839-6e2cac82d9a6.jpeg&quot; width=&quot;1303&quot; /&gt;
    &lt;figcaption&gt;Логотипы Tumblr и Pinterest&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QG7W&quot;&gt;Не используйте фотографии! Использование фотографий в иконках приложений давно стало дурным тоном. Чтобы изображение хорошо смотрелось на любых устройствах, оно должно быть в формате SVG.&lt;/p&gt;
  &lt;h2 id=&quot;OS7x&quot;&gt;Создание иконки в Figma&lt;/h2&gt;
  &lt;p id=&quot;F6GX&quot;&gt;На главной странице выберите &lt;strong&gt;Design&lt;/strong&gt;.&lt;/p&gt;
  &lt;figure id=&quot;0aFL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/27/03/2703e23c-1d68-4fa9-861c-703cfe1cf1aa.png&quot; width=&quot;133&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;DM53&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3a/80/3a80ac85-91c1-4afd-8687-a878f9f265fd.png&quot; width=&quot;1845&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8EQa&quot;&gt;Увеличьте масштаб до 400% (можете воспользоваться сочетанием &lt;strong&gt;Ctrl +&lt;/strong&gt;) и нарисуйте квадрат 110*110, нажав клавишу &lt;strong&gt;R &lt;/strong&gt;и удерживая&lt;strong&gt; Shift&lt;/strong&gt;. &lt;/p&gt;
  &lt;figure id=&quot;YXrm&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1c/0a/1c0afdc0-987b-4110-912f-9e7df628c81c.png&quot; width=&quot;921&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ymLK&quot;&gt;Зафиксируйте соотношение сторон (&lt;strong&gt;Lock aspect ratio&lt;/strong&gt;, кнопка справа).&lt;/p&gt;
  &lt;figure id=&quot;iIwc&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/06/7b/067bf363-9875-4dc7-95e8-bb23d985a4fb.png&quot; width=&quot;283&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;jUr2&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ee/ef/eeef1bc2-83f8-43ee-9204-19327ba5738a.png&quot; width=&quot;291&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;815l&quot;&gt;В слоях (&lt;strong&gt;Layers&lt;/strong&gt;) вы увидите Rectangle 1. Переименуйте его в &lt;code&gt;ic_launcher_background&lt;/code&gt; и зафиксируйте (&lt;strong&gt;Toggle layer locking&lt;/strong&gt;).&lt;/p&gt;
  &lt;figure id=&quot;jJ9f&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/19/54/1954d328-645e-456d-b160-a8f2ba8881d3.png&quot; width=&quot;291&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;7wGf&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/59/48/5948b3c5-88e9-481d-846e-f8182d7d2649.png&quot; width=&quot;292&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KzcW&quot;&gt;Задайте цвет фона (&lt;strong&gt;Fill&lt;/strong&gt;). В нашем случае задний фон будет однотонным. Но вы можете использовать и градиент. &lt;/p&gt;
  &lt;figure id=&quot;JY7s&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9f/60/9f60d8d9-f367-4dd7-b3db-eee4ae1d6fbb.png&quot; width=&quot;1217&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;UWC5&quot;&gt;Добавьте логотип на передний план.&lt;/p&gt;
  &lt;p id=&quot;buOU&quot;&gt;Если у вас нет готового логотипа, вы можете воспользоваться Resources (нажмите комбинацию клавиш &lt;strong&gt;Shift&lt;/strong&gt; + &lt;strong&gt;I&lt;/strong&gt;). Здесь можно найти простые SVG-иконки.&lt;/p&gt;
  &lt;figure id=&quot;4GL8&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ec/f0/ecf0a503-bbf4-4bdf-a54f-c295aa3e1d56.png&quot; width=&quot;1118&quot; /&gt;
    &lt;figcaption&gt;Resources&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;10sU&quot;&gt;Мы же для примера будем использовать векторное изображение единорога. В слоях дайте ему название &lt;code&gt;ic_launcher_foreground&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;dpZR&quot;&gt;Выделите &lt;code&gt;ic_launcher_foreground&lt;/code&gt; и &lt;code&gt;ic_launcher_background&lt;/code&gt; одновременно, удерживая &lt;strong&gt;Shift&lt;/strong&gt;, кликните правой кнопкой мыши и создайте фрейм (или нажмите &lt;strong&gt;Ctrl&lt;/strong&gt; + &lt;strong&gt;Alt&lt;/strong&gt; + &lt;strong&gt;G&lt;/strong&gt;). Можете назвать его &lt;code&gt;Launcher&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;qXMj&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/c0/adc0c51b-f2d9-4d72-8565-f84118f9add0.png&quot; width=&quot;479&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;x9Tx&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/42/da/42da146e-3158-4a1e-bdae-a8f462ec3879.png&quot; width=&quot;293&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Txjl&quot;&gt;Поместим единорога в центр фрейма. &lt;/p&gt;
  &lt;figure id=&quot;j6ba&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d1/d7/d1d7ec14-ecb9-4057-b889-8caae7ce12b9.png&quot; width=&quot;798&quot; /&gt;
    &lt;figcaption&gt;Выравниваем по горизонатли и по вертикали.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;evnV&quot;&gt;Проверьте, как будет смотреться иконка на разных устройствах Android с помощью этого &lt;a href=&quot;https://www.figma.com/community/file/778486426750404931&quot; target=&quot;_blank&quot;&gt;шаблона&lt;/a&gt;.&lt;/p&gt;
  &lt;figure id=&quot;embE&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7b/95/7b9579cc-0bb0-46bd-8b24-d5050d331ee2.png&quot; width=&quot;1042&quot; /&gt;
    &lt;figcaption&gt;Единорог не должен выходить за рамки круга.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9anz&quot;&gt;Наконец, экспортируйте иконку в формате SVG. &lt;/p&gt;
  &lt;figure id=&quot;8z5O&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/af/4e/af4eedab-132c-4cad-b752-3d17d566e6d2.png&quot; width=&quot;289&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;R27Z&quot;&gt;Если ваш фон однотонный, экспортировать его для &lt;strong&gt;Android Studio &lt;/strong&gt;не нужно, просто скопируйте шестнадцатеричный код цвета (в нашем случае это &lt;code&gt;#B4E1FF&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;wn0H&quot;&gt;О том, как поменять иконку вашего Android-приложения, в &lt;a href=&quot;https://teletype.in/@nerepetitor/androidAppIcon&quot; target=&quot;_blank&quot;&gt;другой статье&lt;/a&gt;.&lt;/p&gt;

</content></entry><entry><id>nerepetitor:intellij</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/intellij?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Установка IntelliJ IDEA в Linux</title><published>2026-02-03T08:16:55.467Z</published><updated>2026-02-03T08:16:55.467Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/58/96/5896b3d6-83fc-48e6-8fbd-fc00a6758609.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/d1/37/d1378f3b-17c2-467f-827c-7f544712867b.png&quot;&gt;Перейдите на официальный сайт и скачайте архив.</summary><content type="html">
  &lt;p id=&quot;qDoV&quot;&gt;Перейдите на &lt;a href=&quot;https://www.jetbrains.com/idea/download/&quot; target=&quot;_blank&quot;&gt;официальный сайт&lt;/a&gt; и скачайте архив. &lt;/p&gt;
  &lt;figure id=&quot;yxHR&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/df/6a/df6af18a-c362-4bbc-b737-327d0a95f609.png&quot; width=&quot;1824&quot; /&gt;
    &lt;figcaption&gt;Официальный сайт JetBrains&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;x0bW&quot;&gt;В папке Downloads проверьте наличие файла с расширением &lt;code&gt;.tar.gz&lt;/code&gt; (например, &lt;code&gt;idea-2025.3.1.1.tar.gz&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;szCw&quot;&gt;Распакуйте архив (щелчок правой кнопкой мыши, &lt;strong&gt;Извлечь&lt;/strong&gt;). Теперь откройте директорию (в данном примере это &lt;code&gt;idea-2025.3.1.1&lt;/code&gt;) в терминале.&lt;/p&gt;
  &lt;p id=&quot;aDVi&quot;&gt;Командой &lt;code&gt;ls&lt;/code&gt; проверьте содержимое. В нашем случае внутри находится директория &lt;code&gt;idea-IU-253.29346.240&lt;/code&gt;. Переходим в неё командой &lt;code&gt;cd&lt;/code&gt;:&lt;/p&gt;
  &lt;p id=&quot;DBdY&quot;&gt;&lt;code&gt;cd idea-IU-253.29346.240&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;qre0&quot;&gt;Снова смотрим содержимое. На этот раз видим множество файлов и директорий, но нас интересует папка &lt;code&gt;bin&lt;/code&gt; (от англ. &lt;em&gt;binary file&lt;/em&gt; —  бинарный, или двоичный файл), где находятся исполняемые файлы. Переходим в неё:&lt;/p&gt;
  &lt;p id=&quot;Q3HW&quot;&gt;&lt;code&gt;cd bin&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;IVbV&quot;&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;PjMy&quot;&gt;Нужный нам файл называется &lt;code&gt;idea.sh&lt;/code&gt;. Запускаем его следующей командой:&lt;/p&gt;
  &lt;p id=&quot;j32w&quot;&gt;&lt;code&gt;./idea.sh&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;0tpY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bf/64/bf64cbd8-4df6-49fd-9376-fed81242566a.png&quot; width=&quot;1389&quot; /&gt;
    &lt;figcaption&gt;В терминале&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;efN5&quot;&gt;Теперь, когда вы запустили IntelliJ, создайте проект (или откройте уже существующий). Самое время создать ярлык приложения. Для этого перейдите в  инструменты на верхней панели и нажмите на &lt;strong&gt;Создать ярлык&lt;/strong&gt; (&lt;strong&gt;Tools&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Create Desktop Entry...&lt;/strong&gt;).&lt;/p&gt;
  &lt;p id=&quot;QAZE&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;OPkp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7f/2f/7f2ffe3a-6d85-4058-b7c9-1a5bbab38ceb.png&quot; width=&quot;957&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;p35i&quot;&gt;Теперь у вас появится ярлык для запуска без использования терминала.&lt;/p&gt;

</content></entry><entry><id>nerepetitor:authenticationFailed</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/authenticationFailed?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Authentication failed...</title><published>2025-08-01T15:15:31.644Z</published><updated>2026-02-03T08:17:47.021Z</updated><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/89/cf/89cfb132-86b2-424b-b1f5-cc7ed0c3227c.png&quot;&gt;Вы работаете в IDE, делитесь проектом на GitHub, и всё в порядке. Но в какой-то момент вы вдруг сталкиваетесь с необходимостью пройти аутентификацию.</summary><content type="html">
  &lt;p id=&quot;DW4w&quot;&gt;Вы работаете в IDE, делитесь проектом на GitHub, и всё в порядке. Но в какой-то момент вы решаете запушить изменения на удалённый репозиторий через терминал и вдруг сталкиваетесь с необходимостью пройти аутентификацию: вас просят ввести имя пользователя и пароль. Вы вводите данные, нажимаете Enter, но почему-то возникает ошибка — войти не удалось.&lt;/p&gt;
  &lt;pre id=&quot;PSF4&quot; data-lang=&quot;git&quot;&gt;remote: No anonymous write access. 
fatal: Authenticaion failed for &amp;#x27;https://github.com/&amp;lt;ваш репозиторий&amp;gt;&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;Z5kb&quot;&gt;Но почему, если вы ввели правильный пароль?&lt;/p&gt;
  &lt;figure id=&quot;X1h4&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/89/cf/89cfb132-86b2-424b-b1f5-cc7ed0c3227c.png&quot; width=&quot;1114&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FvQQ&quot;&gt;На самом деле с 2021 года GitHub &lt;strong&gt;больше не поддерживает пароли&lt;/strong&gt; для &lt;code&gt;https://&lt;/code&gt;. Это означает, что войти по логину и паролю не получится. Нужно использовать &lt;strong&gt;Personal Access Token &lt;/strong&gt;или&lt;strong&gt; SSH.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;09e6&quot;&gt;О том, как использовать SSH-ключи, читайте &lt;a href=&quot;https://teletype.in/@nerepetitor/generateSSH&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;wDZt&quot;&gt;Но что, если вы уже сгенерировали ключ? Например, вы создали его для работы над прошлым проектом. В таком случае ключ у вас уже есть, и вы хотите использовать и в этот раз. &lt;/p&gt;
  &lt;p id=&quot;J39u&quot;&gt;Тогда вам нужно воспользоваться командой &lt;code&gt;git remote -v&lt;/code&gt;, чтобы увидеть подключённые удалённые репозитории, с которыми работает локальный проект. Если они начинаются с &lt;code&gt;https://&lt;/code&gt;, то вам нужно изменить URL.&lt;/p&gt;
  &lt;figure id=&quot;K40V&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f0/1f/f01ff584-cfa8-485c-bd68-1535bb2afa50.png&quot; width=&quot;1114&quot; /&gt;
    &lt;figcaption&gt;Аутентификация не сработала, потому что пароли по https:// больше не используются&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;o6vn&quot;&gt;Сделать это можно командой &lt;code&gt;git remote set-url origin git@github.com: username/repo.git&lt;/code&gt;, где &lt;em&gt;username&lt;/em&gt; — ваше имя на GitHub, а &lt;em&gt;repo&lt;/em&gt; — название удалённого репозитория.&lt;/p&gt;
  &lt;p id=&quot;OU3O&quot;&gt;Например, для пользователя &lt;em&gt;The-uncanny-valley&lt;/em&gt; и репозитория по адресу &lt;em&gt;https://github.com/The-uncanny-valley/CatChat&lt;/em&gt; это выглядит следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;Ds1G&quot; data-lang=&quot;git&quot;&gt;git remote set-url origin git@github.com:The-uncanny-valley/CatChat.git&lt;/pre&gt;
  &lt;p id=&quot;gcVs&quot;&gt;Вновь проверьте подключённые удалённые репозитории:&lt;/p&gt;
  &lt;pre id=&quot;Vvfd&quot; data-lang=&quot;git&quot;&gt;git remote -v&lt;/pre&gt;
  &lt;p id=&quot;F7jT&quot;&gt;Теперь вы должны увидеть нечто подобное:&lt;/p&gt;
  &lt;figure id=&quot;95zl&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8c/e3/8ce38cf2-c7e8-4092-b2be-fe6fa179838d.png&quot; width=&quot;1568&quot; /&gt;
    &lt;figcaption&gt;После изменения URL&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dXyI&quot;&gt;Если строка начинается с git@github.com, то всё прошло успешно. С этого момента для доступа к GitHub Git будет использовать &lt;strong&gt;SSH-ключ&lt;/strong&gt;, сохранённый на компьютере.&lt;/p&gt;
  &lt;p id=&quot;tRVp&quot;&gt;Вот и всё, теперь вы можете использовать &lt;code&gt;pull&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt; и другие команды git, требующие аутентификации. &lt;/p&gt;

</content></entry><entry><id>nerepetitor:androidAppIcon</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/androidAppIcon?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Меняем иконку Android-приложения</title><published>2025-07-16T19:17:16.416Z</published><updated>2026-02-20T06:57:57.693Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/ca/13/ca13e10d-5507-4ef2-9c07-c65fe4aa4890.png"></media:thumbnail><category term="android" label="Android"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/05/0a/050afa05-32c3-4e56-b365-d890f5521ae8.png&quot;&gt;Сперва нам понадобится, собственно, сама иконка.</summary><content type="html">
  &lt;p id=&quot;g2cI&quot;&gt;Сперва нам понадобится, собственно, сама иконка. Возьмите готовую или &lt;a href=&quot;https://teletype.in/@nerepetitor/iconDesign&quot; target=&quot;_blank&quot;&gt;создайте свою&lt;/a&gt;. Используйте векторную графику, чтобы изображение одинаково хорошо смотрелось на экранах с любым dpi.&lt;/p&gt;
  &lt;figure id=&quot;SZlA&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/73/ec/73ecf956-75ea-417d-b532-e14a48efb00d.png&quot; width=&quot;1130&quot; /&gt;
    &lt;figcaption&gt;Иконка, созданная в Figma&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VxnQ&quot;&gt;Обратите внимание, что на устройствах Android иконки выглядят по-разному.  Изначально Android не накладывал жёстких ограничений на форму иконок. Однако с API 26 (Android 8) появились так называемые &lt;a href=&quot;https://medium.com/@saturov/%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D0%B8%D0%BC%D1%81%D1%8F-%D1%81-android-adaptive-icons-743b7d706529&quot; target=&quot;_blank&quot;&gt;адаптивные иконки&lt;/a&gt;. Они немного ограничивают свободу дизайнеров, однако улучшают UI за счёт единой стилистики. &lt;/p&gt;
  &lt;figure id=&quot;U2Pf&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/05/0a/050afa05-32c3-4e56-b365-d890f5521ae8.png&quot; width=&quot;1231&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;r2v1&quot;&gt;Проверьте, как будет выглядеть ваша иконка на разных устройствах с помощью &lt;a href=&quot;https://www.figma.com/community/file/778486426750404931&quot; target=&quot;_blank&quot;&gt;шаблона&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;h5cR&quot;&gt;Адаптивные иконки должны состоять из двух слоёв: фона и переднего плана. Экспортируйте их отдельно в формате SVG (назовите их ic_launcher_foreground и ic_launcher_background). Если фон однотонный, то он нам не понадобится. &lt;/p&gt;
  &lt;figure id=&quot;zexD&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0a/e9/0ae9fecb-8a0a-4345-b8e7-bf68a30f77f0.png&quot; width=&quot;805&quot; /&gt;
    &lt;figcaption&gt;Перейдите в Export и выберете SVG&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;hf16&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;pNeK&quot;&gt;В Android Studio правой кнопкой мыши нажмите на директорию ресурсов &lt;strong&gt;res&lt;/strong&gt; и создайте новый &lt;strong&gt;Image Asset. &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;aMC3&quot;&gt;&lt;strong&gt;New &amp;gt; Image Asset&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;DBTX&quot;&gt;В появившемся окне Asset Studio оставьте значения по умолчанию: &lt;/p&gt;
  &lt;p id=&quot;eRrA&quot;&gt;&lt;strong&gt;Icon type:&lt;/strong&gt; Launcher Icons (Adaptive and Legacy)&lt;/p&gt;
  &lt;p id=&quot;FVYv&quot;&gt;&lt;strong&gt;Name:&lt;/strong&gt; ic_launcher.&lt;/p&gt;
  &lt;figure id=&quot;S95J&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0d/f2/0df224e7-d362-43a3-96bb-a87d9d96fccc.png&quot; width=&quot;1521&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;b1eH&quot;&gt;Во вкладке &lt;strong&gt;Foreground Layer &lt;/strong&gt;найдите&lt;strong&gt; Source Asset &lt;/strong&gt;и в поле &lt;strong&gt;Path &lt;/strong&gt;нажмите на значок папки. Найдите расположение файла &lt;code&gt;ic_launcher_foreground.svg&lt;/code&gt;. Нажмите ОК. Теперь вы можете изменить размер изображения, используя &lt;strong&gt;Resize&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;4mjq&quot;&gt;Для однотонного фона во вкладке &lt;strong&gt;Background Layer &lt;/strong&gt;в&lt;strong&gt; Asset Type &lt;/strong&gt;выберете&lt;strong&gt; Color  &lt;/strong&gt;вместо&lt;strong&gt; Image. &lt;/strong&gt;В&lt;strong&gt; Figma &lt;/strong&gt;скопируйте код цвета, например, B4E1FF. Вместо шестнадцатиричного цвета можно использовать RGB.&lt;/p&gt;
  &lt;figure id=&quot;oSrr&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b2/53/b253ebc6-254e-4479-8033-848b2a46a3c3.png&quot; width=&quot;1521&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NgQ9&quot;&gt;Нажмите Next и наконец Finish. Проверьте ресурсы проекта - в папке &lt;code&gt;drawable&lt;/code&gt; должны были появиться два файла: &lt;strong&gt;ic_launcher_background.xml&lt;/strong&gt; и&lt;strong&gt; ic_launcher_foreground.xml&lt;/strong&gt;. &lt;/p&gt;
  &lt;p id=&quot;R1yS&quot;&gt;В папке &lt;code&gt;mipmap&lt;/code&gt; Android Studio создаст следующие файлы:&lt;/p&gt;
  &lt;ul id=&quot;rPZJ&quot;&gt;
    &lt;li id=&quot;SS1Y&quot;&gt;&lt;code&gt;mipmap-mdpi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;LGKa&quot;&gt;&lt;code&gt;mipmap-hdpi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;x8jH&quot;&gt;&lt;code&gt;mipmap-xhdpi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;loSG&quot;&gt;&lt;code&gt;mipmap-xxhdpi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;N0ok&quot;&gt;&lt;code&gt;mipmap-xxxhdpi&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;MzDt&quot;&gt;Это папка для значков приложения, оптимизированных для отображения на разных экранах с разной плотностью. При установке приложения Android подбирает нужный ресурс автоматически. Проверьте, как выглядит изображения в разном разрешении.&lt;/p&gt;
  &lt;p id=&quot;CQwg&quot;&gt;Если изображения не появились, попробуйте в верхней панели перейдите в File &amp;gt; Sync Project with Gradle Files (или сочетание Ctrl + Shift + O). Это запустит процесс синхронизации проекта с конфигурацией Gradle и решит проблемы с отображением ресурсов.&lt;/p&gt;
  &lt;p id=&quot;hJYo&quot;&gt;Теперь запустите приложение. Иконка должна обновиться.&lt;/p&gt;
  &lt;figure id=&quot;vX1L&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a9/39/a939bf77-8126-451a-bfef-7c86656fe61a.png&quot; width=&quot;621&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>nerepetitor:addFont</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/addFont?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Шрифты для Android-приложений</title><published>2025-07-08T14:08:30.443Z</published><updated>2025-07-08T14:27:00.781Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/ec/14/ec146363-1b47-493d-897b-e4412c597dfb.png"></media:thumbnail><category term="android" label="Android"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/b6/66/b6666b32-fe77-49f3-85ea-a7a86aaa1c5b.png&quot;&gt;Google Fonts — это бесплатный веб-сервис от Google, предоставляющий коллекцию шрифтов с открытой лицензией.</summary><content type="html">
  &lt;figure id=&quot;lKtQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b6/66/b6666b32-fe77-49f3-85ea-a7a86aaa1c5b.png&quot; width=&quot;3841&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KPG0&quot;&gt;Сначала нам потребуется скачать сам шрифт. Воспользуйтесь Google Fonts — это бесплатный веб-сервис от Google, предоставляющий коллекцию шрифтов с открытой лицензией.&lt;/p&gt;
  &lt;p id=&quot;1Z6h&quot;&gt;Если вы уже присмотрели конкретный шрифт, скачайте его. Обязательно учитывайте, какой язык будет в вашем приложении. Может оказаться, что шрифт только для латинницы и криллицу не поддерживает. Проверьте, как будет отображаться нужный язык (Select preview text), после чего нажмите на кнопку &lt;strong&gt;Get font&lt;/strong&gt;.&lt;/p&gt;
  &lt;figure id=&quot;q00d&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3b/cb/3bcbc10f-8eda-457a-bf1b-1ff0be86fb00.png&quot; width=&quot;1830&quot; /&gt;
    &lt;figcaption&gt;В примере шрифт Just Another Hand&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;Qzut&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e7/d9/e7d9e115-898a-4398-88d5-653613cae4f7.png&quot; width=&quot;1808&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Sh2y&quot;&gt;Затем выберете &lt;strong&gt;Download all&lt;/strong&gt; (1), будет загружен zip-файл. Распакуйте архив и сохраните папку в удобное место. Внутри будет файл с расширением &lt;strong&gt;.ttf&lt;/strong&gt;.&lt;/p&gt;
  &lt;figure id=&quot;RhXR&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e9/ce/e9cecd37-9af6-4457-9293-fb3a4c5f6cb5.png&quot; width=&quot;1589&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2wXi&quot;&gt;В Android Studio перейдите в ресурсы (папка &lt;code&gt;res&lt;/code&gt;). Найдите папку &lt;strong&gt;font &lt;/strong&gt;или создайте её, если её пока нет: нажмите правой кнопкой мыши по &lt;code&gt;res&lt;/code&gt; &amp;gt; New &amp;gt; Android Resource Directory, в выпадающем списке &amp;quot;Resource type&amp;quot; выберете &lt;code&gt;font&lt;/code&gt; и нажите ОК.&lt;/p&gt;
  &lt;figure id=&quot;KJlt&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5c/d3/5cd3a2ea-26f5-4b83-8326-d4952d5615e5.png&quot; width=&quot;232&quot; /&gt;
    &lt;figcaption&gt;Ресурсы проекта&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jdYY&quot;&gt;Проверьте скачанные&lt;strong&gt; .ttf &lt;/strong&gt;файлы. В примере это &lt;code&gt;JustAnotherHand-Regular.ttf&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;tpJu&quot;&gt;В Android существует определённый стиль именования шрифтов: название должно быть на латинском, в нижнем регистре; пробелы, дефисы и специальные символы не допускаются. Замените их нижним подчёркиванием &lt;code&gt;_&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;PULL&quot;&gt;Поэтому файл нужно переименовать в &lt;code&gt;justanotherhand_regular&lt;/code&gt;. Теперь добавьте его в папку &lt;code&gt;font&lt;/code&gt; — сделать это можно простым перетаскиванием.&lt;/p&gt;
  &lt;figure id=&quot;N9lp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f7/17/f717a2c9-6a96-4f49-a981-0a06ead4b68d.png&quot; width=&quot;981&quot; /&gt;
    &lt;figcaption&gt;Когда вы перетащите файл в папку &lt;strong&gt;font&lt;/strong&gt;, появится следующее окно&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;xKTj&quot;&gt;В появившемся окне нажмите &lt;strong&gt;ОК&lt;/strong&gt;. &lt;/p&gt;
  &lt;p id=&quot;XpF7&quot;&gt;Теперь шрифт можно использовать. В коде XML выглядит это следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;REIv&quot; data-lang=&quot;xml&quot;&gt;&amp;lt;TextView
    ...
    android:fontFamily=&amp;quot;@font/justanotherhand_regular&amp;quot; /&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;wU2N&quot;&gt;Название шрифта точно должно точно совпадать с именем файла (без расширения).&lt;/p&gt;
  &lt;p id=&quot;oTD5&quot;&gt;Готово, теперь шрифт отображается в Preview.&lt;/p&gt;
  &lt;figure id=&quot;ToKJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/22/58/2258371f-8d39-41d7-a407-2383e5ff15eb.png&quot; width=&quot;910&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vKPx&quot;&gt;Теперь файл можно безопасно удалить с рабочего стола (или того места, куда вы его изначально скачивали), это никак не повлияет на работу приложения.&lt;/p&gt;

</content></entry><entry><id>nerepetitor:WhatsApp</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/WhatsApp?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Безопасен ли WhatsApp</title><published>2025-05-05T16:15:46.976Z</published><updated>2026-02-24T07:55:24.174Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/e7/09/e709c497-2ab4-4703-aedc-5969ea5464b4.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/de/6f/de6fad2b-f9a9-4d8b-81f5-ba8703be801c.png&quot;&gt;Сквозное шифрование не панацея</summary><content type="html">
  &lt;p id=&quot;ApaN&quot;&gt;Как и все популярные мессенджеры, &lt;strong&gt;WhatsApp&lt;/strong&gt; привязывается к номеру телефона. Операторы обязаны регистрировать абонентов по паспортным данным, поэтому установить личность владельца не составит труда. Однако узнать содержимое самих сообщений ни у спецслужб, ни у хакеров не получится без непосредственного доступа к устройству. Так ли это?&lt;/p&gt;
  &lt;h3 id=&quot;dNbN&quot;&gt;Сквозное шифрование (End-to-end encryption)&lt;/h3&gt;
  &lt;p id=&quot;UDD1&quot;&gt;WhatsApp использует Signal Protocol для обеспечения сквозного шифрования. Только отправитель и получатель могут прочитать сообщение. При каждом новом сообщении ключ обновляется, а старые удаляются. Хорошая новость в том, что мессенджер не хранит сообщения пользователей на своих серверах.&lt;/p&gt;
  &lt;h3 id=&quot;GJtP&quot;&gt;Метаданные&lt;/h3&gt;
  &lt;p id=&quot;qncE&quot;&gt;Однако &lt;strong&gt;WhatsApp&lt;/strong&gt; собирает всевозможную информацию — так называемые метаданные, такие как модель устройства, версия операционной системы, IP-адрес, контакты (список номеров) и активность. Например, &lt;strong&gt;Meta&lt;/strong&gt; знает, как часто вы переписываетесь с каждым из контактов.&lt;/p&gt;
  &lt;p id=&quot;NPYo&quot;&gt;При звонке на серверах фиксируются следующие данные:&lt;/p&gt;
  &lt;ul id=&quot;GFyy&quot;&gt;
    &lt;li id=&quot;yA8E&quot;&gt;кто начал звонок и кому человек звонит;&lt;/li&gt;
    &lt;li id=&quot;1YEk&quot;&gt;время;&lt;/li&gt;
    &lt;li id=&quot;Fksh&quot;&gt;длительность вызова;&lt;/li&gt;
    &lt;li id=&quot;Hp3T&quot;&gt;какая сеть использовалась (Wi-Fi или мобильная связь).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;MydQ&quot;&gt;И хотя аудиозаписи звонков не хранятся на серверах, перечисленной выше информации вполне достаточно для спецслужб. Так, по IP можно вычислить примерное местоположение.&lt;/p&gt;
  &lt;p id=&quot;6NQb&quot;&gt;Meta регулярно сообщает о том, как часто правительства запрашивают доступ к данным пользователей. &lt;a href=&quot;https://faq.whatsapp.com/808280033839222/?locale=ru_RU&quot; target=&quot;_blank&quot;&gt;Специальная группа по работе с запросами от правоохранительных органов&lt;/a&gt; в индивидуальном порядке рассматривает запросы и принимает решение о предоставлении информации. Данные могут быть переданы правоохранительным органам и использоваться как для расследования настоящих преступлений, так и для преследования по политическим мотивам.&lt;/p&gt;

</content></entry><entry><id>nerepetitor:RussianForPyCharm</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/RussianForPyCharm?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Как добавить русский язык в PyCharm</title><published>2025-05-03T09:22:03.091Z</published><updated>2026-02-03T08:18:06.455Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/81/5a/815af4fc-acb1-4a81-8915-0068db924140.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/43/28/43281c39-a76a-45ba-90d4-a3f946699e0f.jpeg&quot;&gt;Если в PyCharm русские слова подчёркиваются красным, это означает, что по умолчанию для проверки орфографии используется только английский словарь</summary><content type="html">
  &lt;p id=&quot;GlDu&quot;&gt;Если в &lt;strong&gt;PyCharm&lt;/strong&gt; русские слова подчёркиваются красным, это означает, что по умолчанию для проверки орфографии используется только английский словарь.&lt;/p&gt;
  &lt;h3 id=&quot;yb6B&quot;&gt;Скачайте словарь для русского языка&lt;/h3&gt;
  &lt;p id=&quot;uVq0&quot;&gt;Перейдите по ссылке: &lt;a href=&quot;https://github.com/LibreOffice/dictionaries#&quot; target=&quot;_blank&quot;&gt;https://github.com/LibreOffice/dictionaries&lt;/a&gt; и скопируйте HTTPS-ссылку для клонирования репозитория.&lt;/p&gt;
  &lt;figure id=&quot;kmdq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/48/18489bc8-25ab-4368-ab5d-7ba6d37f8cc1.png&quot; width=&quot;1131&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;e72h&quot;&gt;В &lt;strong&gt;PyCharm&lt;/strong&gt; откройте терминал и перейдите в домашнюю директорию:&lt;/p&gt;
  &lt;pre id=&quot;kc6B&quot; data-lang=&quot;bash&quot;&gt;cd ~&lt;/pre&gt;
  &lt;p id=&quot;ROwq&quot;&gt;Клонируйте репозиторий с GitHub:&lt;/p&gt;
  &lt;pre id=&quot;VNE0&quot; data-lang=&quot;bash&quot;&gt;git clone https://github.com/LibreOffice/dictionaries.git&lt;/pre&gt;
  &lt;p id=&quot;L3mS&quot;&gt;Создайте папку для пользовательских словарей:&lt;/p&gt;
  &lt;pre id=&quot;iXkp&quot; data-lang=&quot;bash&quot;&gt;mkdir .PyCharmDicts&lt;/pre&gt;
  &lt;p id=&quot;jy3B&quot;&gt;Скопируйте туда нужные файлы из словаря &lt;strong&gt;ru_RU&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;z9Dv&quot; data-lang=&quot;bash&quot;&gt;cp dictionaries/ru_RU/ru_RU.dic .PyCharmDicts/
cp dictionaries/ru_RU/ru_RU.aff .PyCharmDicts/&lt;/pre&gt;
  &lt;p id=&quot;5d6K&quot;&gt;Проверьте содержимое:&lt;/p&gt;
  &lt;pre id=&quot;NXgW&quot; data-lang=&quot;bash&quot;&gt;ls .PyCharmDicts&lt;/pre&gt;
  &lt;p id=&quot;BJck&quot;&gt;Если вы видете два файла: ru_RU.dic и ru_RU.aff, то всё в порядке.&lt;/p&gt;
  &lt;h3 id=&quot;iWPb&quot;&gt;Подключение словаря в PyCharm&lt;/h3&gt;
  &lt;p id=&quot;T8nl&quot;&gt;Перейдите в настройки.&lt;/p&gt;
  &lt;figure id=&quot;qihI&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b5/4d/b54de98b-59e8-48e5-a1e5-0ad79cd8957c.png&quot; width=&quot;1120&quot; /&gt;
    &lt;figcaption&gt;File → Settings → Editor → Natural Languages → Spelling → Dictionaries&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;MEHt&quot;&gt;Добавьте новый словарь, нажав на &amp;quot;&lt;strong&gt;+&lt;/strong&gt;&amp;quot;.В появившемся окне укажите путь к папке:&lt;/p&gt;
  &lt;p id=&quot;7b6T&quot;&gt;В Linux: &lt;code&gt;/home/имя_пользователя/.PyCharmDicts&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;o2BM&quot;&gt;В Windows: &lt;code&gt;C:\Users\имя_пользователя\.PyCharmDicts&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;w3Uj&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/08/1a/081a8f4e-2171-4905-a419-f938f88d2f8d.png&quot; width=&quot;821&quot; /&gt;
    &lt;figcaption&gt;Нажмите &lt;strong&gt;ОК&lt;/strong&gt;.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TcHE&quot;&gt;Наконец, нажмите &lt;strong&gt;Apply&lt;/strong&gt;, чтобы применить изменения, а затем &lt;strong&gt;OK.&lt;/strong&gt;&lt;/p&gt;

</content></entry><entry><id>nerepetitor:accelerateAndroid</id><link rel="alternate" type="text/html" href="https://teletype.in/@nerepetitor/accelerateAndroid?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nerepetitor"></link><title>Ускоряем Android</title><published>2025-03-30T17:47:34.504Z</published><updated>2025-09-13T10:52:35.038Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/c0/ff/c0ff5a13-3f61-420c-a2ca-5be801c183d2.png"></media:thumbnail><category term="android" label="Android"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/63/03/63035f92-2dea-4bd1-ac88-a795d3276b08.jpeg&quot;&gt;О том, что делать, если телефон или планшет вдруг начал тормозить</summary><content type="html">
  &lt;p id=&quot;zApo&quot;&gt;О том, что делать, если телефон или планшет вдруг начал тормозить.&lt;/p&gt;
  &lt;h3 id=&quot;IlfP&quot;&gt;Перезагрузка&lt;/h3&gt;
  &lt;p id=&quot;Wa81&quot;&gt;Самое очевидное: перезагрузите устройство. Делайте это не реже чем раз в неделю, а также после установки новых приложений (или обновления старых).&lt;/p&gt;
  &lt;h3 id=&quot;P2m3&quot;&gt;Освобождение памяти&lt;/h3&gt;
  &lt;p id=&quot;8W6E&quot;&gt;Если на устройстве недостаточно свободной памяти, Android не может эффективно управлять кэшем, что замедляет работу. Не удаляйте кэш приложений, которыми вы пользуетесь регулярно. &lt;a href=&quot;https://teletype.in/@nerepetitor/deletingCache&quot; target=&quot;_blank&quot;&gt;В каких случаях стоит удалять кэш?&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;31nh&quot;&gt;В случае нехватки памяти имеет смысл удалить предустановленные приложения. Если не получается сделать это с телефона, попробуйте с помощью &lt;a href=&quot;https://teletype.in/@nerepetitor/deleteAndroidApp&quot; target=&quot;_blank&quot;&gt;командной строки&lt;/a&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;OjhT&quot;&gt;Отключение анимаций&lt;/h3&gt;
  &lt;p id=&quot;3iD9&quot;&gt;Анимации требуют вычислительных ресурсов и занимают оперативную память. Освободите её для других задач.&lt;/p&gt;
  &lt;p id=&quot;pzum&quot;&gt;Активируйте режим разработчика: перейдите в «Настройки» → «О телефоне» и нажмите 7 раз на «Номер сборки». &lt;/p&gt;
  &lt;p id=&quot;6mlW&quot;&gt;В «Настройках» перейдите в «Параметры разработчика», найдите такие пункты как «Анимация окон», «Анимация переходов» и «Длительность анимации». Установите &lt;strong&gt;0.5x&lt;/strong&gt; или выберите«Без анимации».&lt;/p&gt;
  &lt;h3 id=&quot;83OP&quot;&gt;Отключите приложения в фоновом режиме&lt;/h3&gt;
  &lt;p id=&quot;62b7&quot;&gt;Некоторые приложения работают в фоновом режиме, потребляя системные ресурсы. Отключение фоновых процессов помогает освободить оперативную память, снижает нагрузку на процессор и увеличивает время автономной работы.&lt;/p&gt;
  &lt;p id=&quot;pc6V&quot;&gt;Перейдите в «Настройки» →«Параметры разработчика» и найдите «Лимит фоновых процессов». Выберите «Не более 4 процессов». &lt;/p&gt;
  &lt;h3 id=&quot;Mjlk&quot;&gt;Сброс до заводских настроек&lt;/h3&gt;
  &lt;p id=&quot;0icd&quot;&gt;Крайний случай. Вам не помогли другие способы, устройство отказывается нормально работать. Помните, что сброс до заводских настроек очищает все пользовательские данные с устройства, будь то загруженные приложения, фотографии, файлы, контакты или привязанные аккаунты. Не забудьте сохранить всю важную информацию в облаке.&lt;/p&gt;
  &lt;p id=&quot;Wkei&quot;&gt;Чаще всего эту функцию можно найти в «Настройках» → «О телефоне» / «О системе».&lt;/p&gt;

</content></entry></feed>