Please open Telegram to view this post
VIEW IN TELEGRAM
😁13❤2
Docker и серверы являются важнейшими компонентами современных вычислительных систем. Docker упрощает развертывание приложений и управление ими за счет контейнеризации, обеспечивая согласованность и масштабируемость.
Серверы обеспечивают базовую инфраструктуру, услуги хостинга и ресурсы, необходимые для эффективной работы приложений. Вместе они обеспечивают эффективную и гибкую разработку и развертывание программного обеспечения, устраняя разрыв между средами разработки и производственными средами.
Выбор между Docker и серверами зависит от ваших конкретных потребностей, ограничений по ресурсам и опыта. Они также могут дополнять друг друга в современных ИТ-средах.
Что предпочитаете вы? Голосуйте и пишите своё мнение в комментариях
❤️ — Docker
👍 — традиционные серверы
🤝 — гибрид
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🥱1🤝1
Приготовили для вас дайджест по актуальному из мира iOS, Android и кроссплатформы.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Модификаторы
crossinline
и noinline
используются для управления поведением лямбда-выражений, переданных в качестве параметров функций. Они позволяют указывать, может ли лямбда-выражение содержать операторы return
.Модификатор
crossinline
используется для указания того, что лямбда-выражение не может содержать операторы return
, даже если функция, принимающая лямбда-выражение, инлайновая.Модификатор
noinline
, с другой стороны, указывает на то, что лямбда-выражение может быть сохранено как объект функции, а не выполнено внутри вызывающей функции. Это может быть полезно в случае, когда вы хотите использовать лямбда-выражение где-то ещё, например, как параметр для другой функции.ВЫВОД:
crossinline
должен использоваться только тогда, когда вы уверены в том, что оператор return
не будет использоваться внутри лямбда-выражения. Если лямбда-выражение должно содержать оператор return
, то следует использовать ключевое слово noinline
вместо crossinline
.#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Flutter-разработчик — от 250 000 ₽, удалёнка
iOS-разработчик — от 200 000 ₽, удалёнка
Junior iOS Developer — от 100 000 до 150 000 ₽, удалёнка
Android-разработчик (Карты) — от 230 000 до 450 000 ₽, гибрид (Москва)
Android разработчик — от 250 000 ₽, удалёнка
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Рассмотрим 5 самых важных шаблонов, которые помогут сделать ваш код Compose чище, удобнее в поддержке и масштабируемее.
Шаблон: перемещение состояния вверх к родительскому composable и передача его вниз.
@Composable
fun Counter(count: Int, onIncrement: () -> Unit) {
Button(onClick = onIncrement) {
Text("Clicked $count times")
}
}
Зачем: делает ваш пользовательский интерфейс stateless и упрощает тестирование. Меньше побочных эффектов = меньше отладки = больше сна.
Паттерн: данные текут вниз, события текут вверх.
• ViewModel предоставляет состояние
• Композабл объекты отслеживают состояние
• События пользовательского интерфейса всплывают через колбеки
Думайте об этом как о родительском контроле: вы даёте инструкции, и хаос (то есть события) находит путь обратно.
Паттерн: принимает содержимое в качестве параметров (как дочерние элементы в React).
@Composable
fun FancyCard(content: @Composable () -> Unit) {
Card {
content()
}
}
Способствует повторному использованию. Ваши проекты будут вам благодарны, и ваши коллеги тоже, возможно, тоже.
ViewModel
+ StateFlow
Предоставьте доступ к состоянию с помощью
StateFlow
и соберите его в Composable.val uiState by viewModel.stateFlow.collectAsState()
Избегайте LiveData, если только вы не создаёте музей Compose.
Разделите ваши композабл:
• Stateless: только пользовательский интерфейс
• Stateful: управление логикой
@Composable
fun PasswordInputField(password: String, onChange: (String) -> Unit) { /*...*/ }
Более чёткое разделение, более удобный предварительный просмотр и меньше сюрпризов.
Что бы вы добавили в этот список? Пишите в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2🌚1
97% программистов уже пробовали ИИ для написания кода. Но где грань между продуктивной помощью и потерей контроля над продуктом? Упрощает ли вайб-кодинг жизнь джунам или затрудняет их развитие? И главное — как к такому подходу относятся айтишники и их работодатели?
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1🥱1
При создании приложения под Android TV у вас наверняка могут возникнуть вопросы: как получить доступ к списку телевизионных каналов и как организовать у себя трансляцию?
В этом материале автор ответит на них и расскажет про взаимодействие с телевизором с помощью Android TV Input Framework (TIF), а также получение через него списка доступных каналов. По сути это первый шаг к созданию полноценного TV-приложения.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7😁4
Запутались в RxJava, Coroutines или Combine? Этот промпт поможет разобраться с реактивными подходами.
Сравни реактивные подходы для мобильной разработки (RxJava/Kotlin Flow/Swift Combine):
1. Кривая обучения для каждого решения
2. Производительность и потребление памяти
3. Интеграция с существующей кодовой базой
4. Поддержка мультиплатформенной разработки (KMM)
5. Лучшие практики тестирования
Приведи примеры:
1. Работа с сетевые запросами
2. Обработка пользовательских событий
3. Комбинирование нескольких потоков данных
Explain like I'm a junior developer
для простых объяснений#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
Недавно в рамках одного из проектов на стеке KMP, Ktor и Kotlin Serialization команда разработчиков решила провести эксперимент, чтобы определить возможность и целесообразность минификации тел запросов и ответов в формате Json.
Хотя существовали готовые решения, такие как GraphQL и Protobuf, в данном случае мотивацией был скорее исследовательский интерес — попытка реализовать подобную оптимизацию собственными силами.
Несмотря на наивность подхода, команде удалось добиться сокращения среднего размера Json-данных (после всех внутренних оптимизаций) на 15–20%.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Proglib Academy — это место, где вы превращаете теорию в практику. Здесь ваши знания становятся проектами для портфолио, а вы — более уверенным специалистом.
Выберите курс, который поможет сделать следующий шаг ⬇️
🚀 Для тех, кто начинает путь в IT:
— Основы IT для непрограммистов
— Программирование на Python (обновлённый)
— Frontend-разработчик с нуля: HTML, CSS, JavaScript
🧠 Для будущих и настоящих Data Scientist'ов:
— ML для старта в Data Science (начинается в сентябре)
— Базовые модели ML и приложения
— Математика для Data Science
— AI-агенты для DS-специалистов (скоро второй поток)
🛠️ Для опытных разработчиков, готовых к росту:
— Алгоритмы и структуры данных
— Архитектуры и шаблоны проектирования
Независимо от вашей цели, у нас есть курс, который поможет её достичь. Переходите в Proglib Academy, выбирайте свой путь и инвестируйте в навыки, которые всегда будут в цене!
Выберите курс, который поможет сделать следующий шаг ⬇️
🚀 Для тех, кто начинает путь в IT:
— Основы IT для непрограммистов
— Программирование на Python (обновлённый)
— Frontend-разработчик с нуля: HTML, CSS, JavaScript
🧠 Для будущих и настоящих Data Scientist'ов:
— ML для старта в Data Science (начинается в сентябре)
— Базовые модели ML и приложения
— Математика для Data Science
— AI-агенты для DS-специалистов (скоро второй поток)
🛠️ Для опытных разработчиков, готовых к росту:
— Алгоритмы и структуры данных
— Архитектуры и шаблоны проектирования
Независимо от вашей цели, у нас есть курс, который поможет её достичь. Переходите в Proglib Academy, выбирайте свой путь и инвестируйте в навыки, которые всегда будут в цене!
Вот 10 ловушек Swift, которые кажутся безобидными — пока не настигнут вас.
Да, вам нужно обновлять пользовательский интерфейс в основном потоке. Но если вы слепо обернете все в
DispatchQueue.main.async
, вы рискуете столкнуться с условиями гонки или задержками обновлений.DispatchQueue.main.async {
self.label.text = "Updated"
}
Используйте это только в том случае, если вы уверены, что уже не находитесь в главном потоке.
Структуры (такие как
User
) копируются при присваивании. Классы совместно используются по ссылке.struct User {
var name: String
}
var a = User(name: "Abhinav")
var b = a
b.name = "Singh"
print(a.name) // Still "Abhinav"
Знайте, когда вам нужна неизменяемость (структура) и когда — общее состояние (класс). Их смешивание приводит к неприятным ошибкам.
Codable
в Swift — это замечательно… до тех пор, пока не изменится структура JSON и декодирование без предупреждения не завершится с ошибкой.struct User: Codable {
let id: Int
let name: String
}
Если бэкэнд отправит
user_id
вместо id
, декодирование завершится сбоем.Используйте
CodingKeys
явно, когда поля различаются:enum CodingKeys: String, CodingKey {
case id = "user_id"
case name
}
Простое добавление @Published не вызывает обновление пользовательского интерфейса вне основного потока или если обновление происходит косвенно.
@Published var name: String = ""
DispatchQueue.global().async {
self.name = "New" // No UI update
}
Всегда обновляйте свойства
@Published
в главном потоке:DispatchQueue.main.async {
self.name = "New"
}
Они кажутся похожими, но на самом деле это не так.
Any
означает любой тип. AnyObject
означает любой тип класса.func handle(data: Any) { ... } // Can be Int, String, Class, etc.
func handleObject(data: AnyObject) { ... } // Only class instances
Будьте точны в том, что вы используете. Использование
Any
может привести к путанице при преобразовании типов во время выполнения.Какие ловушки чаще вам встречаются? Пишите в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Представь: приходишь на собес, называешь зарплату, а HR сразу соглашается без торгов. Поздравляю — ты только что продешевил. Чтобы таких ляпов не было, рассказываем, как правильно определить свою стоимость на рынке труда.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9
От чего произошло название языка Kotlin?
Anonymous Quiz
3%
от английского слова "cotton"
79%
от острова близ Санкт-Петербурга
11%
от фамилии создателя языка
7%
от термина "code-tin"
❤5
Приготовили для вас дайджест по актуальному из мира iOS, Android и кроссплатформы.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Что выведет код?
Anonymous Quiz
16%
Function finished, Completion called, DataProcessor deinitialized
21%
Completion called, Function finished, DataProcessor deinitialized
10%
Function finished, DataProcessor deinitialized, Completion called
54%
Утечка памяти (DataProcessor никогда не освободится)
❤3
iOS разработчик — удалёнка
Senior Android Developer — от 270 000 ₽, удалёнка
Middle/Middle+ iOS Developer — 160 000 — 250 000 ₽, удалёнка
Flutter-разработчик (Умные бьюти-решения) — от 250 000 ₽, гибрид (Москва)
iOS-разработчик — от 250 000 ₽, удалёнка
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2