iOS Makes Me Hate
3.94K subscribers
1.16K photos
169 videos
15 files
1.33K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Жить надо так, чтобы про тебя сняли такой видос
162
🌿 Оптимизация UI: Разгрузка главного потока

Продолжаю рубрику улучшения производительности наших кнопок. В прошлом посте мы поговорили про Offscreen Rendering и чем он мешает. В этом мы поговорим про главный поток.

Как мы знаем, избыточная загрузка главного потока сильно влияет на зависания. Работа, что выполняется в основном потоке, влияет как на задержку между входящим пользовательским событием и его обновлением экрана. А также влияет и на максимальную частоту обновлений экрана.

Если задержка взаимодействия с пользователем становится больше 100 мс, она начинает становиться заметной и приводит к зависанию. Для плавного и непрерывного движения новый кадр должен быть готов при каждом обновлении экрана.

🧬 Советы по оптимизации:
- Избегайте задач, которые не должны выполняться в основного потоке, даже асинхронно.
- Убедитесь, что ваше приложение использует основной поток только для взаимодействия с пользовательским интерфейсом

Используйте Main Thread Checker или Watchdog

🟣 Main Thread Checker — это инструмент в рантайме, который выдает предупреждение, когда вызовы системного API, которые должны выполняться в основном потоке, например операции пользовательского интерфейса, неправильно вызываются в фоновом потоке.

🟣 Watchdog — В iOS операционная система использует watchdog, который отслеживает и удаляет неотвечающие приложения. Если ваше приложение слишком долго блокирует основной поток, система уничтожит его. В отчетах о сбоях вы можете определить завершение работы сторожевого таймера по коду причины завершения 0x8badf00d («съел плохую еду»).

Иногда системного механизма не хватает и можно написать свой, который будет следить за временем ответа главного потока.

💎 В ноушене уже полная статья со всеми советами, туториалами и примерами в коде
Please open Telegram to view this post
VIEW IN TELEGRAM
9
Никогда не идите работать в большую компанию или почему студенты чаще выигрывают телеграм конкурсы

Вышло интервью Дурова, где он рассказал про штат разрабов. Всего 30 человек делают лучший мессенджер в мире.

Многие разрабы думают это большая компания и такой продукт нужно делать минимум 200 человек на каждую платформу. Но я решил вспомнить почему небольшие компании лучше, чем огромные и что говорил Дуров.

Вы знали, что почти все первые места в телеграм конкурсах это либо студенты, либо фрилансеры, стартаперы? А разрабы из корпораций занимают чаще 3 или 4 места?

На мой взгляд, размер команды телеграм как раз и связан с той самой фразой Дурова. Ведь большие компании убивают рутиной и спамят ненужными задачами талантливых разрабов, которые в итоге уступают обычным студентам, которые еще не успели погибнуть в безжалостной бюрократичной машине. Раздувают штат и придумывают локальные, ошибочные и неэффективные метрики, которые чаще нужны только для промо руководителей.

Помер ли твиттер, когда сократили надутый штат на 80%?

Не потеряем огонь и будем всегда молоды сердцем! Не подменяем ценности субкультурами и чужими идеями!

Вступаем в сообщество и челенджим себя!
3311
Как менторство умерло или чему учат менторы

Все чаще приходят с запросом на менторство и все чаще я отказываю.

На это есть две причины:
1. Мне и самому нужно развиваться. Есть много вещей, в которых я слаб или хочу изучить.
2. Благодаря тому, что каждый второй называет себя "ментор" это слово опошлилось. Слишком много их стало, а качество услуг упало ниже пола.

Недавно я перестал заниматься с несколькими ребятами, тк устал и нет времени. Они ушли к другим менторам и поделились фидбэком. На четкий запрос "подскажи как развиваться мне как специалисту" многие не могут ответить. Даже опытные менторы говорят "Я и не знаю. Я либо помогу тебе опыт накрутить, либо резюме нарисовать. А развиваться я не знаю как". При этом уже взяв деньги и не маленькие.

Таких менторов раслодилось почкованием. Их задача дать мотивационный пинок за 50к и не дать качественную услугу, которая поможет апнуться как специалисту. Многие уходят разочарованными и злыми. Если я плачу денег за очевидные советы, то почему с меня берут деньги?

Я также общался с опытными ребятами, по-настоящему крутыми инженерами, они отказываются быть менторами потому что уже из каждого утюга любой человек после курсов учит вкатываться в ит. Также и в нашем чате замечают, что найти качественного ментора стало в разы сложнее. Эта ниша прогнила и нужно кровопускание.

С этого момента я отказываюсь называть себя ментором. Называйте репетитор, терминатор, трансформатор, инкубатор, инструктор. Но не ментор. Это слово опошлилось и стало в однин ряд с "коуч" и "инфоцыган". Это ниша наполняется мошенниками и самозванцами, а ранее благородное дело стало уже отдавать легким пренебрежением "а, ты очередной ментор..."

А мы пока подумаем как уйти от этой модели "менторов".
1951
🥲 Техники решения алгоритмов: Backtracking

Backtracking — это метод решения задачи перебора всех возможных вариантов с последующим выбором оптимального решения.

Подход часто юзается в решении задач, где требуется найти наилучшее решение из множества возможных комбинаций.

Основная идея — это перебор всех возможных решений путем выбора вариантов и проверки их на соответствие заданным условиям.

На примере разобрана частая задача генерации скобочной последовательности с помощью бэктрекинга. А также добавлю раздел бэктрекинга в литкоде

💎 Еще больше техник с разбором задач из собеседований тут
Please open Telegram to view this post
VIEW IN TELEGRAM
6
🌿 Оптимизация UI: Color Blending

Продолжаю рубрику улучшения производительности наших кнопок. В прошлом посте мы поговорили про разгрузку главного потока. В этом мы поговорим про Color Blending.

Blending это стадия в процессе рендеринга фрейма, когда вычисляется финальный цвет пикселя. Каждый UIView в иерархии (а если быть точнее каждый CALayer) аффектит цвет финального пикселя, который будет отрисован на экране, так как нужно учесть все пересекающиеся views, их alpha, backgroundColor, opaque и тд.

UIView.opaque сообщает системе, что данный view является полностью непрозрачным. Это позволяет улучшить перформанс отрисовки. Опция UIView.opaque позволяет системе скипать отрисовку нижележащих views, а также blending при вычислении финального цвета.

🌸 Как найти проблему с color blending?

Обнаружить проблему color blending'a можно выбрав опцию "Color Blended Layers" в in Xcode или в Debug меню iOS Simulator'a.

🌺 Как исправить проблему с color blending?

Если layer всегда показывается поверх другого монотонного layer'a, то можно просто присвоить layer'y background такого же цвета, эффект будет таким же, как если бы layer имел прозрачный background, но не будет проблемы blending'а.

💎 В ноушене уже полная статья со всеми советами, туториалами и примерами в коде
Please open Telegram to view this post
VIEW IN TELEGRAM
72
Вопросы для собесов на память | Junior | часть 2

В этой подборке были собраны вопросы про:
🟣Что такое delayed deallocation
🟣Какие участки памяти могут быть кроме кучи и стэка
🟣Сколько живет Global и Value память
🟣Виды утечек памяти
🟣Инструменты для поиска утечек
🟣многие другие вопросы.

🌿 Этот и другие сборники можно найти тут
🧬 Ознакомиться с другими сборниками тут
Please open Telegram to view this post
VIEW IN TELEGRAM
10
Инженерная культура в FAANGA'ах

Одна из целей моего сообщества это не только взаимообмен технической экспертизы, но и обмен культурой из разных компаний.

Для меня не существует метрик, которые влияют на экспертов высоких грейдов. Какие бы санкции за их нарушение не вводили, какой бы код не писали, какие бы требования не просились их будут нарушать или использовать для бюрократии или отчетности. Чем экпертней человек, тем он чаще отказывается от чужих установок и требует свободы. Ну, и промо как-то надо получать. А на чужом далеко не уедешь.

Да и чем больше система, тем больше нужно ресурсов для контроля этих метрик.

Единственный способ создать порядок в такой системе — это культура. В по-настоящему развитых странах людей не нужно заставлять к порядку, они сами его наводят. Не во всем, не всегда, но культурное и здоровое общество готово само самоорганизовываться.

В этом выпуске ведущие поговорили с staff-инженером из нетфликса:
🟣 почему бигтехи очень разные
🟣 что такое культура
🟣 почему в ит бесконечные реорги и нет постоянства
🟣 почему литкод лучший инструмент для собесов
🟣 как и зачем бигтехи насаживают на культуру

В чате мы уже не один день ведем дискуссию про важность культуры и (без)полезность метрик.
Please open Telegram to view this post
VIEW IN TELEGRAM
73
Главный навык в 21 веке

Глядя на все это захотелось написать то, что у меня давно уже крутится в голове. Изначально (хз наверное с каменных веков) были люди у которых, что называется была совесть и люди у которой этой совести не было. Они были везде и всегда. Причем формализовать, что такое совесть очень трудно. Тут можно удариться в христианскую мораль, различные философские тенденции, но мы этого делать не будем

Так вот в 21 веке у людей с совестью начались проблемы. Проблемы очень простого характера. Быть человеком с совестью ахуеть как невыгодно. Ну сами посудите. Пока вы честно учите андроид и качаете свои знания, кто-то нарисовал себе 5 лет опыта и запрыгнул в поезд айти и уже получает свои 300К в наносекунду (эт конечно нихуя не так, но так это продается)

Или, например, пока человек с совестью думает о том, что у других людей тоже есть чувства, другие скачут по карьерной лестнице весело перепрыгивая через головы. Как говорил архангел в фильме Догма, что является основой совести? Страх. Люди перестали бояться. И чем выше и дальше ты по лестнице, тем меньше ты боишься

Я щас даже не буду говорить про наших недавно отличившихся товарищей с различными там заявлениями. Им норм, их совесть не мучает. Они могут делать какие угодно заявления, кидать людей, обманывать, воровать и тд и им норм. Более того, если вы думаете, что они как-то там плохо живут и мучаются совестью на своей яхте, то я вас разочарую - осознание этого приходит оооочень поздно, а к некоторым и вообще никогда (шлюхи с кокаином говорят плохо на сердечной мышце отражаются)

Но в этой системе есть один существенный недостаток. Все эти люди без совести, они могут существовать только за счет одного - за счет паразитирования. Также как экономика услуг и потребления не способна существовать без реального сектора (ну кому-то банально нужно делать все эти столы, детали, сортиры и так далее), также и вот эти бессовестные товарищи могут существовать только за счет людей, которые поступают по совести

И как только их становится сильно много, то такое общество обречено. Паразиты просто пожирают сами себя, пытаясь выхватить кусок пожирнее у такого же паразита.

Поэтому я пришел к выводу, что самый важный навык для человека с совестью (которым он не обладает как правило) - это умение посылать нахуй. Посылать нахуй очень неудобно для такого человека, потому что он все время рефлексирует на тему, а не обидел ли он кого-то, а вдруг он сделал плохо другому человеку

Я и сам через это проходил. Но важно здесь, что посылать нахуй нужно строго только таких вот паразитов. Я уверен вы легко можете их отличить. Поймите, что эти люди не рефлексируют, они не думают обидели они кого-то или нет. У них есть только одна единственная функция - поднять бабла. Любым способом. В том числе и за счет других

Поэтому пользуйтесь. Очень полезный навык в 21 веке. Как говорится, для торжества зла нужно лишь одно - бездействие добра
192
Forwarded from 🔥Full-Time Trading
🇷🇺Apple Pay может вернуться уже в мае

Антимонопольные органы ЕС намерены одобрить план по открытию доступа к NFC в IPhone сторонним сервисам. Это значит, что россияне смогут пользоваться платежными приложениями по умолчанию.

👉 FTT - подписаться
19
🧬 Анонс фреймворка для Mobile System Design Interview

Как мы видим по опросу выше, главный навык для сеньора — это умение делать сложные и большие системы. Если ты красил только кнопки или зарывался в SDK, то очень сложно будет удержаться на одном месте или претендовать в другой компании из-за бесконечного роста требований к итшникам. Я встречал много раз, когда после перф-ревью сеньоров понижали или лишали премий, тк они не делали сложные задачи, которые от них ожидали.

Лучший тренажер для этого — решать задачи для систем дизайна и архитектур.
В чате мы регулярно поднимаем идею, что отлично бы собрать в одном месте сборники и рецепты по созданию больших систем, а также задачи, которые помогут тебе называться сеньором.

В сети уже есть похожие инструменты, но наш будет направлен на СНГ специфику, частые задачи под тренды крупных приложений или стартапов.

В нем будут собраны:
🟣Частые задачи в мобильных приложениях (создания чата, рисовалки, аналитики, модуляризации, кэширования)
🟣Общие правила и концепцие построения высококачественных систем
🟣Ресурсы и тренажеры для прокачки или поддержки навыков
🟣Множество других плюх

Основные ресурсы для вдохновения:
🔘Фреймворк для Mobile System Design
🔘Книга “Mobile System Design"
🔘Книга “Building Mobile Apps at Scale”
🔘 Множество других инструментов и книг из соседних платформ (бэк, фронт, андроид)
🔘Сбор мнений и валидация через комьюнити экспертов

💎 Пока инструмент будет наполняться только в закрытом комьюнити
Please open Telegram to view this post
VIEW IN TELEGRAM
12
This media is not supported in your browser
VIEW IN TELEGRAM
Черный пояс по собесам, белый по работе
182
💎 Как проходят собесы: Почему литкод лучшая секция для собесов

В одном из прошлых постов я делился подкастом со стафф-инженером Нетфликса, который еще успел поработать в гугле. Он сказал, что в конце концов, с опытом понимаешь, что литкод — это лучший инструмент для собесов, который нужен для поиска инженеров.

Многие хэйтят алгоритмы из-за бесполезности, но либо не дают альтернатив, либо их альтернативы — это узкие знания платформы, которые в 99% не пригодятся на практике, легко зубрятся и нужны только для споров в чатах. Например, 90% теории про Sidetable, компиляторы, математические функции автолайута или подсчет байтов.

Поэтому среди разрабов вечно споры:
- одни обвиняют других, что алгоритмы не нужны в реальных задачах и важно знание платформы
- другие обвиняют других, что 90% вопросов про платформу бесполезные на практике и занимаются поиском энциклопедии, а не программиста

Возможно, идеальной альтернативой и компромиссом был бы систем дизайн. Но это дорогая секция и сложная. Поэтому она часто доступна только разрабам, кто претендует на сеньорность.

Давайте разберем как вообще применяются алгоритмы.

Есть два вектора применения алгоритмов:
- алгоритмы для повседневных задач;
- алгоритмы для оценки навыков на собеседованиях.

🌋 Алгоритмы для повседневных задач

Уже почти ни у кого нет никаких сомнений, что знание алгоритмов и структур данных является очень полезным навыком для любого разраба. Это фундаментальная область computer since, на которой держится вся разработка. Если вы будете практиковать навык разработки алгоритмов, то это поможет быстрее и эффективнее решать типовые задачи в повседневной работе и меньше ошибаться. Грубо говоря, вы набиваете руку и тренируете насмотренность.

Само собой, не во всех областях требуются такие знания. Например, работа с алгоритмами сильно реже встречается на фронте и сильно чаще — на бэке. Такова специфика работы, но навык в любом случае полезен для всех. Кто знает, может апстор заблочат или все РФ приложения удалят и куда вас девать?

🌋 Алгоритмы для оценки навыков на собеседованиях

А вот этот вектор как раз самый спорный. В чем заключается проблема? Все компании сейчас поголовно применяют этот подход на своих собеседованиях, зачастую не понимая как он вообще работает. В этом тоже есть проблемы, но эта секция имеет место быть, если считать что целью является только проверка алгоритмики.

Чаще на алгоритмах не проверяет знание специфичных алгоритмов, а проверяется гораздо больше:
🟣мышление
🟣последовательность
🟣умение отладки кода в голове

Цель не в том, чтобы посмотреть как человек пользуется IDE или зазубрил очередное решение в ответах литкода, а узнать как он мыслит. Как он ведёт себя в стрессовой ситуации тоже важно (становится ли конфликтным или сдержано контролирует ситуацию)

Кодер != программист

Тот, кто умеет просто делать просто рабочие задачки в IDE, хвастается очередным специфичным знанием о сайттаблицах или копирует код из чатгпт — это не тот, кто нужен компании в большинстве случаев.

Компании нужен человек умеющий решать проблемы.
Please open Telegram to view this post
VIEW IN TELEGRAM
1131
🧬Алгоритмы: Является ли строка подпоследовательностью

Сразу пройдемся по одной из самых популярных задач.

🟢Сложность: Легкая

Описание:
Даны две строки s и t. Напишите функцию, которая возвращает true, если s является подпоследовательностью t, или false в противном случае.

Подпоследовательность строки — это новая строка, которая формируется из исходной строки путем удаления некоторых (может быть ни одного) символов без нарушения относительного положения остальных символов. (т. е. «ace» является подпоследовательностью abcde, а «aec» — нет).

1️⃣ Пример:
Входные данные

s = "abc"
t = "ahbgdc"

Ответ: true

2️⃣ Пример

Входные данные:

s = "axc"
t = "ahbgdc"

Ответ: false

Для решения задачи воспользуемся методом двух указателей.

Мы запускаем цикл по всем символам строки t и сравниваем их с символами строки s. Для отслеживания позиции в строке s мы будем использовать указатель left.

- Если символы совпадают, мы двигаем указатель строки left на одну позицию вперед.
- Если после прохода по всем символам строки t указатель left указывает на конец строки s, значит строка s является подпоследовательностью строки t.

💎 Больше разборов задач тут
Please open Telegram to view this post
VIEW IN TELEGRAM
11
🌿 Серия статей Swift Concurrency

Чтобы писать об актуальном контенте я, как минимум раз в неделю, смотрю актуальные вакансии.

Могу смело сообщить — вакансий со стэком SwiftUI, Combine, Async/await стало много. А значит уже необходимо хорошо изучать эти инстурменты, чтобы быть конкурентным на рынке.

Это будет полезно как новичкам, так и опытным, которые застряли в легаси.

Начал серию больших статей про основы Swift Concurrency. В них много кода и примеров.

В первой можно изучить:
🟣Что такое Swift Concurrency
🟣Конструкцию Async/Await
🟣Что такое GCD и его проблемы

Также ждите вопросы для самопроверки и контент по Combine

🌸 Доступ к статье можно получить тут
Please open Telegram to view this post
VIEW IN TELEGRAM
9
📺 Обязательные книги для сеньоров в iOS часть 1

Мы в комьюнити решили, что сеньором нельзя стать походя по собесам или решая только рабочие задачи. Он должен держать руку на пульсе трендов и иметь специфичные, полезные знания. Опрос выше показал эту важность

Вот собрали обязательные книги для сеньора. Поделюсь частью:

1. Building Mobile Apps at Scale: 39 Engineering Challenges

Главный навык сеньора — проектировать сложные и масштабные системы. В этой книге собраны многие частые задачи, которые бросают вызов разработчикам на работе.

2. Growing as a Mobile Engineer

Достижение уровня старшего и выше старшего мобильного инженера. Книга для инженеров iOS и Android, а также менеджеров по мобильной разработке. Помогает дорасти до сеньора в мобильной разработки. Книга не панацея, но отлично поможет нарисовать свой roadmap

3. MAC OS® X AND iOS INTERNALS

Многие документации по iOS и Mac разработке окутаны тайной. Часто есть только один путь понять кишки — лезть в них самим. Автор книги сделал это за нас и расписал особенности работы ОС. Не факт, что все актуально, но познавательно

🌿 Полный список можно найти в сообществе
Please open Telegram to view this post
VIEW IN TELEGRAM
104
245
💎 Реклама крутого разработчика

За этот пост мне не платили и я не согласовывал его с автором канала. Он сам его впервые увидит. Такой комплиментарности вы не купите у меня ни за какие деньги. Хотя готов поторговаться

Об Астемире @eleev я узнал случайно ресерча интернет. А познакомился лучше уже в нашем чате. Вы уже по-любому видели его работы и упоминания в других каналах. До его скромности мне еще расти и расти. А до таланта тем более.

Вот лишь малая часть из его работ:
🟣Лучший сборник вопросов по SwiftUI
🟣Один из полезных гитхаб аккаунтов
🟣Автора многих сложных анимаций

Это единственный разраб с миллиардами годами ненакрученного опыта. Его ответы на любое сообщения у меня в избранном. Нет ни одного вопроса, который бы он не знал. Каждую задачу по литкоду в чате он решает самыми необычными и интересными способами, где сразу видно уровень сеньора.

Подписывайтесь на его канал и ждите топ контента @contravariance

Выхода у него теперь нет
Please open Telegram to view this post
VIEW IN TELEGRAM
3764
💎 Вопросы для собесов по Swift Concurrency | часть 1

В ноушене я продолжаю собирать инфу про современные стэки. Как я уже говорил, по данным hh 90% новых проектов уже пишут проекты на SwiftUI, Combine и Async/Await.

Я уже писал статью с основами, а теперь собрал дополнительные вопросы, которые лучше помогут понимать технологию и собрать фокус на важных акцентах.

Что ждать в сборнике:
🟣 Чем async/await лучше GCD?
🟣 Как создать параллельное выполнение тасок?
🟣 Как отменять ассинхронные операции?
🟣 Что такое Detached Tasks?
🟣 И еще около 15 вопросов

🌿 Этот и другие сборники можно найти тут
🧬 Ознакомиться с другими сборниками тут
Please open Telegram to view this post
VIEW IN TELEGRAM
111