Пепега Девелопмент – Telegram
Пепега Девелопмент
175 subscribers
10 photos
3 videos
2 files
10 links
Download Telegram
Привет-привет! 👋

Последний пост был аж в ноябре.
Обойдёмся без долгих оправданий — было лень, я уставал, а хотелось успеть "сделать всё". Для последнего я знаю только один рабочий способ: нужно срезать хотелки.

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

Эта идея может дать неожиданные профиты. Кроме "меньше стресса", "больше сил", "уделяю время себе" есть шанс обнаружить, что и кол-во выполняемых дел увеличилось. Произошло же это потому, что перестали постоянно ебать себе голову с "успеть всё", а начали делать.

И конечно это работает при понимании своих хотелок. Если их нет, а жизнь немного "на автопилоте", то возможно такой подход станет оправданием бесконечной прокрастинации. Было и было! 🛌
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝106
Привет всем! ☕️

Давненько ничего не писал. Што ш - было и было. Начался WWDC 25, а у меня есть бесполезная привычка смотреть записи и тыкать палкой в новые фичи.

Не знаю, какой там рак на горе свитнул, но Эпплы сделали что-то реально прикольное и полезное - реализовали макрос Observable для UIKit'а 💪 ! Работает он для: контроллеров, вьюх и коллекций.

При обновлении модели у контроллера вызывается метод viewWillLayoutSubviews.

class SampleViewController: UIViewController {

@IBOutlet var counterLabel: UILabel!

private let counterModel = Counter()

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

counterLabel.text = "\(counterModel.value)"
}
}


В случае UIView вызовется layoutSubviews

class CounterView: UIView {

private let counterModel = Counter()
private let label = UILabel()

override init(frame: CGRect) { ... }

override func layoutSubviews() {
super.layoutSubviews()

label.text = "\(counterModel.value)"
}
}


Поддерживается вложенность. Внутренние классы придётся пометить макросом, структуры заработают сразу (что ожидаемо, так как те же Int'ы тоже структуры)

@Observable
class Counter {
var value: Int = 0
let innerModelClass = InnerModel()
var innerModelStruct = InnerModel2()
}

@Observable
class InnerModel {
var value: Int = 0
}

struct InnerModel2 {
var value: Int = 0
}


Бэкпорт до iOS 18 (скомпилируется и на iOS 17, лол), но нужно добавить флажок UIObservationTrackingEnabled = YES в info.plist.
Загрузить и потыкать компилирующиеся примеры можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥125🤡1
Сегодня будем учиться простой и правильной установке программ на мак!
Иногда вижу, как люди тратят на это неприлично много времени. Поэтому давайте раскажу о варианте поэффективнее 👍.

Из коробки у нас есть 2 способа:
1) аппстор для мака,
2) скачать и установить вручную.
Обе опции довольно всратые. В сторе много чего нет, а в 2к25 искать установщики в интернете уныло 🏥.

К счастью существует решение - homebrew. Это консольная утилита.
С её помощью я ставлю:
- обычные программы типа телеги, зума, слэка, дискорда
- консольные рабочие утилиты (cocoapods, xcodegen, go, java и т.д.)
- рабочие программы установщик которых как правило находится где-нибудь на странице релизов гитхаба (xcodes)

Для установки нужно запустить терминал и выполнить:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


Для установить аппки нужно знать её имя внутри хоумбрю. Получить его можно несколькими способами:
- в терминале запустить brew search app_name
- воспользоваться поиском на сайте brew.sh
- запросом в гугл homebrew app_name (мой выбор)
- (внезапно) спросить у чата гпт - пример

Узнав имя, нам достаточно запустить команду brew install app_name, подождать завершения и можно пользоваться.

Не всё можно установить таким образом. Хоть хоумбрю дефакто и стал стандартом, но находятся аппки, которые нужно устанавливать вручную 💧.

Процесс установки может показаться чутка тяжеловатым, ещё и терминал использовать надо. В действительности процесс занимает у меня около минуты.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥174👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Нельзя просто взять и перестать хекать со стабильности SwiftUI ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
💯8🤣5😁2
Приветы всем!

Как-то не доходили руки до постов на тему тулинга. Што ш, будем сегодня разбираться, как завести иосные проекты в курсоре! 🚘

Начнём издалека и вспомним, что Apple нам так-то выкатили Swift Language Server Protocol. Эта вещица позволяет наделить любой редактор возможностью понимать свифтовый код.
Очень грубо говоря - эта штука умеет взять все файлики проекта, скормить его компилятору и подвестить нам ошибки. Есть только один нюанс - она нихрена не знает про системные фреймворки. Всякие DispatchQueue.main.async и т.д. для него выглядит как бред сумашедшего.

И это по факту полная руина попыток сбежать из икскода. Мы можем писать на свифте в том же VS Code, но не можем писать под иос 😤.

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

Так появился Build Server Protocol. Если LSP мог предоставить нам автокомплит только в рамках существующего кода, то BSP уже знает буквально всё о нашем проекте и соотвественно уровень автокомплита совершенно иной.

Пару лет назад кто-то обнаружил поддержку BSP в Xcode. Так появился проект xcode-build-server. Это позволило наконец иметь нормальный автокомплит в других редакторах. Ничего более он не умеет, но многим уже и этого достаточно. Я пытался его использовать годик назад, но как-то не срослось.

И вот недавно увидел проект Sweetpad. Это расширение для VS Code. Он умеет не только показывать хороший автокомплит, но и полноценно запускать проект без захода в икскод.

Сегодня решил дать ему шанс и поработал весь день из курсора.

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

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

Такие дела! ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍6🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Вы знали, что Swift можно использовать для написания скриптов? 💡

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

Только вчера вот вспомнил, что ведь и свифт можно под такие нужды использовать 🏥.

Всё оказалось очень просто: создать файл, выставить права запуска и гооооол 😎 !
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥62👏1😍1
Приветы всем! Расскажу сегодня про одну неофициальную фичу Свифта.

Пусть у нас есть 2 протокола, у которых, так уж вышло, есть одинаковый по названию метод.

protocol A {
func kek()
}

protocol B {
func kek()
}


И мы хотим иметь 2 различные реализации этого метода в 1 классе:

class Pepega: A, B {
func kekForA() { print("a") }
func kekForB() { print("b") }
}


Для решения этой задачи можно применить аттрибут @_implements(ProtoName, ProtoMethod). Получится так:

class Pepega: A, B {
@_implements(A, kek())
func kekForA() { print("a") }

@_implements(B, kek())
func kekForB() { print("b") }
}


Далее при использовании сущности под соотвующим интерфейсом у нас будет меняться вывод:

let pepega = Pepega()

let a = pepega as A
let b = pepega as B

a.kek() // тут будет a
b.kek() // тут уже будет b


Аттрибут не является приватным (= запрещённым) API. Это фича на уровне компилятора. Единственная опасность – отсутствие гарантий выпила в след. версии компилятора (что кмк фигня).

Очевидно такие вещи не нужно юзать по любому поводу. Идеальное решение – конечно же переименовать метод. Только это не всегда возможно: протокол может идти из библиотеки, он может юзаться в 100500 местах (рефакторинг в икскоде, гы) либо нам просто лень 💡 .
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2👏1😨1
Уже как некоторое время поглядываю иосные вакансии на хедхантере 🤔 .

За последних два с половиной месяца имеем:

📉 Вакансий стало меньше. Была надежда на осенний буст, но фактически пробили дно.

Джуны без опыта дефолтно не нужны.

📈 Внезапно стали больше хайрить иосеров с 1-3 года и 6+ лет в резюме.

Есть спад по вакансиям с 3-6 годами, но тут заметная корреляция с общим кол-вом, поэтому реальное падение вероятно не такое большое.

Такие дела, терпим! 😷
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝1510😢2
Занимался на этой неделе добавлением ликвид глАсса в приложение. Набралось чутка мемов-заметок.

1) Дока по UIKit'у - срань невероятная. 0 код сэмплов, 0 документации от эпплов. Только 1 несчастное видео с wwdc, где в слайдах переменные с ошибками 💧.

2) Дока по суи вполне себе окс.

3) Суишная апишка по ощущением заметно богаче и удобнее китовой. Некоторым вещам из суи я просто не нашёл рабочих альтернатив в уиките.

4) Пришлось выкосить все использования метода point(inside для увеличения области нажатия.

Условно, если раньше хотели видеть кнопку размерами 24 на 24 и областью нажатия 40 на 40, то в ликвид глассе вы скорее всего захотите иметь стеклянную кнопочку 40 на 40. Получается, давнишний трюк, который часто спрашивали на собесах, превратился просто в хуёвую практику, омегалул 🏥.

5) Новый уи внезапно понравился. Эпплы красиво пиздели вещали про "невидимость" интерфейса, но вообще на деле оно как-то так и ощущается.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍144🔥3
Приветы всем! ❤️

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

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

Любой фидбек приветствуется ☕️ !
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥11
Давайте я вам сегодня расскажу, почему устройства Apple – один из самых простых и дешёвых способов получить великолепный звук при просмотре кино/сериалов 🏥.

Что я называю великолепным звуком? Для кино и сериалов это пространственный звук/долби атмос/dts:x. Тот самый звук, который вы слышите в кинотеатрах.

И мы можем получить нечто очень похожее дома. Без дорогой аппаратуры, колонок, кучи проводов. Всё, что вам нужно, – айфон/мак/эппл тв и эппловые наушники (прошки или подсы от 3-го поколения). Далее включаете кинцо в соответствующем качестве и гол!

Обладатели нужных девайсов могут проверить это прямо сейчас. Открываете стандартное приложение TV и включите любой трейлер (это всё бесплатно). Услышите тот самый объёмный звук 🎧.

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

Лично у меня нет возможности (и желания, лол) делать домашний кинотеатр, а достойный телек найти сейчас не проблема.
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥5
Обновил мак на Tahoe. Эпплы, конечно, как обычно 😑.

1. Периодически хрипит звук из динамиков. Лечится командой в терминале:


sudo killall coreaudiod


2. Часто включатся вентиляторы. До апдейта я их слышал +- раз в неделю. Как я понял, Эппл накосячили в распределении ресурсов GPU. Зачем-то выделяются ресурсы отрисовки для программ, которые в фоне висят. Тут вероятно ждём фиксов.

3. Иконки у некоторых аппок стали шакальными.

4. Статус бар стал отображать приложения для которых была выбрана опция "спрятать иконку".

5. Затестить агентский режим в Xcode пока руки не дошли. Но фидбек уже видел. Судя по всему икскод жрёт токены будто они бесплатны. В общем всё ещё советую настроить нормально курсор и не быть бета-тестерами для эппл.

Лучше бы, конечно, ещё месяцок другой подождал с апдейтом, но тут выбор без выбора 💧.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
Как-то я особо не касался темы использования ИИ. Што ш, давайте расскажу! 😎

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

Основная причина кроется в том, что я работаю фиксированное кол-во времени в день. Я чётко понимаю: за обычное потраченное время я сделаю нормальный объем работы. Мне не нужно, прости господи за эту чушь, "бустить" работу нейронками. Плюс у меня сложный проект. Я начал приносить объективный вэлью только спустя год работы. Соответственно для меня всё ещё много задач выполняют роль онбординга, а нейронки (как вы, надеюсь, заметили 🥂) могут сильно уменьшать получаемый опыт.

Активно использую ЛЛМ для генерации тестового кода. К примеру, мне нужно кое-чего сделать на RxSwift, а я не помню пару специфичных операторов. Прошу чатгпт сделать сэмплы, кидаю их в икскод, кручу минут 10, узнаю нужное и возвращаюсь к основной задаче.

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

Генерация картинок для каналов в телеге и бусти. Здорово помогает не тратить время на те вещи, которые не делегировал.

Создание своих проектов. Вот тут, конечно, самый жир для меня. За последние полгода было сделано:
- тг бог на расте (Дуров, блять, научи тг парсить маркдаун),
- бекенд на го с ручным деплоем на сервак,
- фронтенд на жс,
- хождение в блокчейны эфира и соланы-девочки на го/расте/свифте.

Это не разработка в стиле "давай, курсор, ебашь мне всё". Нейронка очень сильно облегчает мне первые (= самые сложные) шаги. Я, кстати, пробовал на фронтенде писать в стиле вайбкодера – через неделю сгорел к хуям. Ну неизбежно попадешь в ситуацию, когда ты с ошалелыми глазами 🚨 крутишь слоты жмёшь кнопку generate в надежде, что вот ща всё заработает. Поэтому пока у меня есть 1 основное правило: я должен быть в состоянии продебажить генерируемый код.

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

Резюмируя, нейронки – топовая штука. Оооочень много чего без них я бы тупо не сделал. Такие дела! 🎩
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18
Получил фидбек, что канал с вакансиями имеет ценность. Што ш, буду тогда добавлять и остальные направления.

@pepega_android_vacancies – вот канал с андроидными вакансиями 🎩 . (так и до авроры доберёмся, ага)

Я так-то вижу, что большая часть подписчиков связаны всё же с иосью, но можете пересылать свои знакомым, мб кто работку ищет. И ещё можно посмотреть, на сколько ситуация на андроиде лучше иоса. Честно говоря, разница не такая большая, как мне казалось 👍 .
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥151
Привет всем! 🎩

Немного тематических и не очень анонсов.

Я постепенно добавляю каналы вакансий с другими направлениями. Соответственно сейчас есть и работают:
- андроид
- го
- иос

На всех каналах публикация происходит 1 раз в день.

Для желающих видеть подобные апдейты часто я начинаю заводить платные версии. Частота публикаций 2 раза в час. Сейчас доступен иос. Собственно если не хотите ручками мониторить хедхантер, но апплаиться одним из первых – добро пожаловать.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥4😎2
Привет, фолкс! 👋

Давненько ничё не писал. Делал каналы с вакансиями по другим направлениям. Теперь вместо парочки каналов у меня их 18 штук. Из-за этого всплыло куча тех. проблем, которые я успешно (очень на это надеюсь 🛌) решил. Ну об этом я ещё напишу, было весело.

Што ш, теперь есть:
- иос
- андроид
- фронтенд
- аналитики
- шарпы
- питон
- джава
- го
- куа

Вы можете их подсчитать и спросить, а где ещё 9 штук. У каждого канала есть платный собрат. Сейчас в доступе только иос, остальное пару дней в закрытой бете покрутится.

Хотел ещё добавить для проджектов, но там просто безумное кол-во вакансии, так шо позже.

По всем направлениям собираю статистику, ждите графички!

Судя по цифрам, если кто-то хочет вкатиться в айти, то это надо делать через аналитику/проджект/куа. Причём первые 2 идут с большим отрывом – все цифры позже, но там более 2000 вакансий (в иоси их в районе сотни ☕️), сумашествие какое-то.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥9
Смотрел на днях классное видео на тему развития ИИ (любителям коротких видео смотреть с осторожностью).

Автор упоминает термин DIY Software. Попросту это ПО, которые мы пишем для своих целей сами. К примеру, я так написал очень простой помодоро таймер.

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

В общем, а причём тут ИИ?

Смысл в том, что раньше написание подобного кода требовало навыков и умений. Теперь же вместо поиска/написания подобного ПО можно попросисть ллмку загенерить нужную программку.

К примеру, тот самый помодоро таймер чатгпт сделал за 1 минуту. Я же потратил полчаса на поиски нужного решения, не нашёл и ещё где-то суммарно 2ч писал сам скрипт.

Есть примеры и посвежее.

Когда я делал первый канал с вакансиями, я очень внезапно обнаружил, что нельзя сделать форматирование ссылки, которое телега сможет распознать 🤬.

Апишке можно скормить markdown/html, а вот на уровне cкопировать-вставить текст в приложении нельзя. Што ш, я погорел полчаса и пошёл писать echo bot'а, которому отправляешь markdown текст и сразу же получаешь красивое сообщение в ответ, которое можно скопировать. И конечно же я пошёл его вайбкодить.

Итоги:
– 40 минут ушло на бота
– 60 минут на деплой

Бот до сих пор прекрасно работает, а я из-за этого смог проверить гипотезу и идти дальше ☕️.

В общем, если вы до сих пор ллм-скептик, то ну...ничего не делайте! Зачем лишняя конкуренция 👋
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝10
Вот и графичек кол-ва вакансий по направлениям!

До сих пор в ахуях, что не тех. специалистов нужно чуть ли не больше чем технических 😑 .
Please open Telegram to view this post
VIEW IN TELEGRAM
😢23
Подбил статистику для иосных вакансий.

Видно, что сезонность осень-весна соблюдается, но в абсолютных величинах, конечно, скромновато ✝️
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥5
Интересно, можно ли таким образом заставить спамеров решать рабочие задачи. Токены ведь дорогое удовольствие 💡
Please open Telegram to view this post
VIEW IN TELEGRAM
😁32🦄4