iOS Dev
7.56K subscribers
952 photos
69 videos
1 file
1.08K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
Channel created
Channel photo updated
Для чего нужен этот канал?

📲 Если вы мобильный разработчик (особенно если iOS), то здесь для вас будут полезными истории и подходы к разработке. Возможно что-то окажется интересным или необычным.

Иногда я делюсь новостями, иногда какими-то фреймворками.

Если вам интересна история IT, то периодически здесь можно найти какие-то факты или может быть вдохновение к реализации своих проектов.

😎 Если вы проект-менеджер или лид разработки, то здесь вы сможете найти опыт код-ревью или какие-то ситуации, которые могли произойти.

А ещё я рассказываю о своих пет-проектах. Некоторые получились неплохими.

О себе: я Виктор Грушевский, iOS-разработчик (создаю приложения с 4 iOS), автор статей для хабра и победитель контестов Telegram.

Оставайтесь, и я обязательно попробую вас заинтересовать.

@iOS Dev
Скорее всего, многие из вас слышали или даже использовали Texture в своей работе.

Не могу не поделиться кратким описанием, что это и зачем же он используется:

Texture - это фреймворк для iOS, построенный поверх UIKit, который обеспечивает плавность и отзывчивость даже самых сложных пользовательских интерфейсов. Изначально он был создан для создания Paper и сочетается с анимацией pop, основанной на физике, но он также эффективен при использовании UIKit Dynamics и обычных приложений. Совсем недавно он был использован для переработки приложения Pinterest.

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

https://texturegroup.org/

#iOSDev #iOS #Texture
Если вы хотите почитать что-то, что не связано с программированием напрямую, то я бы рекомендовал обратить внимание на книгу от Даниэля Канемана:

"Думай медленно... Решай быстро"

Наши действия и поступки определены нашими мыслями. Но всегда ли мы контролируем наше мышление? Нобелевский лауреат Даниэль Канеман объясняет, почему мы подчас совершаем нерациональные поступки и как мы принимаем неверные решения. У нас имеется две системы мышления. «Медленное» мышление включается, когда мы решаем задачу или выбираем товар в магазине. Обычно нам кажется, что мы уверенно контролируем эти процессы, но не будем забывать, что позади нашего сознания в фоновом режиме постоянно работает «быстрое» мышление – автоматическое, мгновенное и неосознаваемое…
Супер-краткое сравнение баз данных, которые так или иначе приходилось использовать в работе и пет-проектах.

1. SQLite
Технически определяемая как реляционная система управления базами данных (РСУБД), SQLite является самым популярным в мире механизмом баз данных.

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

Почему именно SQLite?

- Простота внедрения
- Не требуется установка и нулевая конфигурация
- Высокая переносимость и совместимость с iOS и любой платформой - от Windows до macOS, от Linux до Android.
SQLite может связывать несколько языков программирования, включая C++, C#, JavaScript, Objective-C, PHP, Ruby, Java и Python.

2. Realm
Формально являясь MongoDB, Realm представляет собой систему управления объектными базами данных с открытым исходным кодом. С помощью этой объектно-ориентированной базы данных разработчики могут кодировать отношения между объектами. Если SQLite использует базы данных SQL, то Realm использует C++. Новичок на сцене приложений для iOS, Realm составляет сильную конкуренцию специально разработанным для Android и iOS Xamarin и React Native.

Почему именно Realm?

- Он быстрее, по сравнению с SQLite и Core Data.
- Благодаря ценной масштабируемости, Realm может обрабатывать большое количество пользователей и данных.
- Для разработчиков имеется четкая документация, облегчающая процесс разработки.
- У него есть сеть поддержки актрисы Twitter, Github и StackOverflow.

3. Core Data
Спонсируемый Apple, Core Data позволяет сохранять данные приложения для автономного использования, кэшировать временные данные приложения, определять типы и категории данных. Если быть точным, Data Core - это фреймворк персистентности, тип промежуточного программного обеспечения, которое хранит данные в базе данных - он имеет возможность использовать SQLite в качестве базы данных.

Почему именно Core Data
- Использует специфические для Apple языки, такие как Swift и Objective-C.
- Он быстрее SQLite при хранении данных
- Фреймворк имеет встроенные функции, которые сокращают написанный код на 70%
- Данные могут быть организованы в бинарные, XML или SQLite хранилища.
Возможно, вы считаете, что столкнулись с выгоранием. Вопрос этот сложный и морально, и физически. Постарался перевести несколько советов, как этого можно избежать:

Посмотрите на количество задач.

Решите, какая из них не является важной, чтобы закончить ее первой. Установите рейтинг для каждой задачи. Проверьте объем воздействия и усилий для каждой задачи. Избавьтесь от того, что не оказывает влияния и требует много усилий. Сосредоточьтесь сначала на тех делах, которые имеют огромное влияние и не требуют больших усилий. Во время работы блокируйте социальные сети и уведомления в браузере.

Постарайтесь сохранять свежесть разума.

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

Регулярно делайте перерывы в течение дня.

Сидение по 8-10 часов перед компьютером без перерыва не поможет вам быть продуктивным. Научно доказано, что продуктивность резко снижается после 4 часов сосредоточенной работы. Поэтому разминайтесь каждый час, прогуляйтесь или съешьте что-нибудь. Поговорите с коллегами, спросите, не нужно ли им просмотреть код или помочь с юнит-тестами. Регулярный перерыв может творить чудеса в кодинге, особенно когда вы погружены в отладку проекта. При работе над любым проектом вы можете следовать технике Pomodoro.
Не просто кодируйте. Раз в несколько месяцев делайте перерыв в работе над кодом и отправляйтесь в отпуск. Это одна из самых освежающих вещей, которые вы можете сделать. Проведите время со своей семьей и друзьями. Уделяйте время чтению книг, посещению встреч или конференций, слушайте отраслевые подкасты или пишите собственные технические блоги (как раз этим я сейчас и занимаюсь).

Занимайтесь спортом и высыпайтесь.

Старайтесь делать физические упражнения хотя бы 2-3 раза в неделю или занимайтесь плаванием. Включите в свой рацион здоровую пищу, овощи, орехи и фрукты. Получайте достаточно сна и используйте шумоподавление. Ниже приведены некоторые рекомендации по оптимизации вашего сна:
- Ограничьте потребление кофеина после 14:00
- Уменьшите количество синего света (пользователи Mac, включите ночной режим, пользователи Windows - ночной свет)
- Понизьте температуру в спальне.
- Установите затемненные шторы или используйте маску для глаз.
- В больших проектах всегда следуйте итеративному процессу разработки. Разработайте несколько модулей, скомпилируйте и протестируйте их. Разработайте еще несколько модулей. Не пишите целую огромную программу, не компилируя и не отлаживая ее, а затем пытайтесь заставить ее работать. Это быстрый путь к разочарованию.
Рубрика #whattosee?

Что, если вы могли бы оставить работу за пределами офиса? Или не думать о бытовых проблемах на работе?
Разделение - сериал об инженере, который подвергся подобной процедуре, а вот хорошо это, или плохо - стараются рассказать сценаристы сериала для Apple.

Секретное сообщение для тех, кто смог: во-первых, вы молодцы, во-вторых, вы знаете, что сделать! Надеюсь, вам понравился квест!
Магические слова SOLID, DRY, KISS, YAGNI

Освежим знания?

SOLID

S - single responsibility. Принцип единственной ответственности (single responsibility principle). Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче.
O - open–closed. Принцип открытости/закрытости (open-closed principle) «программные сущности должны быть открыты для расширения, но закрыты для модификации».
L - Liskov substitution. Принцип подстановки Лисков (Liskov substitution principle) «объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы»
I - interface segregation. Принцип разделения интерфейса (interface segregation principle) «много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения»
D - dependency inversion. Принцип инверсии зависимостей (dependency inversion principle) «Зависимость на Абстракциях. Нет зависимости на что-то конкретное»

DRY
Don’t repeat yourself
Это принцип разработки программного обеспечения, нацеленный на снижение повторения информации различного рода, особенно в системах со множеством слоёв абстрагирования. Принцип DRY формулируется как: «Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы». Он был сформулирован Энди Хантом (англ.) и Дэйвом Томасом в их книге The Pragmatic Programmer (англ.). Они применяли этот принцип к «схемам баз данных, планам тестирования, сборкам программного обеспечения, даже к документации». Когда принцип DRY применяется успешно, изменение единственного элемента системы не требует внесения изменений в другие, логически не связанные элементы. Те элементы, которые логически связаны, изменяются предсказуемо и единообразно. Помимо использования методов и функций в коде, Томас и Хант считают необходимым использование генераторов кода, автоматических систем компиляции.

KISS
Keep it simple stupid
Этот принцип лучше всего иллюстрируется историей, когда Джонсон вручил команде инженеров-авиаконструкторов набор инструментов, поставив им условие: механик среднего уровня должен суметь отремонтировать реактивный самолёт, который они проектировали, в полевых условиях только с этими инструментами. Таким образом, «stupid» относится к отношению между тем, что всё ломается, и сложностью необходимого для этого ремонта.

YAGNI
You aren't gonna need it
Согласно адептам принципа YAGNI, желание писать код, который не нужен прямо сейчас, но может понадобиться в будущем, приводит к следующим нежелательным последствиям:

- Тратится время, которое было бы затрачено на добавление, тестирование и улучшение необходимой функциональности.
- Новые функции должны быть отлажены, документированы и сопровождаться.
- Новая функциональность ограничивает то, что может быть сделано в будущем, — ненужные новые функции могут впоследствии помешать добавить новые нужные.
- Пока новые функции действительно не нужны, трудно полностью предугадать, что они должны делать, и протестировать их. Если новые функции тщательно не протестированы, они могут неправильно работать, когда впоследствии понадобятся.
- Это приводит к тому, что программное обеспечение становится более сложным (подчас чрезмерно сложным).
- Если вся функциональность не документирована, она может так и остаться неизвестной пользователям, но может создать различные риски для безопасности пользовательской системы.
- Добавление новой функциональности может привести к желанию ещё более новой функциональности, приводя к эффекту «снежного кома».
У Рея Вендерлиха появился раздел на GitHub с бесплатными книгами. Пусть они и не содержат супер-свежую информацию, но вполне могут оказаться полезными.
Рубрика #whattosee?

Лайтовый сериал про то, как в будущем сознание умирающего человека можно будет переселить в цифровой мир. Именно по этому пути идет программист Нэйтан: после смерти в ДТП он переносится в виртуальный мир, где влюбляется в реальную девушку Нору.

Сериал с довольно понятным названием "Загрузка" может оказаться глубже, чем кажется.
⚠️У Apple сбой на серверах. Проблема затронула портал Apple Developer, AppStore Connect и iCloud. С Xcode также проблемы. Не получается скачать приложения из App Store.

Это не только в РФ, но и как минимум в Германии тоже.

UPD. Чаще всего пользователи видят DNS Resolve Failure.
Пустая трата времени или выбор нужного инструмента?

Возможно вы слышали о термине 10x - инженер.

Даже Авраам Линкольн как-то сказал: "Если бы у меня было 8 часов, чтобы срубить дерево, я бы потратил 7, затачивая свой топор."

Также можно сказать о разнице между джуном и сениор-разработчиком. Если джун будет пытаться 8 часов рубить тупым топором, то сениор потратит час на выбор нужной бензопилы и 5 минут, чтобы спилить дерево (отличный пример, кстати).

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

Вот здесь она на английском
А вот тут (на хабре) - на русском.
Написал статью про любопытный подход к код-ревью
https://telegra.ph/Piramida-kod-revyu-03-24
К посту выше добавлю - не всегда получается следовать всем принципам, да и код-ревью в командах отличается почти всегда.

Поэтому будет здорово, если за код не будет стыдно, например, спустя год. А в команде - чтобы её новые участники понимали, что происходит здесь вообще и куда они попали.
Apple выпустили серию уроков для обучения основам работы в Xcode, SwiftUI и UIKit для создания, цитирую, «привлекательных приложений» для iOS

#iOSDev #обучение
Из любопытного: вы знали, что для map() или filter() можно использовать keyPath вместо closure()?

#любопытно #iOSDev