Нужно больше технических подробностей на канал про моё обучение и примеров Swift кода с фичами?
Anonymous Poll
93%
✅ Да, больше технических подробностей про разработку под iOS
7%
❌ Нет, небольших упоминаний вполне достаточно
👍3 1
30-я неделя обучения окончена
Успешно, но с трудом закрыл 17-й спринт. За это время я изучил и реализовал много нового в учебном проекте tracker. Оказывается можно не хардкодить весь UI на одном языке, а выносить текстовые поля в файлы локализации, чертовски удобно. Вот здесь вместо того, чтобы просто завести лейбл "Статистика", я создал ссылку внутри экрана на строку в файле Localizable.strings
Так можно аккуратнее следовать правилам русского языка в окончаниях изменяемых слов, логика которых привязана к числительным: "1 день" или "2 дня". Ещё добавив
можно создавать эталонные скриншоты нужных экранов и при несовпадении с ними понимать где происходят изменения в UI. Для того чтобы не трогать реальные данные и ревьюеру было удобно проверять мою работу я написал моковый класс для этих тестов
Добавил тёмную тему. Думал что знаю как это делать и был уверен что все
Имплементировал поиск и фильтрацию по трекерам сразу допустив несколько грубых ошибок. Исправлять которые приходилось по чек-листу в конце спринта. Почему спросите вы? Потому что не было грамотно проработанного и четкого юзерфлоу описанного в тз проекта. Пришлось много спрашивать в чате студентов и придумывать сценарии самостоятельно. В итоге написал как требует спринт. Код приводить не буду, его слишком много. Написал интерфейс для SDK AppMetrika, чтобы собирать статистику по работе приложения в Яндекс аналитике
😍
😍
Успешно, но с трудом закрыл 17-й спринт. За это время я изучил и реализовал много нового в учебном проекте tracker. Оказывается можно не хардкодить весь UI на одном языке, а выносить текстовые поля в файлы локализации, чертовски удобно. Вот здесь вместо того, чтобы просто завести лейбл "Статистика", я создал ссылку внутри экрана на строку в файле Localizable.strings
/* Statistics */
"statistics.title" = "Статистика";
private func setupTitle() {
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.text = NSLocalizedString("statistics.title", comment: "Статистика")
titleLabel.font = UIFont(name: "SFPro-Bold", size: 34) ?? UIFont.boldSystemFont(ofSize: 34)
titleLabel.textColor = UIColor(named: "BlackDay")
titleLabel.textAlignment = .left
view.addSubview(titleLabel)
NSLayoutConstraint.activate([
titleLabel.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 4),
titleLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16),
titleLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16)
])
}Так можно аккуратнее следовать правилам русского языка в окончаниях изменяемых слов, логика которых привязана к числительным: "1 день" или "2 дня". Ещё добавив
import XCTest
import SnapshotTesting
@testable import Tracker
можно создавать эталонные скриншоты нужных экранов и при несовпадении с ними понимать где происходят изменения в UI. Для того чтобы не трогать реальные данные и ревьюеру было удобно проверять мою работу я написал моковый класс для этих тестов
Добавил тёмную тему. Думал что знаю как это делать и был уверен что все
colorset записал верно и в коде не запутаюсь, но разумеется многое пошло не по плану. Где-то импортировал цвет только "any appearance" и не добавил "dark", где-то использовал сет предназначенный для фона в ячейку коллекции, а текст активной кнопки был одинаков в темной и светлой теме. Потом часа три правил ассеты и чистил кодИмплементировал поиск и фильтрацию по трекерам сразу допустив несколько грубых ошибок. Исправлять которые приходилось по чек-листу в конце спринта. Почему спросите вы? Потому что не было грамотно проработанного и четкого юзерфлоу описанного в тз проекта. Пришлось много спрашивать в чате студентов и придумывать сценарии самостоятельно. В итоге написал как требует спринт. Код приводить не буду, его слишком много. Написал интерфейс для SDK AppMetrika, чтобы собирать статистику по работе приложения в Яндекс аналитике
> 17-й спринт оказался объёмным и я не сразу понял какой объём работ мне предстоит выполнить. Тем не менее я успешно закрыл модуль и впереди меня ждёт неделя каникул. Планирую немного отдохнуть и доработать своего телеграм бота Please open Telegram to view this post
VIEW IN TELEGRAM
👍8 5❤1
Где ты учишься или работаешь в IT?
Anonymous Poll
83%
🏠 Дом
0%
🏡 Коворкинг
14%
🏢 Офис
3%
🏕️ Кафе или другое общественное пространство
👍1
Неделя каникул подошла к концу. Как я провёл это время? Продуктивно!
Полностью распилил свой opensource проект на серверную часть и папки с отдельными телеграм ботами. Думал что сделал это раньше, но оказывается что в core-server затаился сервис принятия chatID, скачивания видео через webhook и ещё несколько методов для стабильности первого функционала. В качестве примера сервисов для будущих пользователей доработал свой первый бот до статуса MVP. Теперь он надёжно работает и кропает любое загруженное пользователем видео в кружок, будь то вертикальное или горизонтальное. Система сама "делает хорошо". Если же пользователь запустит miniapp, то сможет сам кропнуть загруженное видео или снять его на катеру (вот этот пункт звучит странно). Приятный интерфейс оповестит о том что кружок готов. Как это выглядит уже есть в сторис канала. Подготовил документацию по развёртыванию сервиса, его запуску и отладке
😺 Вот ссылка на страничку моего проекта по разработке телеграм ботов
😍
😍
Полностью распилил свой opensource проект на серверную часть и папки с отдельными телеграм ботами. Думал что сделал это раньше, но оказывается что в core-server затаился сервис принятия chatID, скачивания видео через webhook и ещё несколько методов для стабильности первого функционала. В качестве примера сервисов для будущих пользователей доработал свой первый бот до статуса MVP. Теперь он надёжно работает и кропает любое загруженное пользователем видео в кружок, будь то вертикальное или горизонтальное. Система сама "делает хорошо". Если же пользователь запустит miniapp, то сможет сам кропнуть загруженное видео или снять его на катеру (вот этот пункт звучит странно). Приятный интерфейс оповестит о том что кружок готов. Как это выглядит уже есть в сторис канала. Подготовил документацию по развёртыванию сервиса, его запуску и отладке
> это моя первая и пока что самая сложная самостоятельная практика разработки, будет круто если поделитесь своей историей или поставите звёздочку:
Please open Telegram to view this post
VIEW IN TELEGRAM
Во сколько у тебя был первый IT опыт? Сгодится всё, от создания фронтенда и написания скриптов, до переустановки винды у горячей одноклассницы. Дефолтная установка программ и игры не считаются 😆
Anonymous Poll
15%
☝🏻 Лет в 6-11
47%
✌🏻 Примерно 12-17
23%
🫰🏻 После 18
15%
👴🏻Перекатился после 25, а до этого вообще ничего не делал в компьютерах, ну или юзал дефолтно
31-я неделя обучения окончена
Открыл расширенный модуль курса iOS разработчик состоящий из четырёх спринтов 18, 19, 20 и 21. Изучил порождающие, структурные и поведенческие паттерны проектирования, а также место их применения для создания более масштабируемых и поддерживаемых систем. Ещё изучил антипаттерны: спагетти код, завязанность на одной библиотеке, магические числа и god object, чтобы не наступать на чужие грабли в программировании
Сейчас моя когорта создаёт учебное приложение "Расписание путешествий" на SwiftUI. Добавив нескольно библиотек я научился генерировать сетевой слой для этого проекта. Результатом работы являются восемь сервисов, вызываемых через API Яндекс путешествий. Они возвращают (пока ещё в консоль) данные по определенным запросам на базе моего Swift кода
😍
😍
Открыл расширенный модуль курса iOS разработчик состоящий из четырёх спринтов 18, 19, 20 и 21. Изучил порождающие, структурные и поведенческие паттерны проектирования, а также место их применения для создания более масштабируемых и поддерживаемых систем. Ещё изучил антипаттерны: спагетти код, завязанность на одной библиотеке, магические числа и god object, чтобы не наступать на чужие грабли в программировании
Сейчас моя когорта создаёт учебное приложение "Расписание путешествий" на SwiftUI. Добавив нескольно библиотек я научился генерировать сетевой слой для этого проекта. Результатом работы являются восемь сервисов, вызываемых через API Яндекс путешествий. Они возвращают (пока ещё в консоль) данные по определенным запросам на базе моего Swift кода
> удивительно как это работает, кто-то много лет назад написал библиотеку для OpenAPI генерации и подключив её можно значительно ускорить процесс разработки сервисаPlease open Telegram to view this post
VIEW IN TELEGRAM
Так что в итоге? По твоим ощущениям в инфополе или на личном опыте:
Anonymous Poll
49%
✅ Джуны нужны
51%
❌ Джуны не нужны
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Я получил инвайт в Sora. В октябре 2025 они раскатили приложение под iOS только на США и Канаду
Поскольку я закрыл 18-й спринт почти на неделю раньше, решил поизучать нейросети. За время, которое я потратил на погружение в учёбу по iOS разработке t2v / i2v сервисы прыгнули в космос. Начал с последнего релиза от OpenAI. Сменил локацию в Appstore, скачал приложение, залогинился используя прокси траффик через США и упёрся в экран с сообщением о том, что в приложение пускают только по инвайтам из шестизначного кода
Я потратил примерно 20 минут чтобы найти код в тематических Telegram чатах. И вот ура, врата безумия открыты. Наконец-то дорвался до... жутко лагающей и сильно тормозящей лентой вертикальных нейрошедевров с медленной загрузкой видео из черновиков в профиль. Это новая социальная сеть и есть "убийца тиктока"? Ха ха. Верим? пс: видос с котами мой, музыка наложена в Capcut
😍
😍
Поскольку я закрыл 18-й спринт почти на неделю раньше, решил поизучать нейросети. За время, которое я потратил на погружение в учёбу по iOS разработке t2v / i2v сервисы прыгнули в космос. Начал с последнего релиза от OpenAI. Сменил локацию в Appstore, скачал приложение, залогинился используя прокси траффик через США и упёрся в экран с сообщением о том, что в приложение пускают только по инвайтам из шестизначного кода
Я потратил примерно 20 минут чтобы найти код в тематических Telegram чатах. И вот ура, врата безумия открыты. Наконец-то дорвался до... жутко лагающей и сильно тормозящей лентой вертикальных нейрошедевров с медленной загрузкой видео из черновиков в профиль. Это новая социальная сеть и есть "убийца тиктока"? Ха ха. Верим? пс: видос с котами мой, музыка наложена в Capcut
> сегодня стартовал 19-й спринт, второй из четырёх по расширенному курсу iOS разработки. В этом спринте я создам несколько экранов приложения "Travel shedule" на SwiftUIPlease open Telegram to view this post
VIEW IN TELEGRAM
Вопрос к действующим iOS разработчикам и тем кто обучается. Что чаще приходится использовать в работе, учёбе или для своих проектов?
Anonymous Poll
58%
UIkit
42%
SwiftUI
32-я неделя обучения окончена
Начал глубокое погружение в вёрстку на SwiftUI в 19-м спринте. Поработал с контейнерами, списками и "ленивыми контейнерами" (List, LazyVStack, LazyHStack)
Этот Text можно обернуть в контейнер VStack если предполагается несколько элементов, но в body может брать лишь один такой элемент. А через точку применяются модификаторы к любому обьекту
Конечно все что я узнал приводить тут не буду, но мне понравилось что в SwiftUI в файлах где предполагается видеть то что находится в body можно отобразить на canvas в формате live preview:
😍
😍
Начал глубокое погружение в вёрстку на SwiftUI в 19-м спринте. Поработал с контейнерами, списками и "ленивыми контейнерами" (List, LazyVStack, LazyHStack)
struct ContentView: View {
var body: some View {
Text("Хоба")
.font(.system(size: 18, weight: .light, design: .serif))
.italic()
.padding()
}
}Этот Text можно обернуть в контейнер VStack если предполагается несколько элементов, но в body может брать лишь один такой элемент. А через точку применяются модификаторы к любому обьекту
VStack {
Button("Хоба!") {
isFirst.toggle()
}
Text(isFirst ? "Хоба 1" : "Хоба 2")
}Конечно все что я узнал приводить тут не буду, но мне понравилось что в SwiftUI в файлах где предполагается видеть то что находится в body можно отобразить на canvas в формате live preview:
#Preview {
NameStruct() // в скобках могут быть условия отображения
.padding() // а тут модификаторы
}
Также поделал редактируемые списки и таблички. Для каждого урока создавал новую вьюшку в экспериментальном экскод проекте. Писал всё туда чтобы лучше освоить тему> кажется я опять не успеваю сдать работу по спринту, но мне очень важно впитать всё что дает Яндекс в расширенной части курса по iOS разработке. Приходится больше чем обычно закапываться в пояснения уроков, практику и перевода неясных моментов в ясные с помощью ChatGPT. Это гораздо интереснее чем всё что я изучал ранееPlease open Telegram to view this post
VIEW IN TELEGRAM
Как давно вы кардинально меняли свою жизнь? Будь-то переезд, питание, отказ от вредных привычек, семья, смена занятости - вобщем что-то значимое как давно было или планируете?
Anonymous Poll
9%
Было очень давно, за пределами десяти лет назад
4%
Было в пределах ближайших десяти лет
19%
Было в пределах пяти лет
55%
Было относительно недавно, год, два
30%
Я намереваюсь в ближайшее время реализовать важный поворот в своей жизни
👍1
33-я неделя обучения окончена
Я не успел сдать приложение по итогам 19-го спринта. Очень много времени ушло на теорию по SwiftUI вёрстке и ещё больше на создание базовых экранов учебного приложения
Столкнулся с тем что иногда даже нейронки не могут дать ответ на странное поведение программы. Я не всегда помню какие запросы приходят от API Яндекса и какие из них работают корректно. Для этого нужно глубоко лезть в код и постоянно переделывать то одно то другое. Сначала отваливается выдача, потом одна фильтрация, затем другая, а дальше оказывается что пиктограммы перевозчиков в оригинале сильно вытянутые и нам надо их кропнуть до 38х38 px так, чтобы была видна основная часть логотипа находящаяся сильно левее. Причём это необходимо сделать для всех перевозчиков, а не только для РЖД. Вобщем не буду спешить и аккуратно доделаю приложение за несколько дополнительных дней параллельно проходя теорию уже 20-го спринта
😍
😍
Я не успел сдать приложение по итогам 19-го спринта. Очень много времени ушло на теорию по SwiftUI вёрстке и ещё больше на создание базовых экранов учебного приложения
Столкнулся с тем что иногда даже нейронки не могут дать ответ на странное поведение программы. Я не всегда помню какие запросы приходят от API Яндекса и какие из них работают корректно. Для этого нужно глубоко лезть в код и постоянно переделывать то одно то другое. Сначала отваливается выдача, потом одна фильтрация, затем другая, а дальше оказывается что пиктограммы перевозчиков в оригинале сильно вытянутые и нам надо их кропнуть до 38х38 px так, чтобы была видна основная часть логотипа находящаяся сильно левее. Причём это необходимо сделать для всех перевозчиков, а не только для РЖД. Вобщем не буду спешить и аккуратно доделаю приложение за несколько дополнительных дней параллельно проходя теорию уже 20-го спринта
> да, я не успеваю и сегодня стартовал 20-й спринт. Из 30-й когорты активных студентов в чате четверо включая меня. Из нас сдал только одинPlease open Telegram to view this post
VIEW IN TELEGRAM
Откуда вы узнали про этот Telegram канал?
Anonymous Poll
43%
У автора в профиле
53%
iOS Squad (папка каналов)
5%
Ютуб
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
34-я неделя обучения окончена
Ещё не сдал 19й спринт и уже почти закончил теорию 20-го. Два раза отправлял ревьюеру и два раза мне разворачивали приложение. Сначала проект не билдился, а потом белый экран и никаких наводок от ревьюера. Типа, просто исправь это и если будут вопросы обращайся к наставнику. Исправил сборку и добавил ассеты в индекс. Оказывается их не брал git и поэтому цвета приложения не отображались. Поправил файл гитигнора тк почему-то туда попал Content.json ассета файла картинки для таббара, левая сторона которого используется при переходе на главный экран приложения. Наставник помог скриншотом где чётко видно что этой пикчи небыло. Окей, вроде всё готово для третьей попытки, но я не отправил на ревью тк хз что там еще не проиндексировалось. Надо ещё раз основательно протестировать проект и закончить теорию 20-го спринта
😍
😍
Ещё не сдал 19й спринт и уже почти закончил теорию 20-го. Два раза отправлял ревьюеру и два раза мне разворачивали приложение. Сначала проект не билдился, а потом белый экран и никаких наводок от ревьюера. Типа, просто исправь это и если будут вопросы обращайся к наставнику. Исправил сборку и добавил ассеты в индекс. Оказывается их не брал git и поэтому цвета приложения не отображались. Поправил файл гитигнора тк почему-то туда попал Content.json ассета файла картинки для таббара, левая сторона которого используется при переходе на главный экран приложения. Наставник помог скриншотом где чётко видно что этой пикчи небыло. Окей, вроде всё готово для третьей попытки, но я не отправил на ревью тк хз что там еще не проиндексировалось. Надо ещё раз основательно протестировать проект и закончить теорию 20-го спринта
> какой-то цирк получился. Я не всегда понимаю причины багов, долго их ищу, ревьюер не даёт наводок, а наставник отвечает односложно и только после того, как я дёргаю куратора ...Please open Telegram to view this post
VIEW IN TELEGRAM
👍3 2 1
Как ты общаешься с коллегами, менторами, ревьюерами, студентами в своей практике / работе / учёбе?
Anonymous Poll
6%
Они туговато идут на контакт в переписке и / или на созвонах, бывает что односложно отвечают
34%
Минимально рабочая коммуникация для выполения основных функций
38%
Общаюсь открыто, в основном продуктивно и чуть больше чем надо по основным направлениям
22%
Имею доверительные дружеские и профессиональные связи с людьми по работе / учебе / менторству
👍2
Начал делать сервис по удалению ватермарки с присланных пользователем ссылок на видео в Sora
Ну как начал. Идея повторить успешный проект которым сам пользуюсь у меня была давно. Поскольку я работаю над платформой для развёртывания ботов на Vapor то одним из таких сервисов я и начал заниматься. Взял паблик ссылку на одно из своих видео и ссылку что дал мне nosorawm[dot]app. Закинул в Cursor и в течение восьми часов и десяти кружек крепкого чая с мёдом по разному делал с агентами так, чтобы бот возвращал пользователю видео без ватермарки. Сначала по честному через перехват обращений к апи, потом к сессии, потом дошел до использования скрапперов. Перепробовал шесть штук и все либо возвращают какую-то левую страничку либо видео с ватермаркой
На следующий день продолжил, и на этот раз установил Node.js / Docker / Playwrite / Chromium для того чтобы имитировать реальный браузер с печеньками. В течение ещё шести часов безуспешно менял Swift код сервиса и js скрипты в докере что управляли браузером. Ничего не получалось
Последнее что пробовал: это (для безопасности основного аккаунта) создал твинк по инвайту в Sora чтобы перехватить "access token" сессии через devtools в Chrome. На случай если OpenAI забанит второй аккаунт будет не так жалко. Единственное чего добился - прохождение системы безопасности Cloudflare и отсутствия выставления моему сервису "challenge" от системы защиты, тк теперь мои сессии "прогреты". А вот как добыть верный UUID исходного видео через не подгружающийся _NEXT_DATA_ мы с Claude Sonnet 4.5 и GPT5 еще не выяснили. Лапки я не сложил, а просто пошёл отдыхать. Взлому время, а спатеньки надо ..
😍
😍
Ну как начал. Идея повторить успешный проект которым сам пользуюсь у меня была давно. Поскольку я работаю над платформой для развёртывания ботов на Vapor то одним из таких сервисов я и начал заниматься. Взял паблик ссылку на одно из своих видео и ссылку что дал мне nosorawm[dot]app. Закинул в Cursor и в течение восьми часов и десяти кружек крепкого чая с мёдом по разному делал с агентами так, чтобы бот возвращал пользователю видео без ватермарки. Сначала по честному через перехват обращений к апи, потом к сессии, потом дошел до использования скрапперов. Перепробовал шесть штук и все либо возвращают какую-то левую страничку либо видео с ватермаркой
На следующий день продолжил, и на этот раз установил Node.js / Docker / Playwrite / Chromium для того чтобы имитировать реальный браузер с печеньками. В течение ещё шести часов безуспешно менял Swift код сервиса и js скрипты в докере что управляли браузером. Ничего не получалось
Последнее что пробовал: это (для безопасности основного аккаунта) создал твинк по инвайту в Sora чтобы перехватить "access token" сессии через devtools в Chrome. На случай если OpenAI забанит второй аккаунт будет не так жалко. Единственное чего добился - прохождение системы безопасности Cloudflare и отсутствия выставления моему сервису "challenge" от системы защиты, тк теперь мои сессии "прогреты". А вот как добыть верный UUID исходного видео через не подгружающийся _NEXT_DATA_ мы с Claude Sonnet 4.5 и GPT5 еще не выяснили. Лапки я не сложил, а просто пошёл отдыхать. Взлому время, а спатеньки надо ..
> Сегодня стартовал последний 21й спринт моего обучения в Яндексе. За ним сдача проекта "Расписание путешествий" и командный дипломный проектPlease open Telegram to view this post
VIEW IN TELEGRAM
👍2 2❤1 1
Кого заменят в экономически развитых странах нейросетевые агенты и их физическое воплощение в гуманоидных и промышленных роботах? Твой прогноз в рамках 2026-2036:
Anonymous Poll
9%
Заменят рабочий класс
27%
Заменят юристов, бухгалтеров, менеджеров, продажников, офисных сотрудников
11%
Заменят ремесленников, дизайнеров, креативных фрилансеров и людей искусства
23%
Заменят всех IT специалистов включая ML
57%
Не заменят, рутина будет выполняться роботами в логистике, а операционная деятельность агентами
👍2
Разработал до MVP бота, который скачивает тиктоки без ватермарок
Я как-то рассказывал о том что хочу повторить все сервисы которыми сам пользовался. Вот ещё один пример: бот принимает от пользователя ссылку на видео, нормализует её (учитывая m.‑версии, короткие vt/vm) и запускает цепочку провайдеров (TikWM → TiklyDown → Tikmate → SnapTik → SSSTik). Каждый шаг логируется, при неуспехе выполняются повторные попытки. Только когда вся цепочка исчерпана, пользователь видит понятное сообщение об ошибке. Позже добавил RateLimiter чтобы желающие исчерпать лимиты API или за ддосить мой сервис не смогли это сделать без анальной боли. Теперь юзер может прислать не больше двух ссылок в минуту, а при превышении бот просит подождать. Отправка тиктока выполняется через API телеграм. В логах фиксируются выбранный провайдер, статус ответов и время обработки (возможно это пригодится)
😍
😍
Я как-то рассказывал о том что хочу повторить все сервисы которыми сам пользовался. Вот ещё один пример: бот принимает от пользователя ссылку на видео, нормализует её (учитывая m.‑версии, короткие vt/vm) и запускает цепочку провайдеров (TikWM → TiklyDown → Tikmate → SnapTik → SSSTik). Каждый шаг логируется, при неуспехе выполняются повторные попытки. Только когда вся цепочка исчерпана, пользователь видит понятное сообщение об ошибке. Позже добавил RateLimiter чтобы желающие исчерпать лимиты API или за ддосить мой сервис не смогли это сделать без анальной боли. Теперь юзер может прислать не больше двух ссылок в минуту, а при превышении бот просит подождать. Отправка тиктока выполняется через API телеграм. В логах фиксируются выбранный провайдер, статус ответов и время обработки (возможно это пригодится)
> Минимально рабочий прототип готов: одна ссылка дает одно видео без ватермарки тиктока. Когда релиз? Только после прохождения всех тестов и поднятия платформы в Docker образе на арендованом VPS. Сейчас я изучаю работу девопса Please open Telegram to view this post
VIEW IN TELEGRAM
👍6 4❤1

