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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
Го, я создал.

Мы из поколения мужчин выращенных женщинами... 👨‍👨‍👧‍👦

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

Заходите, потихоньку будем расти. Правила поведения просты.

Сегодня собираемся. Завтра напишу первые вопросы и накидаю концептов

P.S. Я надеюсь все понимают рофлы про радужные символы

https://t.iss.one/+rNag9KqMoo1kNzli
Я в танке, но честно всегда думал это рофл такой, что в раше одни из лучших программистов

Оказывается нет

https://www.sayonetech.com/blog/which-country-has-best-computer-programmers-and-developers/
🔥7
Крутая статья от авито. На днях только столкнулся с этим интсрументом внутри компании и думал "Оу, круто. Должна нам помочь для тестировщиков. Не будут годами сборку собирать и поможет легко детектить баги". Спустя пару дней о нем уже статью сделали

https://habr.com/ru/company/avito/blog/681752/
❤‍🔥6👍1
Hashable

🟢 lvl: jun+

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

ℹ️ Хэширование: что и зачем

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

Алгоритм называется хеш-функцией или хэшером. Преобразованное значение называется хэш-значением, хэш-кодом или просто хэшем.

Хэширование должно соблюдать правила:
🟪 Хэш-значения должны быть уникальными
🟦 Хэш-значения должны быть случайными
🟥 Хэш-значения не обязательно должны быть положительными целыми числами

Хэширование широко используется в нашей жизни:
Работа с базой данных: поиск
Почти все веб-сайты и мобильные приложения имеют функцию поиска где-то в своих приложениях. Реализация функции поиска предполагает использование хеширования.

Криптография: пароль
Чтобы защитить наш пароль нужно его захэшировать. Мало ли его перехватят

◾️Структуры данных в программировании: Словарь
Почти все современные языки программирования имеют тип данных Dictionary, хотя они могут использовать другое имя, такое как ассоциативный массив, карта, хэш-карта, хэш или объект.

Поняв общее представление о хэшировании опустимся к тому, что предоставляет Apple.

Hashable — тип, который можно хешировать в хешере для получения целочисленного хеш-значения

Подробнее можно почитать в этой статье, лучше о хэше не найдешь
🔥102
Помните я говорил про вачдоги?

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

В ватчдоге нет ничего сложного, но главное не пугаться и не теряться, если попросят что-то подобное сделать

вот еще одна статейка
🔥1
Fail Fast

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

Например в динамических языках программирования как JS очень сложно дебажить код, находить ошибки, ведь программа продолжала работу даже с нелогичным и губительным поведением. Этим же и страдал obj-c. В таких технологиях разрабы относятся к ошибочному поведению лояльней.

С приходом свифта же чуть что-то поменялось, но несовсем...

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

https://paulpeelen.com/FailingSafely
👍6❤‍🔥1
Сейчас смотрю всякие видое с болями, трудностями джунов. Они допом помогают с бэклогом фич. Основная задача — принести ценность продуктом.

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

А пока поделюсь прикольным видео. Тут мужик, будто за бокалом виски из нуарных депрессивных детективах, рассказывает про боли и унижения всех нас в начале пути

https://www.youtube.com/watch?v=WUpPg6JcBWc
👍3🔥3🏆1
Частый вопрос на собесах в тинек — как массив хранит ссылки? Сильно или слабо?

Правильный ответ — сильно.
А как сделать слабо? Использовать NSPointerArray

Подробнее тут
👍14
🤬
Please open Telegram to view this post
VIEW IN TELEGRAM
Короче, пока разрывает от того, что не хватает времени на интересные посты, симулятор иосника, дрочку литкода (да да снова начал) и сторонних зависимостей.

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

Этот материал также пойдет в основу симулятора иосника

контакт тот же. Ну или в чат кидайте https://t.iss.one/+rNag9KqMoo1kNzli
👍1
iOS Makes Me Hate pinned «Короче, пока разрывает от того, что не хватает времени на интересные посты, симулятор иосника, дрочку литкода (да да снова начал) и сторонних зависимостей. Поэтому я использую функцию "звонок другу". Нужен друг, или друзья, которые будут кидать классные…»
Defer

🟢 lvl: mid-

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

Не самый редкий и не самый частый гость в разных проектах. Часто юзается, чтобы сделать потокобезопасный код, если вы блочите объект, перед его выполнением внутри функции.

Или же, когда вы заалокейтили какую-то инфу в память, но после выполнения нужно все почистить.

Копания в кишки через дизассемблер
Хорошее объяснение с разными практическими примерами
👍6🔥1
📌 ЗАКРЕПЛЯЕМ МАТЕРИАЛ
Вообще у меня уже пару лет стоит пунктик покопать в сторону реверс инжениринга иос. Хочется обвалиться парой книг в будущем и пописать сюда выжимки, но пока читаем статью и думаем, как сделать свой ответ Appstore

https://habr.com/ru/company/dsec/blog/676094/
5💯1
Коллизия хэш-мапы

🟠 lvl: mid+

👆В предыдущих сериях мы узнали о Hashable и для чего он нужен. Сейчас же поговорим о коллизиях хэша.

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

До этого стандарта разработчики страдали частой коллизией, особенно работая с цветами.

ℹ️ Коллизия происходит, когда разные входные данные производят одинаковый хэш, но значения не равны

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

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

Детальнее можно познакомиться отличном материале SE-0206

Итого: По умолчанию Swift использует универсальную хэш-функцию, которая сводит последовательность байтов к одному целому числу.

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

- Почитать о производительности Hasher в треде с сеньором-помидором из яблока
- Мощненькое чтиво про приемы хэширования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
Чем отличается настоящий программист от кодера?

В снг (а может не только) почему-то считатается, что настоящий программист — это не только кодер, но и чел, кому можно доверить фичу.

Но что такое "доверить"? Хорошо координировать процесс разработки или быть уверенным в качестве продукта, в дедлайнах? Развиваться по менеджерской ветки или инженерной?

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

В книге сразу дается ответ на вопрос "Кто такой настоящий программист?"

💬 Если программирование — это искусство написания кода, то разработка программного обеспечения — это искусство обеспечения того, чтобы этот код продолжал работать в будущем.

Это сразу же подчеркивает, что окружает программирование в повседневной жизни инженера-программиста. Как и в более «традиционных» инженерных областях, когда вы строите что-то на века, вы хотите планировать заранее. Именно здесь в игру вступают встречи, проектная документация, интеграционные тесты и т. д.

А вы программируете или разрабатываете?

P.S. второй раз пришел к книге. Буду иногда вбрасывать вижимки
👍10😐4👎3
Закон Хайрама по сути это не про обесценивание интерфейса, а про то, что не стоит расчитывать только на него.

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

Кстати, гуглил про закон и наткнулся на прикольный репо

https://solarrust.github.io/hacker-laws/
4👍3
Символьный брекпоинт

🟢 lvl: jun+

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

https://medium.com/swlh/symbolic-breakpoint-xcode-in-2-minutes-5ca86f257b51
❤‍🔥7🥱3
Рубрика "офигенные подгоны".

Смотрите че нашел, целая куча книг просто так бесплатно в гите

Спасибо бэтмену за чистый Готэм 🤡

https://github.com/wuzhouhui/misc
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8👍2