Telegram Web
📲 ServerSocket для IPC в Android

Идея для статьи возникла из желания разобраться, как организовать общение между браузером и Android‑приложением для передачи данных. В поисках удобного решения автор обратил внимание на ServerSocket — простой и гибкий способ локального взаимодействия без лишних сложностей.

Прежде чем перейти к практической реализации, автор разбирает основные сценарии использования ServerSocket и межпроцессного взаимодействия в рамках одного процесса и приводит примеры рабочего кода.

Библиотека мобильного разработчика #свежак
3
💬 Как оставлять комментарии в чате нашего канала

В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.

⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.

Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас.

Как присоединиться к чату, чтобы бот вас не забанил

— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат

После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат.

❗️ Если вас все-таки забанили

— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу

Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.

👾 Спасибо, что активно участвуете в обсуждении наших постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
🐛 Расскажите про ваш первый баг

Помните тот момент, когда вы впервые обнаружили баг в своём коде? Тот самый момент истины, когда монитор превратился в поле битвы между вами и компилятором, а Stack Overflow стал вашим лучшим другом?

Делитесь в комментариях своими историями о первом баге:

Что это был за проект?
— Как долго вы искали решение?
— Какие эмоции испытали, когда нашли причину?
— Какой урок вынесли?

Библиотека мобильного разработчика #междусобойчик
1
👨‍💻 Выжимаем максимум из код-ревью

Большинство разработчиков не любит проводить код-ревью. Все понимают, что это важно и нужно, могут с ходу назвать три-четыре причины необходимости этого процесса. Но раз за разом они всячески избегают его. Или участвуют в нём неэффективно.

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

👉 Читать статью

Библиотека мобильного разработчика #буст
😁51
📊 Собес по Data Science: 10 вопросов, которые разделяют джунов от мидлов

Залетай на тест, который валит даже мидлов! Собрали для тебя 10 каверзных вопросов, которые тимлиды обожают подкидывать на собесах. Здесь нет простых задачек — только те, на которых спотыкаются 80% кандидатов. Пройди этот челлендж, чтобы быть во всеоружии на следующем интервью.

Пройти тест

Библиотека мобильного разработчика #свежак
3
🧩 Айтишный кроссворд

Держите кроссворд — зашифровали 6 понятий, часто используемых среди разработчиков.

1. Полезная фишечка.

2. Файлы и библиотеки, которые нужно использовать вместе, чтобы ускорить процесс загрузки страниц.

3. Перенос кода из разработки на рабочий сервер.

4. Готовый набор инструментов для разработки.

5. Полезная встреча айтишников.

6. Айтишник над айтишниками.

Попробуйте угадать!
Пишите ответы в комментариях 👇

Библиотека мобильного разработчика #междусобойчик
🥱5👏2
👾 Это база: companion object (также Singleton)

Объекты можно объявлять внутри класса, при этом нет каких-либо ограничений по их количеству. Но только один объект можно пометить ключевым словом companion object в рамках одного класса.

Синглтон-свойство companion object достигается за счет того, что он создается внутри класса в качестве статического поля. Он будет инициализирован при первом обращении к нему или при создании первого экземпляра класса, в котором он объявлен.

Важно отметить, что companion object будет инициализирован первым, а затем уже будет создан экземпляр класса:

class MyClass {
init {
// Выполняется всегда после инициализации companion object
}
companion object {
init {
// Выполняется всегда перед блоком init содержащего класса
}}}
val myClass = MyClass()


Такому объекту можно не указывать свое имя, и обращаться к методам и свойствам объекта через имя содержащего его класса без явного указания имени объекта.

class SomeClass { 
companion object {
fun create()
}
}
val someClass = SomeClass.create()


Компилируется в public static final class на Java. Работает подобно ключевому слову static в Java.

Библиотека мобильного разработчика #буст
7
☸️ CKAD 2025. Самый свежий гайд по сдаче сертификации Certified Kubernetes Application Developer

CKAD стал более строгим к деталям — без системной подготовки можно завалить даже на банальных заданиях. Если хочется разобраться, что важно для получения сертификации — эта статья сэкономит часы.

➡️ Читать статью

🐸Библиотека devops'a
Please open Telegram to view this post
VIEW IN TELEGRAM
2
📱 Размещение UI-компонентов в пределах отступов Safe Area

Безопасная область (safe area) — это часть экрана, которую не загораживают элементы системного UI, такие как строка состояния, панель навигации, динамический остров и пр.

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

👉 Читать статью

Библиотека мобильного разработчика #свежак
5🌚1
👨‍💻 How to: оптимизировать производительность iOS-приложения

Вот 10 практических хаков для повышения производительности iOS-приложения, проверенных на производственных проектах.

1️⃣ Безжалостно профилируйте с помощью инструментов.

Инструменты: в Xcode есть Time Profiler, Allocations и Energy Log (Xcode -> Open Developer Tool -> Instruments).

Что делать: выявляйте узкие места, анализируя использование процессора, памяти и энергии. Например, используйте Time Profiler, чтобы выявить неэффективные циклы или чрезмерную нагрузку на DispatchQueue.

Профессиональный совет: отсортируйте трейсы по «тяжелому весу», чтобы найти самые затратные функции.

Почему это важно: 80% проблем с производительностью связаны с 20% вашего кода.

2️⃣ Оптимизируйте Auto Layout с помощью isActive.

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

Решение: активируйте/деактивируйте ограничения массово, а не добавляйте/удаляйте их по отдельности:

NSLayoutConstraint.activate([ view.topAnchor.constraint(equalTo: parent.topAnchor), view.leadingAnchor.constraint(equalTo: parent.leadingAnchor) ])


Бонус: используйте UIStackView для более простых макетов и меньшего количества ограничений.

3️⃣ Сокращайте динамическую диспетчеризацию с помощью final и private.

Хак Swift: помечайте классы как final, а методы как private, чтобы обеспечить оптимизацию компилятора:

final class NetworkManager { private func fetchData() { ... } // Static dispatch for faster execution }


Зачем: динамическая диспетчеризация (например, переопределение методов) увеличивает накладные расходы во время выполнения.

4️⃣ Кешируйте дорогостоящие операции.

Пример: хранение декодированных изображений, ответов сети или вычисленных значений:

let imageCache = NSCache() ​func loadImage(url: URL) -> UIImage? { if let cachedImage = imageCache.object(forKey: url.absoluteString as NSString) { return cachedImage } // Decode and cache... }


Пример использования: избегайте повторения тяжелых задач, таких как декодирование изображений или разбор JSON.

5️⃣ Используйте CALayer.shouldRasterize для сложных представлений.

Когда: рендеринг сложных теней, трансформаций или анимаций.

Как: растеризуйте статичные слои в bitmap изображение один раз:

layer.shouldRasterize = true layer.rasterizationScale = UIScreen.main.scale


6️⃣ Выгружайте работы в фоновые потоки.

Золотое правило: держите основной поток свободным для обновления пользовательского интерфейса.

DispatchQueue.global(qos: .userInitiated).async { let processedData = parseLargeJSON() DispatchQueue.main.async { self.updateUI(with: processedData) } }


Избегайте: блокирования основного потока синхронными вызовами или тяжелыми вычислениями.

7️⃣ Используйте UILabel.preferredMaxLayoutWidth для ячеек.

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

Исправление: установите preferredMaxLayoutWidth, чтобы избежать двусмысленных ограничений:

label.preferredMaxLayoutWidth = UIScreen.main.bounds.width — 32


Результат: более быстрая прокрутка UITableView/UICollectionView.

8️⃣ Выбирайте UIImage(named:) вместо UIImage(contentsOfFile:).

Почему: UIImage(named:) автоматически кэширует изображения в памяти, а contentsOfFile: — нет.

Лучше всего подходит для: часто используемых ресурсов (иконок, графики пользовательского интерфейса).

9️⃣ Минимизировать drawRect: переопределения.

Издержки: кастомное рисование требует больших затрат процессора.

Альтернатива: используйте предварительно отрисованные изображения или свойства слоя (например, cornerRadius, borderWidth).

🔟 Лениво загружайте невидимое содержимое.

Стратегия: отложите загрузку внеэкранных представлений, данных или медиа.

lazy var analyticsManager: AnalyticsManager = { return AnalyticsManager() // Initialize only when first accessed }()


Применяйте: для тяжелых объектов, баз данных или SDK сторонних разработчиков.

Библиотека мобильного разработчика #свежак
5🔥1
👨‍💻📈 Исследование IT-аудитории Proglib 2025: зарплаты, технологии, профессии

Кто такой современный разработчик в 2025 году? Актуальное исследование портрета IT-специалистов: зарплаты, технологии, специализации и демография разработчиков.

👉 Читать статью

Библиотека мобильного разработчика #свежак
2
👨‍💻 Shader Ripple Effect Playground — библиотека шейдерных AGSL эффектов

Shader Ripple Effect Playground — библиотека шейдерных AGSL эффектов для Android. Есть эффект пульсации, реагирующий на касание, непрерывная волновая анимация с настраиваемыми параметрами, переход раскрытия содержимого с эффектом пульсации — все с настрйоками. Полная совместимость с любым элементом пользовательского интерфейса Jetpack Compose, простая интеграция с минимальным количеством кода.

⚙️ Shader Ripple Effect Playground на GitHub

Библиотека мобильного разработчика #буст
👍4
🎧 Подкасты и видео о мобильной разработке

Собрали лучшее о мобильной разработке. Включаем и смотрим по пути на работу.

🎯 Дивный мир Swift Concurrency

🎯 Разработка под Apple Vision Pro

🎯 Мапим данные из domain в ui модуль в многомодульном проекте

Библиотека мобильного разработчика #буст
1
💵💻🌍 Как выйти на валютную удаленку и зарабатывать больше

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

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

Что вы узнаете:

🔘 Плюсы и минусы работы на иностранные компании

🔘 Ключевые требования к кандидатам

🔘 Сложности, с которыми можно столкнуться

Если давно задумывались о переходе на валютную удаленку, но не знали, с чего начать — этот гайд для вас 🔗
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Команды дня: cброс коммитов

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

🔹 Soft reset

git reset --soft HEAD^


Эта команда позволяет вернуться к последнему коммиту, сохранив все изменения в области подготовки. Проще говоря, с помощью этой команды можно легко отменить коммит, сохранив изменения в коде. Это удобно, когда вам нужно пересмотреть последний коммит, возможно, добавить больше изменений перед повторным коммитом.

🔹 Mixed reset

git reset --mixed HEAD^


Это поведение по умолчанию, когда вы используете git reset HEAD^ без указания --soft или --hard. Он сбрасывает последний коммит и удаляет изменения из области подготовки. Однако эти изменения остаются в рабочей директории. Это полезно, когда вы хотите отменить последий коммит и внести изменения с нуля, сохранив изменения в рабочей директории перед повторным коммитом.

🔹 Hard reset

git reset --hard HEAD^


Напоследок давайте поговорим о команде git reset --hard HEAD^. Она полностью стирает последний коммит вместе со всеми связанными с ним изменениями из вашей истории Git. Когда вы используете флаг --hard, пути назад уже не будет. Поэтому используйте его с особой осторожностью, только если хотите навсегда удалить последний коммит и все его изменения.

Библиотека мобильного разработчика #буст
1
🦊 Альтернативы Firefox: обзор 4 лучших форков для тех, кто разочаровался в Mozilla

Приватность, скорость, расширенные функции — что выбрать? Разбираем популярные форки браузеров и их преимущества.

Что в статье:

✔️ Обзор самых популярных форков браузеров

✔️ Их ключевые фишки, плюсы и минусы

✔️ Как выбрать оптимальный вариант под ваши задачи

Браузер — это не просто окно в интернет, а инструмент, который должен соответствовать вашим требованиям. Делитесь своим опытом в комментариях! 🚀

Прочитать подробнее статью 🔗

🐸 Библиотека тестировщика
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
2025/07/12 20:26:36
Back to Top
HTML Embed Code: