Опишите ваши pet-проекты и их техническую реализацию.

Ответ

Pet-проекты — это полигон для изучения новых технологий и архитектурных подходов.

1. WeatherApp (Прогноз погоды)

  • Стек: UIKit, CoreLocation, URLSession, CoreData, Combine.
  • Цель: Изучение работы с REST API, фонового обновления и локального кэширования.
  • Ключевые моменты:
    • Запрос данных с OpenWeatherAPI.
    • Кэширование ответов в CoreData для оффлайн-режима.
    • Фоновое обновление по геопозиции.
  • Пример сетевого слоя:
    func fetchWeather(for city: String) async throws -> WeatherData {
    let url = URL(string: "https://api.openweathermap.org/...")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode(WeatherData.self, from: data)
    }

2. TaskTracker (Менеджер задач)

  • Стек: SwiftUI, Firebase (Firestore, Auth), UserNotifications.
  • Цель: Освоение SwiftUI и real-time баз данных.
  • Ключевые моменты:
    • Синхронизация задач между устройствами через Firestore.
    • Локализованные push-уведомления о дедлайнах.
    • Архитектура MVVM.

3. AR-Chess (Шахматы в дополненной реальности)

  • Стек: ARKit, SceneKit, MultipeerConnectivity.
  • Цель: Эксперименты с компьютерным зрением и сетевым взаимодействием.
  • Ключевые моменты:
    • Детекция плоскости и размещение шахматной доски.
    • Физика перемещения фигур в SceneKit.
    • P2P-мультиплеер через GameKit.

Общая цель: Углубленное понимание MVVM/VIPER, модульности (SPM) и написания тестов (XCTest).

Ответ 18+ 🔞

А, ну вот, смотри, классическая история! Сидит чувак, учит какой-нибудь UIKit, а ему говорят: "Да сделай пет-проект, блядь, работодатель смотрит!" И он такой: "Ага, щас, сделаю". А на деле это ж просто предлог, чтобы новую хуйню потрогать, не боясь, что прод накроется медным тазом. Полигон, ёпта, самый честный.

1. WeatherApp (Прогноз погоды)

  • Стек: UIKit, CoreLocation, URLSession, CoreData, Combine.
  • Цель по-человечески: Ну, REST API потыкать, чтобы не просто print(response) в консоль, а чтобы хоть что-то на экране шевелилось. И чтоб, если интернет сдох, приложение не выло как сука, а показывало вчерашнюю погоду из своей подвальной базы.
  • Что там было интересного:
    • Тыкался в OpenWeatherAPI, пока не понял, что appid надо передавать, а не в голове держать. Просветление, блядь.
    • Запихивал всё в CoreData, а потом охуевал, откуда берутся дубликаты записей. Чистил, переписывал, волнение ебать.
    • Фоновое обновление по гео — это отдельный цирк. Получал координаты, а там не Москва, а какой-нибудь Подъёбкино, и погода соответствующая.
  • Кусок кода, который тыкал палкой: (Не трогаю, всё как есть, техническая святыня)
    func fetchWeather(for city: String) async throws -> WeatherData {
    let url = URL(string: "https://api.openweathermap.org/...")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode(WeatherData.self, from: data)
    }

2. TaskTracker (Менеджер задач)

  • Стек: SwiftUI, Firebase (Firestore, Auth), UserNotifications.
  • Цель по-человечески: Отмазаться от UIKit, сказать "я в тренде, я на SwiftUI". И заодно прикрутить эту вашу "реал-тайм базу", чтобы задачи с телефона на планшет сами летали, как будто так и надо.
  • Что там было интересного:
    • Синхронизация через Firestore — вроде магия, а на деле подписался на snapshotListener и понеслась. Добавил задачу на айфоне — она тут же всплыла на айпаде. Чувствовал себя богом на полчаса, пока не словил первый permission denied.
    • Локализованные пуши о дедлайнах — это чтобы самому себе напоминать, что пора бы уже этот пет-проект забросить.
    • MVVM на SwiftUI — это когда @Published переменные, а вьюха сама перерисовывается. Красота, пока не начинаешь пихать туда логику и получаешь ViewModel на 300 строк, хитрая жопа.

3. AR-Chess (Шахматы в дополненной реальности)

  • Стек: ARKit, SceneKit, MultipeerConnectivity.
  • Цель по-человечески: Ваще оторваться по полной. Сказать "я делал AR" — это же солидно звучит! А по факту — искал пол столу полчаса, чтобы доску поставить.
  • Что там было интересного:
    • Детекция плоскости — это священный ритуал. Водишь телефоном, как идиот, а он тебе голубые квадратики рисует. "Вот тут можно, сука, доску воткнуть!".
    • Физика в SceneKit — это когда фигуру толкаешь, а она улетает в хер знает куда, задев короля. "Шах и мат, блядь, в виртуальный шкаф".
    • P2P-мультиплеер — это высший пилотаж. Настроил соединение, начали игру, а соперник взял и вышел. Обида ебать. Играешь сам с собой, полупидор.

А общая-то цель, блядь, какая? Да всё просто: не просто print("Hello, world!") писать, а понять, как эта паззл-хуязл из MVVM, модулей через SPM и этих ваших тестов собирается во что-то, что не развалится от одного твоего чиха. Чтобы в резюме написать не "знаком с", а "применил на практике, вот ссылка на гит, можете потыкать". Вот и вся философия, в рот меня чих-пых.