This media is not supported in your browser
VIEW IN TELEGRAM
MacBook Pro 16 Space Black (антирекомендация)
Сегодня продал старый мак, который покупал прошлым летом. Не прошло и года как он заколебал. Причины всего две – слишком большой и слишком черный.
Я мигрировал на него с 14-дюймового Space Grey. И в итоге вернулся на 14 дюймов, уже в серебристом цвете.
Начнем с диагонали.
Может показаться, что 14 дюймов для разработки маловато, а 16 будет в самый раз. Ничего подобного. В самый раз будет 27 дюймов. Докупается внешний 4k-монитор сяоми и вот теперь как надо.
В кафе этот монстр занимает весь столик, тарелку поставить некуда. В самолете не помещается на коленях. Если сидящий впереди пассажир откинет спинку кресла, он в лучшем случае лишит тебя комфорта, а в худшем – сломает экран. Нужен рюкзак побольше и спина покрепче таскать эту дуру.
Еще и легко коцается, когда задеваешь им углы и вслепую кабеля втыкаешь. Потому что это всего лишь крашеный алюминий.
Закончим про цвет.
Серебристые маки годами доминировали в продажах и мозолили глаза в фильмах и сериалах. Поэтому я, жертва маркетинга и любитель всего нового, решил брать именно черный мак. Подумаешь отпечатки пальцев будут оставаться, я же могу их тряпочкой протирать!
Оказалось отпечатки – вообще не повод для беспокойства. Другое дело проклятая пыль. Ее пиздец как видно, ведь она бело-серого цвета! Собираешься с утра продуктивно тикеты раскидать, идешь к своему aesthetic fucking slave месту, открываешь мак, а он засран с головы до ног! Засран экран. Засрана клавиатура. Засран трекпад. Засраны динамики. Всё в пылище и всё засрано. Вот те нате протирайте! И так каждый день.
От пыли дома никуда не деться. Это же наш собственный эпидермис сыпется. А вот от черного мака запросто.
Пошел нахер из моего дома и из моей жизни.
Сегодня продал старый мак, который покупал прошлым летом. Не прошло и года как он заколебал. Причины всего две – слишком большой и слишком черный.
Я мигрировал на него с 14-дюймового Space Grey. И в итоге вернулся на 14 дюймов, уже в серебристом цвете.
Начнем с диагонали.
Может показаться, что 14 дюймов для разработки маловато, а 16 будет в самый раз. Ничего подобного. В самый раз будет 27 дюймов. Докупается внешний 4k-монитор сяоми и вот теперь как надо.
В кафе этот монстр занимает весь столик, тарелку поставить некуда. В самолете не помещается на коленях. Если сидящий впереди пассажир откинет спинку кресла, он в лучшем случае лишит тебя комфорта, а в худшем – сломает экран. Нужен рюкзак побольше и спина покрепче таскать эту дуру.
Еще и легко коцается, когда задеваешь им углы и вслепую кабеля втыкаешь. Потому что это всего лишь крашеный алюминий.
Закончим про цвет.
Серебристые маки годами доминировали в продажах и мозолили глаза в фильмах и сериалах. Поэтому я, жертва маркетинга и любитель всего нового, решил брать именно черный мак. Подумаешь отпечатки пальцев будут оставаться, я же могу их тряпочкой протирать!
Оказалось отпечатки – вообще не повод для беспокойства. Другое дело проклятая пыль. Ее пиздец как видно, ведь она бело-серого цвета! Собираешься с утра продуктивно тикеты раскидать, идешь к своему aesthetic fucking slave месту, открываешь мак, а он засран с головы до ног! Засран экран. Засрана клавиатура. Засран трекпад. Засраны динамики. Всё в пылище и всё засрано. Вот те нате протирайте! И так каждый день.
От пыли дома никуда не деться. Это же наш собственный эпидермис сыпется. А вот от черного мака запросто.
Пошел нахер из моего дома и из моей жизни.
За июнь решено 30 задач уровня изи. Все они относятся к категории SQL и подразумевают написание SELECT-запроса, который возвращает результат в нужном виде. Количество задач перевалило за 300. Поднялся в рейтинге на 348 987 место.
• Combine Two Tables
• Employees Earning More Than Their Managers
• Duplicate Emails
• Customers Who Never Order
• Delete Duplicate Emails
• Rising Temperature
• Game Play Analysis I
• Employee Bonus
• Find Customer Referee
• Customer Placing the Largest Number of Orders
• Big Countries
• Sales Person
• Triangle Judgement
• Biggest Single Number
• Not Boring Movies
• Swap Salary
• Actors and Directors Who Cooperated At Least Three Times
• Product Sales Analysis I
• Project Employees I
• Sales Analysis III
• User Activity for the Past 30 Days I
• Article Views I
• Reformat Department Table
• Queries Quality and Percentage
• Average Selling Price
• Students and Examinations
• List the Products Ordered in a Period
• Replace Employee ID With The Unique Identifier
• Top Travellers
• Group Sold Products By The Date
#leetcode@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
По интернетам гуляет вакансия андроид-разработчика в команду телеграм с зарплатой миллион долларов в год. В фаанге сопоставимый рейз будет только на позициях L6+ с бонусами и акциями. За что такие бабки? Попробуем выяснить:
1. Пиар.
Телеграм исторически нанимает через челленджы. Это проверенный формат вирусного маркетинга. У него высокая эффективность. Сотни разработчиков копаются в исходниках и присылают патчи. Платформа получает бесплатный аудит, свежие идеи и людей в команду. По слухам, количество разработчиков в компании исчисляется десятками, а HR-отдел отсутствует вовсе. Платить сверх-зарплаты не проблема. Это укрепляет лояльность и привлекает новых сотрудников. Сами разработчики – призеры олимпиад и выпускники мат-/физ-факов из СНГ. Не отсвечивают и фанатеют от своего ремесла. Компания поощряет соревновательный дух, жесткую ответственность за результат и умение писать код без багов. Эту философию придется разделять.
2. Дубай.
Вакансия подразумевает оффер в Дубайский офис. Хорошо, если кабаныч одобрит удаленку. Иначе придется собирать манатки и переселяться в пустыню. Я был в Дубае дважды. Это в 2 раза больше, чем этот город заслуживает. Там невозможно жить. С апреля по октябрь на улице как в парилке. Застойный залив. Жизнь противоестественна и держится на кондиционировании, опреснении воды и импорте всей еды. Сложно интегрироваться. Виза с жесткой привязкой к работодателю. Для экспатов все заметно дороже: аренда, медицина, школы.
3. Приложение.
Код клиента лежит на гитхабе. Можно глянуть, с чем предстоит работать. Все челленджи требуют внедрения новой функциональности в текущую кодовую базу. А она, мягко говоря, специфичная. Никаких тебе чистых архитектур, котлинов и композов.
Есть такое выражение из 1984 года: программный код надо писать так, чтобы его легко читали люди, а только потом исполняли машины. В телеге на эту мудрость положили с прибором. Код не чистый и абстрактный, а тяжеловесный и лапшистый. Написан на Java и C++. Тестов нет. Каментов нет. Минимум внешних зависимостей. ExoPlayer, Zxing, WebRTC и RecyclerView завендорили вручную.
Используется подход Single-Activity. Конфигурация управляется вручную. Экраны – вьюхи, упорядоченные в стек, подобно фрагментам. XML-файлов нет. Компоненты создаются программно в коде. Вместо векторов – наборы png и найнпатчи. Анимации делаются с помощью ValueAnimator и ObjectAnimator. Для стикеров используется движок rlottie от самсунга, написанный на плюсах. Он кэширует битмапы и крутит их на CPU. Никакого OpenGL.
Сетевой слой держит долгоживущее шифрованное TCP-соединение. Шифрование, сокеты и API реализованы на плюсах и управляются через JNI. Файлы качаются чанками по 4 в параллель. Есть проверка CDN-хэшей и дозапись на диск. Используется собственный декларативный язык описания объектов и методов. Из декларации при сборке генерируется огромная схема на 72k строк. Для каждого конструктора получается класс-наследник TLObject, а для метода – такой же класс + обертка для ожидаемого ответа. Когда приложение отправляет запрос, объект сериализуется в буфер байтов нативной памяти, адрес буфера передаётся в ядро, оно шифрует и шлет пакет по TCP. Данные летают мимо куч Java. По сети не передаются даже имена полей. По крайней мере разработчики телеги могут говорить, что не перекладывают на работе джейсон.
Для локальной бд используется SQLite. Таблицы создаются на Java. Вызовы настроены через JNI, минуя распаковку в Java-объекты. Соединение открывается один раз при старте. Схема минималистичная, что упрощает миграции, но усложняет читаемость. База хранит ключи секретных чатов и защищена от бэкапа.
Экран профиля, который предлагается переделать в конкурсе, содержит 14608 строк кода. В рамках проекта это даже немного. Когда будет конкурс, связанный с экраном чата, придется читать 43368 строк. Из-за своих размеров он даже не загружается на гитхабе. Здесь же встречается 139-уровневый if-else.
И все это лишь вершина айсберга. Посмотреть не погружаясь в проект. Подобного «олимпиадного мастерства» там как говна за баней.
Не стыдно и лям просить за такое.
Please open Telegram to view this post
VIEW IN TELEGRAM
2 17 6 4 1 1
Посчитать зарплату
Бывает свалилась котлета на карту и совсем непонятен механизм ее формирования. Оказывается, можно не только его посчитать, но и предсказать.
По трудовому договору зарплата выплачивается каждые 15 дней. Понятия «аванс» в ТК нет. С окончания периода, за который начислят выплату также должно пройти не больше 15 дней. Сроки для зарплаты за первую половину месяца приходятся на 16-31 числа, а за вторую – на 1-15. Конкретные даты устанавливаются работодателем. Это могу быть любые дни: 5 и 20, 7 и 22, 10 и 25, 15 и 30. Деньги придут раньше, если на эти даты выпали выходные или праздники.
Для примера возьмем зарплату 500 000₽ Гросс (сумма до вычета налогов) и посчитаем.
С 1 января 2025 года действует пятиступенчатая прогрессивная шкала налога для физлиц. Если на протяжении года зарабатывать по 500k, то будут применяться 3 шкалы – 13%, 15% и 18%.
13% на первые 2.4 млн.
15% на сумму от 2.4 млн до 5 млн.
18% на сумму от 5 млн до 20 млн.
Таким образом зарплата чистыми будет таять на глазах:
В январе – 435 000₽ (500 000 × 0.87).
В мае – 433 000₽ (400 000 × 0.87 + 100 000 × 0.85).
В июне – 425 000₽ (500 000 × 0.85).
В ноябре – 410 000₽ (500 000 × 0.82).
Отпускные, премии и больничные добавляются к доходу того года, в котором выплачены, и могут приблизить даты перехода на 15% и 18%.
Ставка НДФЛ 1 января снова вернется к 13%.
Примеры
Посчитаем первую зарплату, если устроились на работу 14 апреля.
Выплаты 10 и 25 числа.
25 апреля будет выплата за период 1-15 апреля.
В апреле 22 рабочих дня.
В первой половине месяца мы успеем отработать 2.
500 000 / 22 = 22 727₽ – стоимость 1 рабочего дня в апреле.
22 727 × 2 × 0.87 = 39 545₽ – размер нашей первой зарплаты.
Посчитаем выплаты за май, если работаем с января.
Полная зарплата за месяц свалится платежами 25 мая и 10 июня и составит 433 000₽.
В мае 19 рабочих дней: 8 – в первой половине месяца и 11 – во второй.
500 000 / 19 = 26 316₽ – стоимость 1 рабочего дня в мае.
26 316 × 8 = 210 528₽ – «грязный» доход за 1–15 мая.
210 528 × 0.87 = 183 159₽ – выплата 25 мая.
4 × 500 000₽ = 2 млн – доход за январь-апрель.
2.4 млн - 2 млн - 210 528 = 189 472₽ - сумма, которая еще облагается 13%.
(189 472 × 0.87) + (100 000 × 0.85) = 249 841₽ – выплата 10 июня.
Поздравляю, вы переучились на бухгалтера.
Бывает свалилась котлета на карту и совсем непонятен механизм ее формирования. Оказывается, можно не только его посчитать, но и предсказать.
По трудовому договору зарплата выплачивается каждые 15 дней. Понятия «аванс» в ТК нет. С окончания периода, за который начислят выплату также должно пройти не больше 15 дней. Сроки для зарплаты за первую половину месяца приходятся на 16-31 числа, а за вторую – на 1-15. Конкретные даты устанавливаются работодателем. Это могу быть любые дни: 5 и 20, 7 и 22, 10 и 25, 15 и 30. Деньги придут раньше, если на эти даты выпали выходные или праздники.
Для примера возьмем зарплату 500 000₽ Гросс (сумма до вычета налогов) и посчитаем.
С 1 января 2025 года действует пятиступенчатая прогрессивная шкала налога для физлиц. Если на протяжении года зарабатывать по 500k, то будут применяться 3 шкалы – 13%, 15% и 18%.
13% на первые 2.4 млн.
15% на сумму от 2.4 млн до 5 млн.
18% на сумму от 5 млн до 20 млн.
Таким образом зарплата чистыми будет таять на глазах:
В январе – 435 000₽ (500 000 × 0.87).
В мае – 433 000₽ (400 000 × 0.87 + 100 000 × 0.85).
В июне – 425 000₽ (500 000 × 0.85).
В ноябре – 410 000₽ (500 000 × 0.82).
Отпускные, премии и больничные добавляются к доходу того года, в котором выплачены, и могут приблизить даты перехода на 15% и 18%.
Ставка НДФЛ 1 января снова вернется к 13%.
Примеры
Посчитаем первую зарплату, если устроились на работу 14 апреля.
Выплаты 10 и 25 числа.
25 апреля будет выплата за период 1-15 апреля.
В апреле 22 рабочих дня.
В первой половине месяца мы успеем отработать 2.
500 000 / 22 = 22 727₽ – стоимость 1 рабочего дня в апреле.
22 727 × 2 × 0.87 = 39 545₽ – размер нашей первой зарплаты.
Посчитаем выплаты за май, если работаем с января.
Полная зарплата за месяц свалится платежами 25 мая и 10 июня и составит 433 000₽.
В мае 19 рабочих дней: 8 – в первой половине месяца и 11 – во второй.
500 000 / 19 = 26 316₽ – стоимость 1 рабочего дня в мае.
26 316 × 8 = 210 528₽ – «грязный» доход за 1–15 мая.
210 528 × 0.87 = 183 159₽ – выплата 25 мая.
4 × 500 000₽ = 2 млн – доход за январь-апрель.
2.4 млн - 2 млн - 210 528 = 189 472₽ - сумма, которая еще облагается 13%.
(189 472 × 0.87) + (100 000 × 0.85) = 249 841₽ – выплата 10 июня.
Поздравляю, вы переучились на бухгалтера.
Банковские вклады
Большинство людей, которых я знаю, держат деньги в 1-2 банках. Чаще всего в сбере и тиньке. В то же время у нас на ближайшие годы очень приятная ставка по депозитам и они благонамеренно несут свои наносеки на банковские вклады. Если не заработать, то спасти средства от поедания инфляцией. Открывают вклад на год под 15% и думают, что молодцы. Нет, не молодцы.
Больших прибылей с таким подходом не увидеть, много денег не скопить. Правильная стратегия следующая:
Не вставая с дивана открыть счета сразу в 30 банках. Подойдут все крупные, а также мелочь вроде яндекса, озона и ренессанса. Давно канули времена, когда обсуживание карточек было платным. Максимум тебя прогреют на платное смс-оповещение, его можно сразу отключить.
Карточку доставляет представитель. Деньги между банками переводятся по СБП. Разыскивать банкомат не требуется.
Дальше нужно быть очень уверенным в завтрашнем дне, чтобы закладывать средства на целый год. Они могут понадобиться в краткосрочной перспективе. Придется закрывать вклад и терять проценты. Лучше на срок 2-6 месяцев.
Людская база перестала рости и банки вынуждены жестко конкурировать за клиентов. К слову, такая же конкуренция существует между маркетплейсами, заправками, интернет-провайдерами и мобильными операторами. Нужно быть очень невезучим, чтобы при оформлении перехода к конкуренту не слутать скидку на тариф.
Почти все банки дают повышенный процент на открытие первого вклада. Я так 2 года инвестировал под 12%, когда ключевая ставка была 7.5% и под 24%, когда она выросла до 20. Просто открывал счета в новых и новых банках. Сейчас мои гроши лежат под 20-23%.
Очень скоро банки прознают, что они у вас не единственные и начинают бодаться. Пропихивают акции и предложения, чтобы бабло хостилось именно у них. Например, тинек стабильно раз в несколько месяцев предлагает открыть вклад по ключевой ставке сроком на 2 месяца. При том, что для обычных смертных их ставка стандартно ниже официальной на 5 базисных пунктов. Красный, синий и другие банки поступают также.
Деньги положены, процентики капают. Теперь надо пристроить средства, к которым требуется быстрый доступ. Их можно загнать в яндекс банк на так называемый сейв без срока. Выплата процентов будет каждый день на этот же счет. Текущая ставка там 16%. Деньги остаются в доступе.
Осенью в России собрались принимать закон для борьбы с дропперами. Количество банковских счетов на одного человека могут ограничить. Самое время озаботиться всем этим.
Большинство людей, которых я знаю, держат деньги в 1-2 банках. Чаще всего в сбере и тиньке. В то же время у нас на ближайшие годы очень приятная ставка по депозитам и они благонамеренно несут свои наносеки на банковские вклады. Если не заработать, то спасти средства от поедания инфляцией. Открывают вклад на год под 15% и думают, что молодцы. Нет, не молодцы.
Больших прибылей с таким подходом не увидеть, много денег не скопить. Правильная стратегия следующая:
Не вставая с дивана открыть счета сразу в 30 банках. Подойдут все крупные, а также мелочь вроде яндекса, озона и ренессанса. Давно канули времена, когда обсуживание карточек было платным. Максимум тебя прогреют на платное смс-оповещение, его можно сразу отключить.
Карточку доставляет представитель. Деньги между банками переводятся по СБП. Разыскивать банкомат не требуется.
Дальше нужно быть очень уверенным в завтрашнем дне, чтобы закладывать средства на целый год. Они могут понадобиться в краткосрочной перспективе. Придется закрывать вклад и терять проценты. Лучше на срок 2-6 месяцев.
Людская база перестала рости и банки вынуждены жестко конкурировать за клиентов. К слову, такая же конкуренция существует между маркетплейсами, заправками, интернет-провайдерами и мобильными операторами. Нужно быть очень невезучим, чтобы при оформлении перехода к конкуренту не слутать скидку на тариф.
Почти все банки дают повышенный процент на открытие первого вклада. Я так 2 года инвестировал под 12%, когда ключевая ставка была 7.5% и под 24%, когда она выросла до 20. Просто открывал счета в новых и новых банках. Сейчас мои гроши лежат под 20-23%.
Очень скоро банки прознают, что они у вас не единственные и начинают бодаться. Пропихивают акции и предложения, чтобы бабло хостилось именно у них. Например, тинек стабильно раз в несколько месяцев предлагает открыть вклад по ключевой ставке сроком на 2 месяца. При том, что для обычных смертных их ставка стандартно ниже официальной на 5 базисных пунктов. Красный, синий и другие банки поступают также.
Деньги положены, процентики капают. Теперь надо пристроить средства, к которым требуется быстрый доступ. Их можно загнать в яндекс банк на так называемый сейв без срока. Выплата процентов будет каждый день на этот же счет. Текущая ставка там 16%. Деньги остаются в доступе.
Осенью в России собрались принимать закон для борьбы с дропперами. Количество банковских счетов на одного человека могут ограничить. Самое время озаботиться всем этим.
Правила съема
Случился пятый переезд на очередную съемную квартиру в Москве. В среднем меняю место жительства каждые 1.5 года. Не во всех сферах жизни мне нравится постоянство.
Я уже пожил в 7 районах Москвы и в самых разных квартирах: от клоповника в сталинке до апартаментов в клубном доме. Поэтому на правах калача тертого расскажу, что из себя представляет рынок аренды недвижимости в июне 2025 и как айтишнику работящему жить поживать бобра наживать.
Для поиска имеем 3 площадки: циан, авито и яндекс аренда. Первый является абсолютным монополистом. Как искать работу на хедхантере и продавать хлам на авито. На других площадках выхлоп слабый.
Далее мы вынуждены отталкиваться от требований. Если хотим полную загрузку: внутри мкада, не под снос, не 1 этаж, 40+ квадратов, дизайнерский/косметический ремонт, изолированная спальня, гардеробная, кондей, холодильник, посудомойка, стиралка, сушилка, много розеток, комнатная мебель и кухонный гарнитур, то ценник будет никак не ниже 70k/мес.
Опыт показывает, что есть только один шанс снять такую квартиру – настроить на циане поиск с мгновенными уведомлениями о появлении новых квартир. Есть даже бот в тг. Далее сразу звонить и ехать на просмотр. Хорошие варианты точно будут раз в 1-2 дня. Если хата выложена и не сдалась за 3 дня – с ней явно или неявно что-то не так. Таким методом я арендовал 3 последние жилплощади. Объявление и 10 минут не провисело.
Не стоит забывать и про мошенников. Их на циане как тараканов в бабушатнике. Самые частые кейсы – просьба скинуть 10-15k, чтобы застолбить квартиру от других желающих и махинации с заключением договора онлайн. Это скам и отъем денег у населения. Никаких оплат до подписания договора на месте. Он должен быть правильно оформлен, паспорта, доверенности, подтверждение права собственности, выписки из егрн, перечень имущества/повреждений и так далее.
Договор стандартный – на 11 месяцев. Потом пролонгация. Если предлагают дальше жить на добром слове – лучше не соглашаться. Повышать цену в этот период не принято, при перезаключении она растет в среднем на 5-10k, ибо инфляция. Оплата бывает по ИП, самый классный вариант как по мне, но и довольно редкий. Или передачей кэша из рук в руки. Онлайн-переводы последний раз видел в пандемию.
Залог в 100% платежа – это база. На циане установлен практически у всех квартир. Возвращается в конце аренды.
Комиссия агенту в 30-40% тоже распространенная практика. В половине случаев агент – манерный человек с языком без костей, все расскажет и покажет, сопроводит и поможет. Еще в половине – соседка сверху, которая в свое свободное время просто открывает хату. Сейчас много объявлений напрямую от собственников и без комиссии. Но на циане с этим полный бардак. Агентства дублируют объявления от собственников, пишут более продающее описание и влупливают свою конскую комиссию. Таких надо отсеивать.
Кому готовы сдать хату? Грустная правда в том, что наличие хорошей должности, коммерческой востребованности и стабильного дохода не определяют ничего. На хорошую хату и так будут десятки желающих с баблом. Поэтому собственник всегда управляет выбором. А хочет он по пунктам:
• аренду на длительный срок (от года)
• граждан рф
• работающих
• не курящих
• без животных
• без детей
Общепринят консенсус, что любимый хомячок и демография это хорошо и традиционно, но где-нибудь в своей хате, а не в арендованной. Квартира в собственности – главная скрепа любого русского человека. Поэтому арендодатель мечтает, чтобы ты проводил в ней как можно меньше времени и не вытаптывал ламинат.
Идеальный арендатор не парит и не синячит, все время пропадает на работе, в квартиру возвращается, чтобы принять душ и поспать.
Для переезда есть яндекс доставка. Там же взять 1-2 грузчиков, чтобы все таскали, разгружали, поднимали на этаж. Для хранения вещей – кладовкин. На озоне есть пленка-пупырка, чтобы зеркала, столешницы и мониторы пережили транспортировку.
Такие дела.
Случился пятый переезд на очередную съемную квартиру в Москве. В среднем меняю место жительства каждые 1.5 года. Не во всех сферах жизни мне нравится постоянство.
Я уже пожил в 7 районах Москвы и в самых разных квартирах: от клоповника в сталинке до апартаментов в клубном доме. Поэтому на правах калача тертого расскажу, что из себя представляет рынок аренды недвижимости в июне 2025 и как айтишнику работящему жить поживать бобра наживать.
Для поиска имеем 3 площадки: циан, авито и яндекс аренда. Первый является абсолютным монополистом. Как искать работу на хедхантере и продавать хлам на авито. На других площадках выхлоп слабый.
Далее мы вынуждены отталкиваться от требований. Если хотим полную загрузку: внутри мкада, не под снос, не 1 этаж, 40+ квадратов, дизайнерский/косметический ремонт, изолированная спальня, гардеробная, кондей, холодильник, посудомойка, стиралка, сушилка, много розеток, комнатная мебель и кухонный гарнитур, то ценник будет никак не ниже 70k/мес.
Опыт показывает, что есть только один шанс снять такую квартиру – настроить на циане поиск с мгновенными уведомлениями о появлении новых квартир. Есть даже бот в тг. Далее сразу звонить и ехать на просмотр. Хорошие варианты точно будут раз в 1-2 дня. Если хата выложена и не сдалась за 3 дня – с ней явно или неявно что-то не так. Таким методом я арендовал 3 последние жилплощади. Объявление и 10 минут не провисело.
Не стоит забывать и про мошенников. Их на циане как тараканов в бабушатнике. Самые частые кейсы – просьба скинуть 10-15k, чтобы застолбить квартиру от других желающих и махинации с заключением договора онлайн. Это скам и отъем денег у населения. Никаких оплат до подписания договора на месте. Он должен быть правильно оформлен, паспорта, доверенности, подтверждение права собственности, выписки из егрн, перечень имущества/повреждений и так далее.
Договор стандартный – на 11 месяцев. Потом пролонгация. Если предлагают дальше жить на добром слове – лучше не соглашаться. Повышать цену в этот период не принято, при перезаключении она растет в среднем на 5-10k, ибо инфляция. Оплата бывает по ИП, самый классный вариант как по мне, но и довольно редкий. Или передачей кэша из рук в руки. Онлайн-переводы последний раз видел в пандемию.
Залог в 100% платежа – это база. На циане установлен практически у всех квартир. Возвращается в конце аренды.
Комиссия агенту в 30-40% тоже распространенная практика. В половине случаев агент – манерный человек с языком без костей, все расскажет и покажет, сопроводит и поможет. Еще в половине – соседка сверху, которая в свое свободное время просто открывает хату. Сейчас много объявлений напрямую от собственников и без комиссии. Но на циане с этим полный бардак. Агентства дублируют объявления от собственников, пишут более продающее описание и влупливают свою конскую комиссию. Таких надо отсеивать.
Кому готовы сдать хату? Грустная правда в том, что наличие хорошей должности, коммерческой востребованности и стабильного дохода не определяют ничего. На хорошую хату и так будут десятки желающих с баблом. Поэтому собственник всегда управляет выбором. А хочет он по пунктам:
• аренду на длительный срок (от года)
• граждан рф
• работающих
• не курящих
• без животных
• без детей
Общепринят консенсус, что любимый хомячок и демография это хорошо и традиционно, но где-нибудь в своей хате, а не в арендованной. Квартира в собственности – главная скрепа любого русского человека. Поэтому арендодатель мечтает, чтобы ты проводил в ней как можно меньше времени и не вытаптывал ламинат.
Идеальный арендатор не парит и не синячит, все время пропадает на работе, в квартиру возвращается, чтобы принять душ и поспать.
Для переезда есть яндекс доставка. Там же взять 1-2 грузчиков, чтобы все таскали, разгружали, поднимали на этаж. Для хранения вещей – кладовкин. На озоне есть пленка-пупырка, чтобы зеркала, столешницы и мониторы пережили транспортировку.
Такие дела.
1 15 4 4 3 2 2 1
Регрессионное тестирование – это однозначно хорошо. Сколько раз у меня что-то отваливалось в текущей версии приложения при затаскивании новой кнопки.
Тесты охватывают базовые принципы тестирования, жизненный цикл разработки, работу с тестовыми данными и оценку рисков.
Доступно 3 теста:
• Базовый – 10 вопросов за 15 минут.
• Средний – 12 вопросов за 18 минут.
• Продвинутый – 15 вопросов за 23 минуты.
ОТВЕТЫ В РОАДМАПЕ
#hhskills@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Corporate boy
Работа в корпорации отличается от работы в так любимых мной мелких студиях и стартапах-берлогах. В основном масштабом. Больше процессов, людей и командного взаимодействия. Меньше возможностей зашкериться и прохлаждаться.
Чтобы тупить поменьше и вдуплять побольше, приходится учиться на ходу. Иначе накапливается неэффективность, происходит мискоммуникация и едет кукуха. В какой-то момент я решил вести списочек таких ситуаций. Каждый пункт – мой конкретный факап, который произошел однажды и больше не повторялся.
После увольнения список пополняться перестал. Будет лежать здесь:
• Всегда должен быть установлен будильник. А лучше два. Тогда вероятность проспать дейли уменьшается.
• Работать намного приятнее, если утром принять душ, умыться, потренить, надеть чистое белье и плотно позавтракать.
• Чего нет в календаре – нет и в реальной жизни. Все рабочие события должны быть туда добавлены.
• По работе делать только необходимый минимум. Рефакторинг – для ускорения будущей работы.
• Знать примерные сроки закрытия своих задач. Предсказуемость – это главное.
• Если что-то блокирует пайплайн – отложить и переключиться на другие задачи.
• Мокать данные бэкэнда. Не ставить задачу на паузу из-за долгого ожидания апи.
• При общении с менеджментом больше бизнес деталей, меньше технических подробностей.
• Не транслировать пассивность.
• Никакой самодеятельности. Согласовывать доработки по дизайну и апи. Снимать с себя всю ответственность.
• UI-таски тестировать на небольших (480x800) и больших (1440x3120) экранах.
• Не копить долги по работе. Особенно в пятницу. На выходные уходить свободным от тяжелого груза задач.
• Заранее оповещать коллег о планируемых датах отпуска. Чтобы не бодаться за числа.
• Пинговать коллег, если не отвечают. Пинговать их руководителей. Просить своего руководителя пингануть их руководителя.
• Не забывать про разные таймзоны коллег. Уточнять все нужное заранее.
• Локальные коммиты, не запушенные в репо, потеряются.
• Не удалять приложение аутентификатора. Не забыть установить его при смене телефона. Иначе утро пройдет в общении с IT‑саппортом.
• Не смотреть оранжевый ютуб и не гуглить как утилизировать 70 кг говядины под корпоративным впн.
• В телеграме включить in-app уведомления, чтобы не пропускать сообщения, когда сидишь в других чатах.
• В iOS отключить Siri Announce Calls, чтобы на созвоне она не спалила звонок со второй работы.
• Перед демо проверить, что приложение не вылетает прямо на первом экране и замокать недоделанный функционал.
Работа в корпорации отличается от работы в так любимых мной мелких студиях и стартапах-берлогах. В основном масштабом. Больше процессов, людей и командного взаимодействия. Меньше возможностей зашкериться и прохлаждаться.
Чтобы тупить поменьше и вдуплять побольше, приходится учиться на ходу. Иначе накапливается неэффективность, происходит мискоммуникация и едет кукуха. В какой-то момент я решил вести списочек таких ситуаций. Каждый пункт – мой конкретный факап, который произошел однажды и больше не повторялся.
После увольнения список пополняться перестал. Будет лежать здесь:
• Всегда должен быть установлен будильник. А лучше два. Тогда вероятность проспать дейли уменьшается.
• Работать намного приятнее, если утром принять душ, умыться, потренить, надеть чистое белье и плотно позавтракать.
• Чего нет в календаре – нет и в реальной жизни. Все рабочие события должны быть туда добавлены.
• По работе делать только необходимый минимум. Рефакторинг – для ускорения будущей работы.
• Знать примерные сроки закрытия своих задач. Предсказуемость – это главное.
• Если что-то блокирует пайплайн – отложить и переключиться на другие задачи.
• Мокать данные бэкэнда. Не ставить задачу на паузу из-за долгого ожидания апи.
• При общении с менеджментом больше бизнес деталей, меньше технических подробностей.
• Не транслировать пассивность.
• Никакой самодеятельности. Согласовывать доработки по дизайну и апи. Снимать с себя всю ответственность.
• UI-таски тестировать на небольших (480x800) и больших (1440x3120) экранах.
• Не копить долги по работе. Особенно в пятницу. На выходные уходить свободным от тяжелого груза задач.
• Заранее оповещать коллег о планируемых датах отпуска. Чтобы не бодаться за числа.
• Пинговать коллег, если не отвечают. Пинговать их руководителей. Просить своего руководителя пингануть их руководителя.
• Не забывать про разные таймзоны коллег. Уточнять все нужное заранее.
• Локальные коммиты, не запушенные в репо, потеряются.
• Не удалять приложение аутентификатора. Не забыть установить его при смене телефона. Иначе утро пройдет в общении с IT‑саппортом.
• Не смотреть оранжевый ютуб и не гуглить как утилизировать 70 кг говядины под корпоративным впн.
• В телеграме включить in-app уведомления, чтобы не пропускать сообщения, когда сидишь в других чатах.
• В iOS отключить Siri Announce Calls, чтобы на созвоне она не спалила звонок со второй работы.
• Перед демо проверить, что приложение не вылетает прямо на первом экране и замокать недоделанный функционал.
Как делать Android MVP-инди-пет-проект
Когда надо заделать Android-приложение с нуля, как минимально жизнеспособный продукт (MVP) или для индивидуального проекта (инди, пет), главная цель – быстро выпустить рабочий прототип, протестировать гипотезы на первых пользователях, выйти на рынок и получить обратную связь. В отличие от долгоживущих энтерпрайзов, масштабируемость и поддерживаемость мвп не так важна, а цена ошибок не высока.
Половина приложений отправится в утиль в следующие год-два, остальные будут улучшаться позже. Это значит, что на ранних этапах почти все устоявшиеся паттерны превратятся в антипаттерны. Потому что сожрут много времени и внимания. Выгоднее их отвергнуть как избыточные, а ресурс сохранить. Что именно можно пропустить:
• Многомодульность. Хватит одного модуля :app. Никто не запрещает раскладывать классы по папкам и переиспользовать. Конфигурация Gradle в моменте усложняет проект и увеличивает сроки разработки, особенно с >= 2 модулями на каждую фичу.
• Чистая архитектура. Кажется, мы дожили до времен, когда даже на уважаемых конференциях дядю боба с его луковицей выписывают из повестки. Сложная и многослойная архитектура часто не дает реальных преимуществ, а лишь привносит лишние церемонии на свое техобслуживание. Доходит до того, что разработчики пишут плагин для IDE, который им генерирует 20 классов на фичу.
• DI. Вместо использования фреймворков, таких, как Hilt, можно создавать экземпляры классов вручную. Или использовать сервис локатор. Это быстрее и проще, хоть и менее масштабируемо.
• Интерфейсы. Используются для обеспечения слабых связей между компонентами и упрощения тестирования. Часто можно увидеть Interactor и его реализацию InteractorImpl. Если мы контролируем весь код, жесткая связь между классами не будет проблемой. Методы можно вызывать напрямую из класса, который обрабатывает логику.
• KMP. Лучше начинать с нативного Android-приложения. Мультиплатформа постоянно подкидывает проблем, несмотря на обещанную стабильность. Вагон времени уходит на прописывание expect-actual.
• Миграция БД. Можно не делать, если база данных просто дублирует сетевой слой. Для Room вызывается fallbackToDestructiveMigration(), получаем дроп всех таблиц при увеличении номера версии.
• Строки. На начальном этапе можно не поддреживать интернационализацию и хардкодить текстовые строки прямо в UI приложения. Текст будет часто меняться, а добавление строк в strings.xml отбирать много времени.
• Собственная библиотека компонентов, стилей и шрифтов. Достаточно Material Components и шрифта Open Sans.
• Линтеры. Detekt и Lint анализируют код на предмет ошибок, стиля и соблюдения стандартов. Эти инструменты выдают множество предупреждений и замедляют процесс разработки. Она превращается в похождения в файлик со стилем для отключения очередной проверки. Линтеры полезны, когда основная функциональность будет готова. Пока этот момент не наступил, нужно в build.gradle прописать abortOnError = false.
• Самописные виджеты. Под любую штуку надо брать готовое решение с гитхаба. Нужен колорпикер или календарь – затянул зависимость. Позже можно переписать виджет под проект.
• Костыли. Все что другим запрещено – нам разрешено. Можно использовать GlobalScope, runBlocking, делать статические ссылки на Context. Это очень быстро и удобно.
• Преждевременные оптимизации. Рекомпозиции, энергосбережение, бенчмарки, кэши и буферизации. Современный смартфон почти наверняка не оценит этих усилий. Приложение и так будет работать нормально.
• Время запуска приложения. Использование AppStartup и ленивой инициализации, минимизация Application.onCreate и Activity.onCreate. Пользователю пофиг, запускается приложение 200 миллисекунд или 1.5 секунды, есть сплэш-скрин или нет его.
• Размер APK. R8, сплит по ABI, векторная графика, no-op библиотеки и транзитивные зависимости. Пользователю пофиг, весит приложение 20 мегабайт или 200.
Когда надо заделать Android-приложение с нуля, как минимально жизнеспособный продукт (MVP) или для индивидуального проекта (инди, пет), главная цель – быстро выпустить рабочий прототип, протестировать гипотезы на первых пользователях, выйти на рынок и получить обратную связь. В отличие от долгоживущих энтерпрайзов, масштабируемость и поддерживаемость мвп не так важна, а цена ошибок не высока.
Половина приложений отправится в утиль в следующие год-два, остальные будут улучшаться позже. Это значит, что на ранних этапах почти все устоявшиеся паттерны превратятся в антипаттерны. Потому что сожрут много времени и внимания. Выгоднее их отвергнуть как избыточные, а ресурс сохранить. Что именно можно пропустить:
• Многомодульность. Хватит одного модуля :app. Никто не запрещает раскладывать классы по папкам и переиспользовать. Конфигурация Gradle в моменте усложняет проект и увеличивает сроки разработки, особенно с >= 2 модулями на каждую фичу.
• Чистая архитектура. Кажется, мы дожили до времен, когда даже на уважаемых конференциях дядю боба с его луковицей выписывают из повестки. Сложная и многослойная архитектура часто не дает реальных преимуществ, а лишь привносит лишние церемонии на свое техобслуживание. Доходит до того, что разработчики пишут плагин для IDE, который им генерирует 20 классов на фичу.
• DI. Вместо использования фреймворков, таких, как Hilt, можно создавать экземпляры классов вручную. Или использовать сервис локатор. Это быстрее и проще, хоть и менее масштабируемо.
• Интерфейсы. Используются для обеспечения слабых связей между компонентами и упрощения тестирования. Часто можно увидеть Interactor и его реализацию InteractorImpl. Если мы контролируем весь код, жесткая связь между классами не будет проблемой. Методы можно вызывать напрямую из класса, который обрабатывает логику.
• KMP. Лучше начинать с нативного Android-приложения. Мультиплатформа постоянно подкидывает проблем, несмотря на обещанную стабильность. Вагон времени уходит на прописывание expect-actual.
• Миграция БД. Можно не делать, если база данных просто дублирует сетевой слой. Для Room вызывается fallbackToDestructiveMigration(), получаем дроп всех таблиц при увеличении номера версии.
• Строки. На начальном этапе можно не поддреживать интернационализацию и хардкодить текстовые строки прямо в UI приложения. Текст будет часто меняться, а добавление строк в strings.xml отбирать много времени.
• Собственная библиотека компонентов, стилей и шрифтов. Достаточно Material Components и шрифта Open Sans.
• Линтеры. Detekt и Lint анализируют код на предмет ошибок, стиля и соблюдения стандартов. Эти инструменты выдают множество предупреждений и замедляют процесс разработки. Она превращается в похождения в файлик со стилем для отключения очередной проверки. Линтеры полезны, когда основная функциональность будет готова. Пока этот момент не наступил, нужно в build.gradle прописать abortOnError = false.
• Самописные виджеты. Под любую штуку надо брать готовое решение с гитхаба. Нужен колорпикер или календарь – затянул зависимость. Позже можно переписать виджет под проект.
• Костыли. Все что другим запрещено – нам разрешено. Можно использовать GlobalScope, runBlocking, делать статические ссылки на Context. Это очень быстро и удобно.
• Преждевременные оптимизации. Рекомпозиции, энергосбережение, бенчмарки, кэши и буферизации. Современный смартфон почти наверняка не оценит этих усилий. Приложение и так будет работать нормально.
• Время запуска приложения. Использование AppStartup и ленивой инициализации, минимизация Application.onCreate и Activity.onCreate. Пользователю пофиг, запускается приложение 200 миллисекунд или 1.5 секунды, есть сплэш-скрин или нет его.
• Размер APK. R8, сплит по ABI, векторная графика, no-op библиотеки и транзитивные зависимости. Пользователю пофиг, весит приложение 20 мегабайт или 200.
• Адаптивный UI. Темы, динамические цвета, вырезы, складные устройства, большие экраны, планшеты, десктопы, часы и гарнитуры. Все это нет смысла поддерживать в начале разработки. Хотя гугл проделывает огромную работу, чтобы адаптивность работала из коробки без усилий с нашей стороны. Чем дальше, тем легче ее поддерживать.
• Доступность. Talkback, высококонтрастный текст, инверсия цветов, contentDescription, fontScale и порядок фокуса. Все это добавляется позднее.
• Тесты. Написание полноценных тестов может занять столько же времени, сколько и сама фича. Проверить функциональность можно вручную.
Как итог – кабаныч доволен темпами разработки. В будущем есть вероятность присесть на бенч, рефакторить и обмазываться лучшими практиками. Раньше времени не сгорел. Через год проект не полетел и закрылся – не обидно за вложенные силы. Не случился эффект безвозвратных потерь.
• Доступность. Talkback, высококонтрастный текст, инверсия цветов, contentDescription, fontScale и порядок фокуса. Все это добавляется позднее.
• Тесты. Написание полноценных тестов может занять столько же времени, сколько и сама фича. Проверить функциональность можно вручную.
Как итог – кабаныч доволен темпами разработки. В будущем есть вероятность присесть на бенч, рефакторить и обмазываться лучшими практиками. Раньше времени не сгорел. Через год проект не полетел и закрылся – не обидно за вложенные силы. Не случился эффект безвозвратных потерь.
Предпоследний отчет. За июль решена 31 задача уровня изи. Всего 339. Поднялся в рейтинге на 310 857 место. Выдали пятый почетный бейдж 200 Days Badge 2025.
• XOR Operation in an Array
• Average Salary Excluding the Minimum and Maximum Salary
• Path Crossing
• Can Make Arithmetic Progression From Sequence
• Reformat Date
• Number of Good Pairs
• Water Bottles
• Count Odd Numbers in an Interval Range
• Patients With a Condition
• Shuffle String
• Count Good Triplets
• Kth Missing Positive Number
• Make The String Great
• Three Consecutive Odds
• Thousand Separator
• Most Visited Sector in a Circular Track
• Detect Pattern of Length M Repeated K or More Times
• Matrix Diagonal Sum
• Replace All ?'s to Avoid Consecutive Repeating Characters
• Customer Who Visited but Did Not Make Any Transactions
• Special Positions in a Binary Matrix
• Bank Account Summary II
• Sum of All Odd Length Subarrays
• Rearrange Spaces Between Words
• Crawler Log Folder
• Design Parking System
• Special Array With X Elements Greater Than or Equal X
• Maximum Nesting Depth of the Parentheses
• Mean of Array After Removing Some Elements
• Largest Substring Between Two Equal Characters
• Minimum Changes To Make Alternating Binary String
#leetcode@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Как делать то, что не хочется
В жизни полно важных дел, которые даже начинать не хочется – тренировка, статья, презентация, резюме, план поездки. Их объединяет одно – желание отложить на потом. Если откладывать уже некуда – находится любой повод для промедления: ютуб, твиттер, телеграм, рилсы, уборка, шопинг, сплетни. Но рано или поздно придется сдвинуться с мертвой точки. От себя не убежать.
Чтобы сделать дело и гулять смело, надо разобраться, что нас стопорит. Никто не появился на свет бездействовать.
Анализ будет таким:
• Почему дела избегаются
• Почему пробуется все, кроме взять и сделать
• Как мозг ранжирует дела
• Как понять, что дело важное
• Как выполнить дело
• Как выполнить следующее дело
🏃♂️ Почему дела избегаются
Мозг предпочитает быстрые награды долгосрочной пользе. Этот плавающий в бульоне орган даже в полном покое потребляет 20% всей энергии организма. В условиях дефицитного рациона такая прожорливость становится критичной. Поэтому поощряются поведенческие схемы, позволяющие экономить калории.
Древняя прошивка торгуется с эволюционно новыми лобными долями, отвечающими за самоконтроль и целеполагание. Мозг постоянно оценивает сколько энергии, внимания и эмоционального напряжения потребует предстоящая работа. Если выгода не перекрывает издержки, мотивация падает.
Мы откладываем дела, соответствующие нашим лучшим интересам, осознавая при этом негативные последствия. Боль, скука и тревожное ожидание неудачи активируют те же участки, что и сигнал физической угрозы. Возникает замкнутый цикл избегания: задача вызывает тревогу → откладывание → кратковременное облегчение → усиление тревоги.
💻 Почему пробуется все, кроме взять и сделать
Мы превращаем взять и сделать в бесконечную череду подготовительных действий. Подменяем неприятное действие приятным ощущение контроля. Химия та же, но усилий меньше.
Пока задача «в планах», она безупречна. Стоит начать, и происходит столкновение с реальностью, критикой и сомнениями. Альтернативные процессы вместо работы дают чувство занятости и спасают от страха провала: «я не ленивая жопа, я занят». Ожидание идеальных условий отдаляет момент, когда придётся выдать результат и потенциально столкнуться с его несовершенствами.
К несчастью, стресс только усиливается. Время идёт, идеальные условия не наступают, а значимость результата в голове раздувается до ужасающих масштабов. В конце концов, никакие танцы с бубном вокруг задачи не принесут того удовлетворения, которое даст её успешное завершение.
😑 Как мозг ранжирует дела
Вычислительный бюджет ограничен, поэтому мозг быстро сортирует события. Сравнивая ожидаемую награду с затратами энергии, времени и риском ошибки. Действия без эмоционального всплеска и новизны сразу уходят в фоновый шум.
Личный опыт отдельно окрашивает оценку. Если похожий эпизод прошёл без награды и опасности, дело получает ярлык «нейтрально» и отправляется в отстойник приоритетов. Реальная ценность задачи может быть высокой, но если награда отложена, эмоции слабы, новизна нулевая, а цель сформирована туманно – сигнал о важности не пройдет. Поэтому задачи «важно, но не срочно» требуют сознательной воли.
Также обесцениваются дела без ощутимой награды вообще. Рутина без явного бонуса или проекты с неопределенным результатом воспринимаются особенно скучными. Низкая вероятность, что усилия окупятся помноженная на низкую ценность приводит к решению экономить энергию. Хотя выигрыш может быть скрыт или отдален.
😊 Как понять что дело важное
Если ты подумал о нем больше пяти раз – это сигнал о важности. Повторяющиеся мысли прямо указывают на высокий приоритет.
Есть и физиологическая подсказка: важные, но трудные действия вызывают лёгкое внутреннее «упрямство» – мозг оценивает усилия и риски. Ощущение сопротивления при ясном понимании отдаленной пользы говорит о действительной значимости. Иначе спора не было бы вовсе.
Сложим ценность, последствия невыполнения и уникальность момента – получим почти инженерную схему принятия решения. Чем отчётливее каждая грань, тем выше приоритет, независимо от того, насколько задача приятна сейчас.
В жизни полно важных дел, которые даже начинать не хочется – тренировка, статья, презентация, резюме, план поездки. Их объединяет одно – желание отложить на потом. Если откладывать уже некуда – находится любой повод для промедления: ютуб, твиттер, телеграм, рилсы, уборка, шопинг, сплетни. Но рано или поздно придется сдвинуться с мертвой точки. От себя не убежать.
Чтобы сделать дело и гулять смело, надо разобраться, что нас стопорит. Никто не появился на свет бездействовать.
Анализ будет таким:
• Почему дела избегаются
• Почему пробуется все, кроме взять и сделать
• Как мозг ранжирует дела
• Как понять, что дело важное
• Как выполнить дело
• Как выполнить следующее дело
Мозг предпочитает быстрые награды долгосрочной пользе. Этот плавающий в бульоне орган даже в полном покое потребляет 20% всей энергии организма. В условиях дефицитного рациона такая прожорливость становится критичной. Поэтому поощряются поведенческие схемы, позволяющие экономить калории.
Древняя прошивка торгуется с эволюционно новыми лобными долями, отвечающими за самоконтроль и целеполагание. Мозг постоянно оценивает сколько энергии, внимания и эмоционального напряжения потребует предстоящая работа. Если выгода не перекрывает издержки, мотивация падает.
Мы откладываем дела, соответствующие нашим лучшим интересам, осознавая при этом негативные последствия. Боль, скука и тревожное ожидание неудачи активируют те же участки, что и сигнал физической угрозы. Возникает замкнутый цикл избегания: задача вызывает тревогу → откладывание → кратковременное облегчение → усиление тревоги.
Мы превращаем взять и сделать в бесконечную череду подготовительных действий. Подменяем неприятное действие приятным ощущение контроля. Химия та же, но усилий меньше.
Пока задача «в планах», она безупречна. Стоит начать, и происходит столкновение с реальностью, критикой и сомнениями. Альтернативные процессы вместо работы дают чувство занятости и спасают от страха провала: «я не ленивая жопа, я занят». Ожидание идеальных условий отдаляет момент, когда придётся выдать результат и потенциально столкнуться с его несовершенствами.
К несчастью, стресс только усиливается. Время идёт, идеальные условия не наступают, а значимость результата в голове раздувается до ужасающих масштабов. В конце концов, никакие танцы с бубном вокруг задачи не принесут того удовлетворения, которое даст её успешное завершение.
Вычислительный бюджет ограничен, поэтому мозг быстро сортирует события. Сравнивая ожидаемую награду с затратами энергии, времени и риском ошибки. Действия без эмоционального всплеска и новизны сразу уходят в фоновый шум.
Личный опыт отдельно окрашивает оценку. Если похожий эпизод прошёл без награды и опасности, дело получает ярлык «нейтрально» и отправляется в отстойник приоритетов. Реальная ценность задачи может быть высокой, но если награда отложена, эмоции слабы, новизна нулевая, а цель сформирована туманно – сигнал о важности не пройдет. Поэтому задачи «важно, но не срочно» требуют сознательной воли.
Также обесцениваются дела без ощутимой награды вообще. Рутина без явного бонуса или проекты с неопределенным результатом воспринимаются особенно скучными. Низкая вероятность, что усилия окупятся помноженная на низкую ценность приводит к решению экономить энергию. Хотя выигрыш может быть скрыт или отдален.
Если ты подумал о нем больше пяти раз – это сигнал о важности. Повторяющиеся мысли прямо указывают на высокий приоритет.
Есть и физиологическая подсказка: важные, но трудные действия вызывают лёгкое внутреннее «упрямство» – мозг оценивает усилия и риски. Ощущение сопротивления при ясном понимании отдаленной пользы говорит о действительной значимости. Иначе спора не было бы вовсе.
Сложим ценность, последствия невыполнения и уникальность момента – получим почти инженерную схему принятия решения. Чем отчётливее каждая грань, тем выше приоритет, независимо от того, насколько задача приятна сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM
Слона нужно жрать по кусочкам, потому что громадная задача парализует, а маленький шаг – нет. Договорись с собой, что поработаешь над задачей только пять минут. Разреши остановиться, если работа окажется невыносимой. Такая маленькая «сделка» снижает психологический порог. На краткое усилие легче согласиться.
Практика показывает, что, начав, мы почти никогда не бросаем дело через пять минут. Первоначальное сопротивление отступает, тревожность падает, избегание сменяется вовлеченностью. Правило пяти минут фактически обманывает мозг: ради снятия стартового мандража он соглашается потрудиться на короткое время. Через 10-15 минут непрерывной работы саморефлексия заметно приглушается и ты оказываешься в состоянии, когда время течёт незаметно, а работа «идёт сама».
На примере написания текста: едва появляется крошечный прогресс (первый абзац), мозг снижает «цену» усилия и включает лампочку «выигрыш возможен». Повышается бдительность и запускается петля самоподкрепления – рычаг, который тянет тебя дальше. Наступает состояние потока, когда задача выполняется точнее и быстрее, чем под нажимом волевой дисциплины. Мы больше не думаем об объёме работы, а концентрируемся на ближайшем кусочке. Это не эзотерика. Ничего не получится, если бесконечно собираться с силами и не начать действовать.
К сожалению, мы забываем о «пятиминутке» также, как о зонте в ливень. Паттерн жив пока держится в цепочке внимания. Контекст сменился – цепочка схлопнулась. Сознание сразу заполнилось новыми тревогами.
Также добавляется контекстная привязка. Установка живёт вместе с окружением: сидишь в любимом кресле, открыт редактор, падает знакомый угол света. Сменил комнату или посмотрел в телефон – «крючок» обрывается и мозг уже не связывает свежий контекст с прежним правилом. Я однажды передвинул стол в комнате и былая концентрация утратилась, пока не вернул его обратно.
Закрывая задачу, мы завышаем уверенность в своей дисциплине («справился сейчас – справлюсь и дальше») и недооцениваем предстоящее сопротивление. То, что правило забывается, не дискредитирует метод. Ему нужен новый крючок внимания перед каждым заходом.
…
Нежелание браться за работу – биологический расчёт, а не обвинительный приговор. Поняв логику этого расчёта, ты получаешь инструменты, чтобы убедить мозг играть на своей стороне. Применяй правило пяти минут к каждой отложенной задаче. Начатое хочется довести до конца. Аппетит приходит во время еды. А продолжать всегда легче, чем начинать.
Please open Telegram to view this post
VIEW IN TELEGRAM
Свистоперделки
Есть категория постов в технических тг-каналах, полезность которых стремится к отрицательной. Речь об ископаемых гитхаб-репозиториях с какой-нибудь юайной свистоперделкой: ленточки, стильные прогресс-бары, кнопка с прогрессом, виджеты разблокировки и прочее и прочее и прочее.
Востребованы ли свистоперделки в коммерческой разработке? Никак нет. Даром не нужны. Все как-то обходятся стандартными вьюхами, собственной библиотекой компонентов и нативными анимациями.
Можно пофантазировать, что когда-нибудь твой менеджер сойдет с ума и вместо обычной кнопки-сосиски захочет переливающийся градиентом фаербол, с вылетающими при клике конфетти. И вот, с сохраненного поста сдувается пыль, усилия, ранее затраченные на переход по ссылке, чтение ридми и менеджмент закладок, окупаются. Но, почти наверняка, такого не будет. Время потеряно безвозвратно. Внимание ушло в никуда.
Свистоперделки хороши только для заполнения звенящей пустоты контентной ленты, когда нет идей для постов. При этом подобные публикации развивают цифровой накопительный синдром и эксплуатируют человеческий страх упустить важное. Ты либо пересылаешь их себе, чтобы никогда больше не открыть, либо вырабатываешь баннерную слепоту и просто пролистываешь.
Подход к потреблению информации должен быть не реактивным (пассивное следование), а императивным (целенаправленный поиск). С постепенным развитием включается закон убывающей отдачи: информация начинает приносить меньше пользы, чем реальный опыт. Поэтому эффективнее работает контекстное обучение, а усваивается то, что сразу применяется в работе.
К тому моменту, когда свистоперделка реально пригодится, ее разработчик уйдет в запой, а репозиторий в архив. Все равно придется в моменте искать поддерживаемое решение. Работает это так: вдруг понадобился виджет календаря, заряжаем в o3 промпт следующего содержания: «найди на гитхабе виджет календаря, на compose, проект активно развивается, больше 100 звезд у репо, есть выбор интервала дат». Нейросеть плюется результатами: раз, два и три. Применяем и радуемся.
Есть категория постов в технических тг-каналах, полезность которых стремится к отрицательной. Речь об ископаемых гитхаб-репозиториях с какой-нибудь юайной свистоперделкой: ленточки, стильные прогресс-бары, кнопка с прогрессом, виджеты разблокировки и прочее и прочее и прочее.
Востребованы ли свистоперделки в коммерческой разработке? Никак нет. Даром не нужны. Все как-то обходятся стандартными вьюхами, собственной библиотекой компонентов и нативными анимациями.
Можно пофантазировать, что когда-нибудь твой менеджер сойдет с ума и вместо обычной кнопки-сосиски захочет переливающийся градиентом фаербол, с вылетающими при клике конфетти. И вот, с сохраненного поста сдувается пыль, усилия, ранее затраченные на переход по ссылке, чтение ридми и менеджмент закладок, окупаются. Но, почти наверняка, такого не будет. Время потеряно безвозвратно. Внимание ушло в никуда.
Свистоперделки хороши только для заполнения звенящей пустоты контентной ленты, когда нет идей для постов. При этом подобные публикации развивают цифровой накопительный синдром и эксплуатируют человеческий страх упустить важное. Ты либо пересылаешь их себе, чтобы никогда больше не открыть, либо вырабатываешь баннерную слепоту и просто пролистываешь.
Подход к потреблению информации должен быть не реактивным (пассивное следование), а императивным (целенаправленный поиск). С постепенным развитием включается закон убывающей отдачи: информация начинает приносить меньше пользы, чем реальный опыт. Поэтому эффективнее работает контекстное обучение, а усваивается то, что сразу применяется в работе.
К тому моменту, когда свистоперделка реально пригодится, ее разработчик уйдет в запой, а репозиторий в архив. Все равно придется в моменте искать поддерживаемое решение. Работает это так: вдруг понадобился виджет календаря, заряжаем в o3 промпт следующего содержания: «найди на гитхабе виджет календаря, на compose, проект активно развивается, больше 100 звезд у репо, есть выбор интервала дат». Нейросеть плюется результатами: раз, два и три. Применяем и радуемся.
Баги из рабочей практики
Самая непредсказуемая часть любого приложения – человек за клавиатурой. Нам предопределено хлебать смузи и думать о вечном, сидя на безусловном базовом мешке. А мы ломаем машинные процессы из-за своей иррациональности.
Но пока, именно благодаря ошибкам я открыл для себя автоматические тесты, обязательное код-ревью и канареечную раскатку.
Как баги всплывают на поверхность:
• отловил самостоятельно в процессе разработки
• упал автоматический тест
• не прошли код-ревью
• тестировщик вернул задачу
• прилетело из крэшлитики
• аудит или отчет безопасников
• обратная связь от пользователей
Также пришлось поработать над двумя соцсетями. В каждой был подсайт или публичный топик, где юзеры описывали баги. Эти посты превращались в джира-тикеты. На одной работе был канал в слаке, куда сыпались оценки с отзывами из Google Play. Если ставили одну звезду, кабаныч тегал нас под сообщением.
А вот и сами баги:
1. В старых версиях Android Studio линтер не сообщал, что метод
2. На стартовом экране был какой-то сетевой запрос. Обработку ошибок для него не сделали. Однажды он отвалился совсем. Юзеры запускали апп, пялились на сплэшскрин и не могли навигироваться дальше.
3. Неправильно настроил
4. Был экран на WebView, замаскированный под нативный интерфейс – позже его собирались переделать. Ссылки с этого экрана должны были открываться в Chrome Custom Tabs, но из-за сломанного перехватчика
5. Приложение оперировало квантами, штуками, рублями и копейками. Из-за неправильного округления итоговая сумма расходилась на 1 копейку. Запрос возвращал ошибку. Флоу блокировался. Познакомился с
6. Забыл удалить моковые данные. Бывает бэк прилег, а разработка должна продолжаться. Повесил на кнопку навигацию на экран, недоступный без интернета. В запрос добавил
7. Метод бана юзера в API с параметром
8. Не добавил обработку http-кода 204 и схлопотал
9. Выпустили релиз с
10. Включение вспышки срабатывало с заметной задержкой, потому что вызывало рекомпозицию и пересоздание инстанса камеры. Затащить камеру в Compose было непросто, поскольку API ориентирован на систему View.
11. На экране поста в заголовках добавлялась иконка галочки в конце. Иногда она переносилась отдельно на новую строку, отчего у дизайнера дергался глаз. Я не придумал ничего лучше, чем объединить ее с последним словом: вынул слово, объединил с иконкой в Span, вернул обратно. Работало прекрасно, пока не вышла статья с очень длинным последним словом в заголовке. Контент уехал за пределы экрана.
12. Делал редактор текста с поддержкой markdown: курсив, жирный, жирный курсив и так далее. Неожиданно в сервисе запретили мат. Пользователи стали маскировать его многочисленными звездочками, к чему редактор оказался не готов. Разметка пустилась в пляс.
13. Поехала верстка из-за того, что какая-то библиотека затащила самописный
14. Мутные операторы котлин-коллекций:
Самая непредсказуемая часть любого приложения – человек за клавиатурой. Нам предопределено хлебать смузи и думать о вечном, сидя на безусловном базовом мешке. А мы ломаем машинные процессы из-за своей иррациональности.
Но пока, именно благодаря ошибкам я открыл для себя автоматические тесты, обязательное код-ревью и канареечную раскатку.
Как баги всплывают на поверхность:
• отловил самостоятельно в процессе разработки
• упал автоматический тест
• не прошли код-ревью
• тестировщик вернул задачу
• прилетело из крэшлитики
• аудит или отчет безопасников
• обратная связь от пользователей
Также пришлось поработать над двумя соцсетями. В каждой был подсайт или публичный топик, где юзеры описывали баги. Эти посты превращались в джира-тикеты. На одной работе был канал в слаке, куда сыпались оценки с отзывами из Google Play. Если ставили одну звезду, кабаныч тегал нас под сообщением.
А вот и сами баги:
1. В старых версиях Android Studio линтер не сообщал, что метод
setForeground появился в Android 6. Вызвал его без проверки уровня API и приложение грохнулось в рантайме на Android 5. Так я узнал, что у нас еще есть такие пользователи.2. На стартовом экране был какой-то сетевой запрос. Обработку ошибок для него не сделали. Однажды он отвалился совсем. Юзеры запускали апп, пялились на сплэшскрин и не могли навигироваться дальше.
3. Неправильно настроил
launchMode и интенты. У пользователей в Recent Menu отображались две копии нашего приложения.4. Был экран на WebView, замаскированный под нативный интерфейс – позже его собирались переделать. Ссылки с этого экрана должны были открываться в Chrome Custom Tabs, но из-за сломанного перехватчика
shouldOverrideUrlLoading открывались в самом WebView.5. Приложение оперировало квантами, штуками, рублями и копейками. Из-за неправильного округления итоговая сумма расходилась на 1 копейку. Запрос возвращал ошибку. Флоу блокировался. Познакомился с
BigDecimal и roundToInt.6. Забыл удалить моковые данные. Бывает бэк прилег, а разработка должна продолжаться. Повесил на кнопку навигацию на экран, недоступный без интернета. В запрос добавил
delay(10_000), чтобы протестировать лоадинг. Моки улетели в репозиторий.7. Метод бана юзера в API с параметром
duration ожидал либо -1 (пермобан), либо таймстамп в секундах. Из-за kotlin nullable в одной из функций значение «на день» превратилось в -1 и юзеры забанились навсегда.8. Не добавил обработку http-кода 204 и схлопотал
NoSuchElementException. Запрос выполнился, но выбранная сигнатура была несовместима с пустым телом.9. Выпустили релиз с
NullPointerException: поспешно добавил ViewBinding в новые фрагменты, не прочитав документацию.10. Включение вспышки срабатывало с заметной задержкой, потому что вызывало рекомпозицию и пересоздание инстанса камеры. Затащить камеру в Compose было непросто, поскольку API ориентирован на систему View.
11. На экране поста в заголовках добавлялась иконка галочки в конце. Иногда она переносилась отдельно на новую строку, отчего у дизайнера дергался глаз. Я не придумал ничего лучше, чем объединить ее с последним словом: вынул слово, объединил с иконкой в Span, вернул обратно. Работало прекрасно, пока не вышла статья с очень длинным последним словом в заголовке. Контент уехал за пределы экрана.
12. Делал редактор текста с поддержкой markdown: курсив, жирный, жирный курсив и так далее. Неожиданно в сервисе запретили мат. Пользователи стали маскировать его многочисленными звездочками, к чему редактор оказался не готов. Разметка пустилась в пляс.
13. Поехала верстка из-за того, что какая-то библиотека затащила самописный
ConstraintLayout. Исключил транзитивную зависимость через exclude.14. Мутные операторы котлин-коллекций:
all, any и none ведут себя по-разному на пустых коллекциях, что провоцирует логические ошибки: all{…} отдаёт true за счёт «вакуумной истины», когда нет ни одного потенциального контрпримера. any() возвращает false, а none() – true. Я уже несколько раз на этом обжигался. Еще и курсор любит неудачно применять эти функции в коде.15. При рефакторинге класса-обёртки для RxJava нашёл 40 перегрузок метода
16. ExoPlayer оказался для меня самым проблемным SDK: документация никакая, примеров нормальных не найти. Я не знал, что приложение должно отслеживать входящий звонок, чтобы передавать ему аудиофокус, ставя проигрывание на паузу. У наших пользователей после окончания звонка внезапно воспроизводилось видео из свернутого приложения.
17. Делали кэширование видеозаписей. Забыли про пользователей в роуминге. Посыпались жалобы от туристов, у которых наше приложение съело весь трафик. С тех пор эту историю выслушивают все, кто меня собесит.
18. С Paging Library огреб проблем не меньше, чем с эксоплеером. Прокрутка начала троттлиться из-за неправильного сохранения PagingKey в Room.
19. На бэке добавился новый статус, который в таблице Room хранился в поле с типом
20. Бэк стал слать пустой
21. Поймал неконсистентную эмиссию данных из таблиц Room. Flow нужно собирать в
22. Отвалилось отображение пушей. Потому что загрузил метод
23. Забыл добавить готовые ProGuard-директивы из файла
24. Разнес сборку debug и release на отдельные CI-джобы, но не настроил общий Gradle-кэш. Раннеру не хватило памяти: debug собрался, а release отменился.
25. Для тестирования ML Kit временно добавил в манифест атрибут
26. Загрузил в репозиторий на гитхабе keystore-файл и ключи для подписи релизной сборки, полагая что приватность репозитория гарантирует безопасность.
27. В комментарий к задаче в джире опубликовал фрагмент лога, в котором засветился секретный токен.
28. На одной работе запушил коммит, подписанный корпоративной электронной почтой со второй работы. Теперь не использую
29. Сидел на дейли в AirPods. Вышел встретить курьера, который потерял подъезд. Чтобы расслышать его, нажал кнопку на наушнике – не заметив, что тем самым включил микрофон. Обматерил и курьера и всех на созвоне.
30. Конечно же на первой работе я закоммитился сделать таску за два дня, не проверив доступы. Накануне вечером открываю фигму, а там restricted access. Cпас коллега, у которого были права выдавать инвайты.
Список неполный, постоянно пополняется.
Под конец несколько духоподъемных цитат, чтобы снизить чувство бесполезности усилий:
😠 Не ошибается тот, кто ничего не делает.
😚 Важно не никогда не ошибаться, а побеждать чаще, чем ошибаться.
🥃 Единственная настоящая ошибка – та, из которой ты ничего не извлёк.
onSubscribe с разными параметрами. IDE подсветила половину как неиспользуемые и я их радостно удалил. В результате вызовы переключились на другие перегрузки, параметры изменились и асинхронщина поломалась.16. ExoPlayer оказался для меня самым проблемным SDK: документация никакая, примеров нормальных не найти. Я не знал, что приложение должно отслеживать входящий звонок, чтобы передавать ему аудиофокус, ставя проигрывание на паузу. У наших пользователей после окончания звонка внезапно воспроизводилось видео из свернутого приложения.
17. Делали кэширование видеозаписей. Забыли про пользователей в роуминге. Посыпались жалобы от туристов, у которых наше приложение съело весь трафик. С тех пор эту историю выслушивают все, кто меня собесит.
18. С Paging Library огреб проблем не меньше, чем с эксоплеером. Прокрутка начала троттлиться из-за неправильного сохранения PagingKey в Room.
19. На бэке добавился новый статус, который в таблице Room хранился в поле с типом
Enum. Старая версия приложения при чтении передавала эту незнакомую строку в Enum.valueOf(). Вылет с IllegalArgumentException.20. Бэк стал слать пустой
id, надо было в Room для primary-ключа сделать такое: id.ifEmpty { portion }. Перепутал portion с локальным полем position, которое постоянно инкрементируется. Надобавлялась куча дубликатов.21. Поймал неконсистентную эмиссию данных из таблиц Room. Flow нужно собирать в
combine(), а операции вставки выполнять в единой транзакции.22. Отвалилось отображение пушей. Потому что загрузил метод
onMessageReceived тяжёлой асинхронной логикой. FCM держит FirebaseMessagingService в памяти недолго, затем прибивает. Об этом я не знал.23. Забыл добавить готовые ProGuard-директивы из файла
missing_rules, которые указываются при выполнении таски minify. Релизное приложение вылетело в рантайме.24. Разнес сборку debug и release на отдельные CI-джобы, но не настроил общий Gradle-кэш. Раннеру не хватило памяти: debug собрался, а release отменился.
25. Для тестирования ML Kit временно добавил в манифест атрибут
android:debuggable="true". Коммит попал в репозиторий. Специалисты по безопасности потребовали убрать этот флаг из релизной сборки.26. Загрузил в репозиторий на гитхабе keystore-файл и ключи для подписи релизной сборки, полагая что приватность репозитория гарантирует безопасность.
27. В комментарий к задаче в джире опубликовал фрагмент лога, в котором засветился секретный токен.
28. На одной работе запушил коммит, подписанный корпоративной электронной почтой со второй работы. Теперь не использую
git config --global.29. Сидел на дейли в AirPods. Вышел встретить курьера, который потерял подъезд. Чтобы расслышать его, нажал кнопку на наушнике – не заметив, что тем самым включил микрофон. Обматерил и курьера и всех на созвоне.
30. Конечно же на первой работе я закоммитился сделать таску за два дня, не проверив доступы. Накануне вечером открываю фигму, а там restricted access. Cпас коллега, у которого были права выдавать инвайты.
Список неполный, постоянно пополняется.
Под конец несколько духоподъемных цитат, чтобы снизить чувство бесполезности усилий:
Please open Telegram to view this post
VIEW IN TELEGRAM
Мой топ за свои деньги сяоми расперло от андроид разработки.
Долгие сессии отладки по кабелю плохо сказываются на батарее смартфона. Экран не гаснет, заряд почти всё время у верхней границы. Для литий-ионных аккумуляторов это худшая комбинация. Высокий уровень заряда вместе с повышенной температурой ускоряет деградацию. Батарея вздувается и поднимает крышку.
Предотвратить такое можно беспроводной отладкой, прохладным рабочим местом, снятым чехлом и отсутствием мягких поверхностей. Чем меньше времени устройство проводит на 100% и в тепле, тем дольше прослужит батарея.
Помогают и системные ограничения заряда. В настройках включить всякие там лимиты, protect battery и adaptive charging. Чтобы зарядка останавливалась на 80%.
Даже не знаю, что теперь делать с этим толстячком. Пиксель и самсунги так со мной не поступали. Надеюсь, он не спалит мне квартиру.
Долгие сессии отладки по кабелю плохо сказываются на батарее смартфона. Экран не гаснет, заряд почти всё время у верхней границы. Для литий-ионных аккумуляторов это худшая комбинация. Высокий уровень заряда вместе с повышенной температурой ускоряет деградацию. Батарея вздувается и поднимает крышку.
Предотвратить такое можно беспроводной отладкой, прохладным рабочим местом, снятым чехлом и отсутствием мягких поверхностей. Чем меньше времени устройство проводит на 100% и в тепле, тем дольше прослужит батарея.
Помогают и системные ограничения заряда. В настройках включить всякие там лимиты, protect battery и adaptive charging. Чтобы зарядка останавливалась на 80%.
Даже не знаю, что теперь делать с этим толстячком. Пиксель и самсунги так со мной не поступали. Надеюсь, он не спалит мне квартиру.
Накатил новейший Android 16 на древний Сяоми
И он даже не окирпичился.
Пиксель и прочие благородные устройства могут получать до 7 лет обновлений Android. Остальные, в том числе мой Xiaomi Redmi Note 8T 2019 года, довольствуются меньшим.
Сяоми поставлялся с Android 9 на борту. Потом обновился до Android 10. Потом до Android 11. На этом все. Больше никаких официальных релизов не прилетало.
Когда вышел Andorid 12 я решил взять ситуацию в свои руки. Взломал загрузчик и накатил Android 12. А через год и Android 13. Потом смартфон слегка припух и я его отложил. Но сегодня решил, что хоть он и помирает, с трудом включается и заряжается, стресс-тест в виде установки Android 16 потянет.
Чтобы накатывать новые образы требуется разблокировать загрузчик. Это делается через Mi Account и специальную программу с сайта Xiaomi. Ожидание разблокировки зависит от политики производителя, конкретной модели и региона. Это делается для сдерживания массовой перепрошивки и борьбы с серым импортом. Я ждал 30 дней. Таймер начинает отсчет после первой попытки разблокировки в Mi Unlock. Xiaomi хранит таймер на своих серверах, поэтому обойти его невозможно. Через месяц, при включении устройства появилась иконка открытого замка. Загрузчик взломан.
С устройства убираем блокировку экрана, коды и отпечатки.
В настройках разработчика включаем отладку по USB.
Подключаем смартфон к ПК по проводу.
Скачиваем platform-tools для работы с adb.
Выключаем устройство. Включаем и на 5 секунд зажимаем Power + Volume Down. Попадаем в меню fastboot. На Xiaomi fastboot-режим выглядит как картинка с кроликом, который чинит андроид. В нём нет меню – это просто режим, в котором телефон ждёт команды с ПК по USB.
На ПК в терминале переходим в папку platform-tools и вызываем
Устанавливаем на устройство кастомный recovery. Подойдут TWRP или OrangeFox. Оба хороши, мне больше нравится последний. Скачиваем recovery.img и перемещаем его в папку platform-tools.
Теперь прошиваем кастомный рекавери, чтобы уже из него ставить Andorid 16. Вызываем
В рекавери будет UI-интерфейс. В обязательном порядке нужно сделать очистку данных (Wipe Data). А если переходишь с MIUI или другой сильно отличающейся прошивки – дополнительно Format Data (отдельная вкладка в Wipe, надо ввести yes). Это удалит все из внутренеей памяти и уберет шифрование, из-за которого часто бывает bootloop (бесконечная перезагрузка). После форматирования возвращаемся в главное меню и перезагружаем recovery (Reboot → Recovery), чтобы перемонтировать память.
Теперь скачиваем образ Android 16. Я взял первый попавшийся отсюда. Есть в интернете люди, которым не лень их монтировать. Весит 2GB. Перемещаем его в platform-tools и командой
Образ устанавливается. Смартфон перезагружается. Можно пользоваться.
Все это занимает ~полчаса, просим чатгпт вести по шагам.
Забавно, что ОС думает, что мое устройство это пиксель. Я терпеть не могу прошивки MIUI от сяоми и OneUI от самсунга. Только голый андроид. Только чистый Pixel Experience. Ничего лишнего.
Через год накатим Android 17.
И он даже не окирпичился.
Пиксель и прочие благородные устройства могут получать до 7 лет обновлений Android. Остальные, в том числе мой Xiaomi Redmi Note 8T 2019 года, довольствуются меньшим.
Сяоми поставлялся с Android 9 на борту. Потом обновился до Android 10. Потом до Android 11. На этом все. Больше никаких официальных релизов не прилетало.
Когда вышел Andorid 12 я решил взять ситуацию в свои руки. Взломал загрузчик и накатил Android 12. А через год и Android 13. Потом смартфон слегка припух и я его отложил. Но сегодня решил, что хоть он и помирает, с трудом включается и заряжается, стресс-тест в виде установки Android 16 потянет.
Чтобы накатывать новые образы требуется разблокировать загрузчик. Это делается через Mi Account и специальную программу с сайта Xiaomi. Ожидание разблокировки зависит от политики производителя, конкретной модели и региона. Это делается для сдерживания массовой перепрошивки и борьбы с серым импортом. Я ждал 30 дней. Таймер начинает отсчет после первой попытки разблокировки в Mi Unlock. Xiaomi хранит таймер на своих серверах, поэтому обойти его невозможно. Через месяц, при включении устройства появилась иконка открытого замка. Загрузчик взломан.
С устройства убираем блокировку экрана, коды и отпечатки.
В настройках разработчика включаем отладку по USB.
Подключаем смартфон к ПК по проводу.
Скачиваем platform-tools для работы с adb.
Выключаем устройство. Включаем и на 5 секунд зажимаем Power + Volume Down. Попадаем в меню fastboot. На Xiaomi fastboot-режим выглядит как картинка с кроликом, который чинит андроид. В нём нет меню – это просто режим, в котором телефон ждёт команды с ПК по USB.
На ПК в терминале переходим в папку platform-tools и вызываем
./fastboot devices. Если все ок – видим наше устройство в списке подключенных.Устанавливаем на устройство кастомный recovery. Подойдут TWRP или OrangeFox. Оба хороши, мне больше нравится последний. Скачиваем recovery.img и перемещаем его в папку platform-tools.
Теперь прошиваем кастомный рекавери, чтобы уже из него ставить Andorid 16. Вызываем
./fastboot flash recovery recovery.img. После установки перезагружаемся и при включении зажимаем уже Power + Volume Up.В рекавери будет UI-интерфейс. В обязательном порядке нужно сделать очистку данных (Wipe Data). А если переходишь с MIUI или другой сильно отличающейся прошивки – дополнительно Format Data (отдельная вкладка в Wipe, надо ввести yes). Это удалит все из внутренеей памяти и уберет шифрование, из-за которого часто бывает bootloop (бесконечная перезагрузка). После форматирования возвращаемся в главное меню и перезагружаем recovery (Reboot → Recovery), чтобы перемонтировать память.
Теперь скачиваем образ Android 16. Я взял первый попавшийся отсюда. Есть в интернете люди, которым не лень их монтировать. Весит 2GB. Перемещаем его в platform-tools и командой
./adb push android16.zip /sdcard/ отправляем в память устройства. В рекавери переходим в каталог sdcard, выбираем архив и свайпаем для установки.Образ устанавливается. Смартфон перезагружается. Можно пользоваться.
Все это занимает ~полчаса, просим чатгпт вести по шагам.
Забавно, что ОС думает, что мое устройство это пиксель. Я терпеть не могу прошивки MIUI от сяоми и OneUI от самсунга. Только голый андроид. Только чистый Pixel Experience. Ничего лишнего.
Через год накатим Android 17.