Пора написать чего и по технической теме. Поэтому расскажу малость про свифтовый Structured Concurrency.
Не буду углубляться в определения — для этого есть документация и книжка Никиты, почитайте, если ещё не. Сейчас я хочу наглядно показать, чем он хорош.
Решим задачу использования long polling’а. Этот механизм нужен для ситуации “необходимо дождаться чего-либо, периодически проверяя статус”.
Частый кейс применения — экран оплаты. Пользователь ввел платёжные данные, нажал оплатить и убежал подтверждать транзакцию в банк. аппке. Пока приложение ждёт результата транзакции, оно примерно раз в секунду отправляет запрос на сервер для получения статуса.
Вот реализация этой задачи (fyi — код рабочий, копируйте, если интересно):
и вот для сравнения реализация на базе GCD:
В случае SC мы описываем конкретно бизнес-логику: отправить запрос, подождать и отправить запрос снова.
GCD реализация содержит много утилитарного кода: таймер, какие-то вложенные замыкания. Если забудем отменить таймер, то привет утечки памяти.
Фактически SC даёт более высокоуровневую абстракцию. Это позволяет нам больше думать о непосредственно логике чем об утилитарной части.
Не буду углубляться в определения — для этого есть документация и книжка Никиты, почитайте, если ещё не. Сейчас я хочу наглядно показать, чем он хорош.
Решим задачу использования long polling’а. Этот механизм нужен для ситуации “необходимо дождаться чего-либо, периодически проверяя статус”.
Частый кейс применения — экран оплаты. Пользователь ввел платёжные данные, нажал оплатить и убежал подтверждать транзакцию в банк. аппке. Пока приложение ждёт результата транзакции, оно примерно раз в секунду отправляет запрос на сервер для получения статуса.
Вот реализация этой задачи (fyi — код рабочий, копируйте, если интересно):
enum PaymentState {
case pending
case failed
case success
}
func performPaymentRequest() async throws -> PaymentState {
// Эмулируем долгий сетевой запрос
try await Task.sleep(for: .seconds(1))
let randomNumber = Int.random(in: 0...1)
if randomNumber == 1 {
return .success
} else {
return .pending
}
}
func makePayment() async throws {
var shouldPerformPolling = true
let pollingInterval: Duration = .seconds(2)
while shouldPerformPolling {
let paymentState = try await performPaymentRequest()
shouldPerformPolling = (paymentState == .pending)
if shouldPerformPolling {
try await Task.sleep(for: pollingInterval)
}
}
}
и вот для сравнения реализация на базе GCD:
func performPaymentRequest(completion: @escaping (Result<PaymentState, Error>) -> Void) {
// Эмулируем долгий сетевой запрос
DispatchQueue.global().asyncAfter(deadline: .now() + 1.0) {
let randomNumber = Int.random(in: 0...1)
if randomNumber == 1 {
completion(.success(.success))
} else {
completion(.success(.pending))
}
}
}
func makePayment() {
let pollingInterval: TimeInterval = 2.0
let timer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
timer.schedule(deadline: .now(), repeating: pollingInterval)
timer.setEventHandler {
performPaymentRequest { result in
switch result {
case .success(let paymentState):
if paymentState == .pending {
return
} else {
timer.cancel()
}
case .failure(let error):
timer.cancel()
}
}
}
timer.resume()
}
В случае SC мы описываем конкретно бизнес-логику: отправить запрос, подождать и отправить запрос снова.
GCD реализация содержит много утилитарного кода: таймер, какие-то вложенные замыкания. Если забудем отменить таймер, то привет утечки памяти.
Фактически SC даёт более высокоуровневую абстракцию. Это позволяет нам больше думать о непосредственно логике чем об утилитарной части.
🔥19👍6👏5✍1
Расскажу про типичную ловушку мигранта в Европу — релокация по рабочей визе.
Начинается она с того, что человек получает предложение поработать в какой-нибудь богатой стране Европы. Зарплата при этом будет на уровне 3-6к евро.
Вообще звучит неплохо, соглашаемся, приезжаем и видим следующее:
- зарплата в контракте гроссом. Вычитаем из неё 40%,
- аренда дорогая. 30-50% от остатка после налогов просто исчезает,
- еда дороже, услуги тоже (с заметно худшим качеством).
Всё это приводит к тому, что на выходе остаётся каких 0-20% от зарплаты (той скромной, после налогов🤡 ).
На этом этапе я никого не удивлю. Дальше начинается самое веселье!
1. Рабочая виза — узаконенное рабство👮 .
Что-то пошло не так: не умеете в копроративные игры, подкачали софты, не справились с задачами(почти исключено, кста) — получаете увольнение с необходимостью поиска работы за месяц (за три, если blue card). Сам поиск займёт 1-6 месяцев. Не нашли — едьте домой.
2. Дорогая аренда. Открываем ипотечный калькулятор и видим: сумма равна (или даже меньше) ежемесячного платежа.
Что в такой ситуации можно сделать? Правильно, берём ипотеку! Зачем платить дяде, когда можно за своё.
3. Может возникнуть желание поменять/купить машину.
Опять же кредиты недорогие, а машины хорошие. Почему бы и нет.
4. Первые пару лет — это бесконечный список дел.
В таких условиях выдохнуть, стратегически подумать о ситуации будет невероятно тяжело. Даже если и получится, то возможные пути решения будут зачастую пугать и демотивировать.
Фактически получаем следующую и весьма вероятную картину — чистых денег мало, а долговых обязательств много. Человек может добровольно загнать себя в жёсткие рамки жизни.
При всём этом чувствовать себя будет неплохо, но вещи типа "полгодика отдохнуть от работы", "поменять профессию" будут даваться тяжело, так как благосостояние и даже сама возможность пребывания будет завязана на работу.
Можно ли из этого вырваться, а лучше не попадать? Да, безусловно, но это будет тяжело.
Собственно поэтому я и зову такую миграцию ловушкой. Такие дела☕️ , ребята!
Начинается она с того, что человек получает предложение поработать в какой-нибудь богатой стране Европы. Зарплата при этом будет на уровне 3-6к евро.
Вообще звучит неплохо, соглашаемся, приезжаем и видим следующее:
- зарплата в контракте гроссом. Вычитаем из неё 40%,
- аренда дорогая. 30-50% от остатка после налогов просто исчезает,
- еда дороже, услуги тоже (с заметно худшим качеством).
Всё это приводит к тому, что на выходе остаётся каких 0-20% от зарплаты (той скромной, после налогов
На этом этапе я никого не удивлю. Дальше начинается самое веселье!
1. Рабочая виза — узаконенное рабство
Что-то пошло не так: не умеете в копроративные игры, подкачали софты, не справились с задачами
2. Дорогая аренда. Открываем ипотечный калькулятор и видим: сумма равна (или даже меньше) ежемесячного платежа.
Что в такой ситуации можно сделать? Правильно, берём ипотеку! Зачем платить дяде, когда можно за своё.
3. Может возникнуть желание поменять/купить машину.
Опять же кредиты недорогие, а машины хорошие. Почему бы и нет.
4. Первые пару лет — это бесконечный список дел.
В таких условиях выдохнуть, стратегически подумать о ситуации будет невероятно тяжело. Даже если и получится, то возможные пути решения будут зачастую пугать и демотивировать.
Фактически получаем следующую и весьма вероятную картину — чистых денег мало, а долговых обязательств много. Человек может добровольно загнать себя в жёсткие рамки жизни.
При всём этом чувствовать себя будет неплохо, но вещи типа "полгодика отдохнуть от работы", "поменять профессию" будут даваться тяжело, так как благосостояние и даже сама возможность пребывания будет завязана на работу.
Можно ли из этого вырваться, а лучше не попадать? Да, безусловно, но это будет тяжело.
Собственно поэтому я и зову такую миграцию ловушкой. Такие дела
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет-привет! 👋
Последний пост был аж в ноябре.
Обойдёмся без долгих оправданий — было лень, я уставал, а хотелось успеть "сделать всё". Для последнего я знаю только один рабочий способ: нужно срезать хотелки.
Математически это работает просто. Ресурс ограничен(и конечен) , список дел разрастается до немыслимых размеров буквально за полчаса-час и сокращается не быстро. Можно и нужно идти в сторону увеличения ресурса, но это работа вдолгую и каких-то сверхрезультатов не ждите. А вот сократить список дел и чутка зачиллиться можно прямо сейчас.
Эта идея может дать неожиданные профиты. Кроме "меньше стресса", "больше сил", "уделяю время себе" есть шанс обнаружить, что и кол-во выполняемых дел увеличилось. Произошло же это потому, что перестали постоянно ебать себе голову с "успеть всё", а начали делать.
И конечно это работает при понимании своих хотелок. Если их нет, а жизнь немного "на автопилоте", то возможно такой подход станет оправданием бесконечной прокрастинации. Было и было!🛌
Последний пост был аж в ноябре.
Обойдёмся без долгих оправданий — было лень, я уставал, а хотелось успеть "сделать всё". Для последнего я знаю только один рабочий способ: нужно срезать хотелки.
Математически это работает просто. Ресурс ограничен
Эта идея может дать неожиданные профиты. Кроме "меньше стресса", "больше сил", "уделяю время себе" есть шанс обнаружить, что и кол-во выполняемых дел увеличилось. Произошло же это потому, что перестали постоянно ебать себе голову с "успеть всё", а начали делать.
И конечно это работает при понимании своих хотелок. Если их нет, а жизнь немного "на автопилоте", то возможно такой подход станет оправданием бесконечной прокрастинации. Было и было!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝10 6
Привет всем! ☕️
Давненько ничего не писал. Што ш - было и было. Начался WWDC 25, а у меня естьбесполезная привычка смотреть записи и тыкать палкой в новые фичи.
Не знаю, какой там рак на горе свитнул, но Эпплы сделали что-то реально прикольное и полезное - реализовали макрос💪 ! Работает он для: контроллеров, вьюх и коллекций.
При обновлении модели у контроллера вызывается метод
В случае UIView вызовется
Поддерживается вложенность. Внутренние классы придётся пометить макросом, структуры заработают сразу(что ожидаемо, так как те же Int'ы тоже структуры)
Бэкпорт до iOS 18(скомпилируется и на iOS 17, лол) , но нужно добавить флажок
Загрузить и потыкать компилирующиеся примеры можно здесь.
Давненько ничего не писал. Што ш - было и было. Начался 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)"
}
}
Поддерживается вложенность. Внутренние классы придётся пометить макросом, структуры заработают сразу
@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
UIObservationTrackingEnabled = YES в info.plist. Загрузить и потыкать компилирующиеся примеры можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥12⚡5🤡1
Сегодня будем учиться простой и правильной установке программ на мак!
Иногда вижу, как люди тратят на это неприлично много времени. Поэтому давайте раскажу о варианте поэффективнее👍 .
Из коробки у нас есть 2 способа:
1) аппстор для мака,
2) скачать и установить вручную.
Обе опции довольно всратые. В сторе много чего нет, а в 2к25 искать установщики в интернете уныло🏥 .
К счастью существует решение - homebrew. Это консольная утилита.
С её помощью я ставлю:
- обычные программы типа телеги, зума, слэка, дискорда
- консольные рабочие утилиты (cocoapods, xcodegen, go, java и т.д.)
- рабочие программы установщик которых как правило находится где-нибудь на странице релизов гитхаба (xcodes)
Для установки нужно запустить терминал и выполнить:
Для установить аппки нужно знать её имя внутри хоумбрю. Получить его можно несколькими способами:
- в терминале запустить
- воспользоваться поиском на сайте brew.sh
- запросом в гугл(мой выбор)
- (внезапно) спросить у чата гпт - пример
Узнав имя, нам достаточно запустить команду
Не всё можно установить таким образом. Хоть хоумбрю дефакто и стал стандартом, но находятся аппки, которые нужно устанавливать вручную💧 .
Процесс установки может показаться чутка тяжеловатым, ещё и терминал использовать надо. В действительности процесс занимает у меня около минуты.
Иногда вижу, как люди тратят на это неприлично много времени. Поэтому давайте раскажу о варианте поэффективнее
Из коробки у нас есть 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
🔥17❤4👍1
Пепега Девелопмент
Сегодня будем учиться простой и правильной установке программ на мак! Иногда вижу, как люди тратят на это неприлично много времени. Поэтому давайте раскажу о варианте поэффективнее 👍 . Из коробки у нас есть 2 способа: 1) аппстор для мака, 2) скачать и установить…
Media is too big
VIEW IN TELEGRAM
Вот пример установки постмана. Заняло секунд тридцать 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤1👍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. Эта вещица позволяет наделить любой редактор возможностью понимать свифтовый код.
Очень грубо говоря - эта штука умеет взять все файлики проекта, скормить его компилятору и подвестить нам ошибки. Есть только один нюанс - она нихрена не знает про системные фреймворки. Всякие
И это по факту полная руина попыток сбежать из икскода. Мы можем писать на свифте в том же VS Code, но не можем писать под иос😤 .
Чуть позже кто-то весьма умный заметил, что современные проекты уже давно не набор файлов, собирающиеся компилятором в бинарник. Сейчас везде целые билд системы. Они знают как запускать код, его тесты, какие есть зависимости и откуда они тянутся.
Так появился Build Server Protocol. Если LSP мог предоставить нам автокомплит только в рамках существующего кода, то BSP уже знает буквально всё о нашем проекте и соотвественно уровень автокомплита совершенно иной.
Пару лет назад кто-то обнаружил поддержку BSP в Xcode. Так появился проект xcode-build-server. Это позволило наконец иметь нормальный автокомплит в других редакторах. Ничего более он не умеет, но многим уже и этого достаточно. Я пытался его использовать годик назад, но как-то не срослось.
И вот недавно увидел проект Sweetpad. Это расширение для VS Code. Он умеет не только показывать хороший автокомплит, но и полноценно запускать проект без захода в икскод.
Сегодня решил дать ему шанс и поработал весь день из курсора.
Вкратце - заебись🎧 .
С кайфом поработал целый день. В икскод заходил только для дебага. Вообще и дебаг должен был нормально работать - я проверял на тестовом проекте. Но не так нет, на моём проекте дебаг не то чтобы сильно полезная вещь.
Кто ещё не понял - эта херня очень сильно бустит возможности вайбкодерства в курсоре. Если раньше нейронка генерировала код исключительно на основе текста, то теперь курсор может понять, что скомпилируется, что нет и внести соответствующие правки.
Такие дела!☕️
Как-то не доходили руки до постов на тему тулинга. Што ш, будем сегодня разбираться, как завести иосные проекты в курсоре!
Начнём издалека и вспомним, что 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🔥6❤2👏1😍1
Приветы всем! Расскажу сегодня про одну неофициальную фичу Свифта.
Пусть у нас есть 2 протокола, у которых, так уж вышло, есть одинаковый по названию метод.
И мы хотим иметь 2 различные реализации этого метода в 1 классе:
Для решения этой задачи можно применить аттрибут @_implements(ProtoName, ProtoMethod). Получится так:
Далее при использовании сущности под соотвующим интерфейсом у нас будет меняться вывод:
Аттрибут не является приватным (= запрещённым) API. Это фича на уровне компилятора. Единственная опасность – отсутствие гарантий выпила в след. версии компилятора(что кмк фигня) .
Очевидно такие вещи не нужно юзать по любому поводу. Идеальное решение – конечно же переименовать метод. Только это не всегда возможно: протокол может идти из библиотеки, он может юзаться в 100500 местах(рефакторинг в икскоде, гы) либо нам просто лень 💡 .
Пусть у нас есть 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 годами, но тут заметная корреляция с общим кол-вом, поэтому реальное падение вероятно не такое большое.
Такие дела, терпим!😷
За последних два с половиной месяца имеем:
Джуны без опыта дефолтно не нужны.
Есть спад по вакансиям с 3-6 годами, но тут заметная корреляция с общим кол-вом, поэтому реальное падение вероятно не такое большое.
Такие дела, терпим!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝15 10😢2
Занимался на этой неделе добавлением ликвид глАсса в приложение. Набралось чутка мемов-заметок.
1) Дока по UIKit'у - срань невероятная. 0 код сэмплов, 0 документации от эпплов. Только 1 несчастное видео с wwdc, где в слайдах переменные с ошибками💧 .
2) Дока по суи вполне себе окс.
3) Суишная апишка по ощущением заметно богаче и удобнее китовой. Некоторым вещам из суи я просто не нашёл рабочих альтернатив в уиките.
4) Пришлось выкосить все использования метода
Условно, если раньше хотели видеть кнопку размерами 24 на 24 и областью нажатия 40 на 40, то в ликвид глассе вы скорее всего захотите иметь стеклянную кнопочку 40 на 40. Получается, давнишний трюк, который часто спрашивали на собесах, превратился просто в хуёвую практику, омегалул🏥 .
5) Новый уи внезапно понравился. Эпплы красивопиздели вещали про "невидимость" интерфейса, но вообще на деле оно как-то так и ощущается.
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
👍14 4🔥3
Приветы всем! ❤️
Я тут занялся небольшой автоматизацией своей рутины. В принципе вы это могли видеть по постам на тему тех же скриптов на свифте. Неожиданно это вылилось в отдельный канал.
В общем интересующихся приглашаю сюда - @pepega_ios_vacancies . Я собираю и публикую там актуальные айосные вакансии. Пока обрабатываю один хедхантер, но если увижу в этом пользу для вас, то добавлю буквально всё, до чего руки дотянутся.
Любой фидбек приветствуется☕️ !
Я тут занялся небольшой автоматизацией своей рутины. В принципе вы это могли видеть по постам на тему тех же скриптов на свифте. Неожиданно это вылилось в отдельный канал.
В общем интересующихся приглашаю сюда - @pepega_ios_vacancies . Я собираю и публикую там актуальные айосные вакансии. Пока обрабатываю один хедхантер, но если увижу в этом пользу для вас, то добавлю буквально всё, до чего руки дотянутся.
Любой фидбек приветствуется
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥11
Давайте я вам сегодня расскажу, почему устройства Apple – один из самых простых и дешёвых способов получить великолепный звук при просмотре кино/сериалов 🏥 .
Что я называю великолепным звуком? Для кино и сериалов это пространственный звук/долби атмос/dts:x. Тот самый звук, который вы слышите в кинотеатрах.
И мы можем получить нечто очень похожее дома. Без дорогой аппаратуры, колонок, кучи проводов. Всё, что вам нужно, – айфон/мак/эппл тв и эппловые наушники (прошки или подсы от 3-го поколения). Далее включаете кинцо в соответствующем качестве и гол!
Обладатели нужных девайсов могут проверить это прямо сейчас. Открываете стандартное приложение TV и включите любой трейлер (это всё бесплатно). Услышите тот самый объёмный звук🎧 .
Неудобства у этого подхода конечно есть: нужно платить стримингам либо качать фильмы по 50 гб и это развлечение максимум для 2-х человек одновременно – больше наушников к одному устройству пока не подключить.
Лично у меня нет возможности(и желания, лол) делать домашний кинотеатр, а достойный телек найти сейчас не проблема.
Что я называю великолепным звуком? Для кино и сериалов это пространственный звук/долби атмос/dts:x. Тот самый звук, который вы слышите в кинотеатрах.
И мы можем получить нечто очень похожее дома. Без дорогой аппаратуры, колонок, кучи проводов. Всё, что вам нужно, – айфон/мак/эппл тв и эппловые наушники (прошки или подсы от 3-го поколения). Далее включаете кинцо в соответствующем качестве и гол!
Обладатели нужных девайсов могут проверить это прямо сейчас. Открываете стандартное приложение TV и включите любой трейлер (это всё бесплатно). Услышите тот самый объёмный звук
Неудобства у этого подхода конечно есть: нужно платить стримингам либо качать фильмы по 50 гб и это развлечение максимум для 2-х человек одновременно – больше наушников к одному устройству пока не подключить.
Лично у меня нет возможности
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍6🔥5
Обновил мак на Tahoe. Эпплы, конечно, как обычно 😑 .
1. Периодически хрипит звук из динамиков. Лечится командой в терминале:
2. Часто включатся вентиляторы. До апдейта я их слышал +- раз в неделю. Как я понял, Эппл накосячили в распределении ресурсов GPU. Зачем-то выделяются ресурсы отрисовки для программ, которые в фоне висят. Тут вероятно ждём фиксов.
3. Иконки у некоторых аппок стали шакальными.
4. Статус бар стал отображать приложения для которых была выбрана опция "спрятать иконку".
5. Затестить агентский режим в Xcode пока руки не дошли. Но фидбек уже видел. Судя по всему икскод жрёт токены будто они бесплатны. В общем всё ещё советую настроить нормально курсор и не быть бета-тестерами для эппл.
Лучше бы, конечно, ещё месяцок другой подождал с апдейтом, но тут выбор без выбора💧 .
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, но это уже прихоть, а не потребность.
Резюмируя, нейронки – топовая штука. Оооочень много чего без них я бы тупо не сделал. Такие дела!🎩
Первое и основное – в рамках своей работы иось разработчиком я почти ничего не использую.
Основная причина кроется в том, что я работаю фиксированное кол-во времени в день. Я чётко понимаю: за обычное потраченное время я сделаю нормальный объем работы. Мне не нужно, прости господи за эту чушь, "бустить" работу нейронками. Плюс у меня сложный проект. Я начал приносить объективный вэлью только спустя год работы. Соответственно для меня всё ещё много задач выполняют роль онбординга, а нейронки (как вы, надеюсь, заметили
Активно использую ЛЛМ для генерации тестового кода. К примеру, мне нужно кое-чего сделать на RxSwift, а я не помню пару специфичных операторов. Прошу чатгпт сделать сэмплы, кидаю их в икскод, кручу минут 10, узнаю нужное и возвращаюсь к основной задаче.
В качестве замены гуглу чатгпт работает великолепно. Очень много времени было сэкономлено за счёт того, что ллм можно заставить выдать ответ ровно на мой вопрос, а не алгоритмов поисковика.
Генерация картинок для каналов в телеге и бусти. Здорово помогает не тратить время на те вещи, которые не делегировал.
Создание своих проектов. Вот тут, конечно, самый жир для меня. За последние полгода было сделано:
- тг бог на расте
- бекенд на го с ручным деплоем на сервак,
- фронтенд на жс,
- хождение в блокчейны эфира и соланы
Это не разработка в стиле "давай, курсор, ебашь мне всё". Нейронка очень сильно облегчает мне первые (= самые сложные) шаги. Я, кстати, пробовал на фронтенде писать в стиле вайбкодера – через неделю сгорел к хуям. Ну неизбежно попадешь в ситуацию, когда ты с ошалелыми глазами
Если говорить о том, что конкретно использую, то это курсор и чатгпт. Первое для кода, так как режим агента сильно роляет. Второе для всего остального. В планах потестить Zed, но это уже прихоть, а не потребность.
Резюмируя, нейронки – топовая штука. Оооочень много чего без них я бы тупо не сделал. Такие дела!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18
Получил фидбек, что канал с вакансиями имеет ценность. Што ш, буду тогда добавлять и остальные направления.
@pepega_android_vacancies – вот канал с андроидными вакансиями🎩 . (так и до авроры доберёмся, ага)
Я так-то вижу, что большая часть подписчиков связаны всё же с иосью, но можете пересылать свои знакомым, мб кто работку ищет. И ещё можно посмотреть, на сколько ситуация на андроиде лучше иоса. Честно говоря, разница не такая большая, как мне казалось👍 .
@pepega_android_vacancies – вот канал с андроидными вакансиями
Я так-то вижу, что большая часть подписчиков связаны всё же с иосью, но можете пересылать свои знакомым, мб кто работку ищет. И ещё можно посмотреть, на сколько ситуация на андроиде лучше иоса. Честно говоря, разница не такая большая, как мне казалось
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤1
Привет всем! 🎩
Немного тематических и не очень анонсов.
Я постепенно добавляю каналы вакансий с другими направлениями. Соответственно сейчас есть и работают:
- андроид
- го
- иос
На всех каналах публикация происходит 1 раз в день.
Для желающих видеть подобные апдейты часто я начинаю заводить платные версии. Частота публикаций 2 раза в час. Сейчас доступен иос. Собственно если не хотите ручками мониторить хедхантер, но апплаиться одним из первых – добро пожаловать.
Немного тематических и не очень анонсов.
Я постепенно добавляю каналы вакансий с другими направлениями. Соответственно сейчас есть и работают:
- андроид
- го
- иос
На всех каналах публикация происходит 1 раз в день.
Для желающих видеть подобные апдейты часто я начинаю заводить платные версии. Частота публикаций 2 раза в час. Сейчас доступен иос. Собственно если не хотите ручками мониторить хедхантер, но апплаиться одним из первых – добро пожаловать.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥4😎2
Привет, фолкс! 👋
Давненько ничё не писал. Делал каналы с вакансиями по другим направлениям. Теперь вместо парочки каналов у меня их 18 штук. Из-за этого всплыло куча тех. проблем, которые я успешно(очень на это надеюсь 🛌 ) решил. Ну об этом я ещё напишу, было весело.
Што ш, теперь есть:
- иос
- андроид
- фронтенд
- аналитики
- шарпы
- питон
- джава
- го
- куа
Вы можете их подсчитать и спросить, а где ещё 9 штук. У каждого канала есть платный собрат. Сейчас в доступе только иос, остальное пару дней в закрытой бете покрутится.
Хотел ещё добавить для проджектов, но там просто безумное кол-во вакансии, так шо позже.
По всем направлениям собираю статистику, ждите графички!
Судя по цифрам, если кто-то хочет вкатиться в айти, то это надо делать через аналитику/проджект/куа. Причём первые 2 идут с большим отрывом – все цифры позже, но там более 2000 вакансий(в иоси их в районе сотни ☕️ ) , сумашествие какое-то.
Давненько ничё не писал. Делал каналы с вакансиями по другим направлениям. Теперь вместо парочки каналов у меня их 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 минут на деплой
Бот до сих пор прекрасно работает, а я из-за этого смог проверить гипотезу и идти дальше☕️ .
В общем, если вы до сих пор ллм-скептик, то ну...ничего не делайте! Зачем лишняя конкуренция👋
Автор упоминает термин 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