🛠️ «Бруклинский мост» между C++ и Kotlin
В статье рассматривается необходимость использования моста C++ в Android для тех задач, которые невозможно эффективно решить полностью на JVM, например для разработки пользовательского шифрования, создания пользовательских типов двоичных файлов, реализации межсетевого экрана.
💡 Цель — сделать приложения более стабильными за счет возможности раздельного тестирования кода на Kotlin и C++, и концепция «Бруклинского моста» призвана облегчить этот процесс.
Читать статью
#статья
В статье рассматривается необходимость использования моста C++ в Android для тех задач, которые невозможно эффективно решить полностью на JVM, например для разработки пользовательского шифрования, создания пользовательских типов двоичных файлов, реализации межсетевого экрана.
💡 Цель — сделать приложения более стабильными за счет возможности раздельного тестирования кода на Kotlin и C++, и концепция «Бруклинского моста» призвана облегчить этот процесс.
Читать статью
#статья
👍4
🔖💡 В Swift существует богатый набор методов работы с массивами, которые позволяют разработчикам эффективно манипулировать массивами. Разбираемся как они работают на примерах с эмодзи. Часть первая👇
1️⃣ Первый метод — .count
Здесь всё просто — считает количество элементов в массиве. Пример:
let a = [🔥, 💧, ☀️, ❄️]
a.count // 4
2️⃣ Второй метод — .filter
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.filter { $0 == 🔥 }
print(b) // [🔥, 🔥]
3️⃣ Третий метод — .reversed
Такой же простой, как и первый. Возвращает обратную последовательность элементов исходной коллекции. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.reversed()
print(b) // [🔥, ❄️, ☀️, 💧, 🔥]
4️⃣ Четвёртый метод — .allSatisfy
Этот метод проверяет, удовлетворяют ли все элементы коллекции заданному условию. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a..allSatisfy { $0 == 🔥 }
print(b) // false
5️⃣ Пятый метод — .contains
Метод проверяет, содержит ли коллекция определённый элемент. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.contains(💧)
print(b) // True
6️⃣ Шестой метод — .prefix
Метод возвращает начальный сегмент коллекции, содержащий указанное количество элементов. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.prefix(3)
print(b) // [🔥, 💧, ☀️]
7️⃣ Седьмой метод — .suffix
Метод похож на предыдущий, только возвращает указанное количество элементов начиная с конца коллекции. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.suffix(2)
print(b) // [❄️, 🔥]
8️⃣ Восьмой метод — .swapAt
Этот метод обменивает местами значения двух элементов в коллекции по их индексам. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.swapAt(0, 3)
print(b) // [❄️, 💧, ☀️, 🔥, 🔥]
Остальные методы разберём во второй части. Сохраняй и пользуйся📌
Здесь всё просто — считает количество элементов в массиве. Пример:
let a = [🔥, 💧, ☀️, ❄️]
a.count // 4
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.filter { $0 == 🔥 }
print(b) // [🔥, 🔥]
Такой же простой, как и первый. Возвращает обратную последовательность элементов исходной коллекции. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.reversed()
print(b) // [🔥, ❄️, ☀️, 💧, 🔥]
Этот метод проверяет, удовлетворяют ли все элементы коллекции заданному условию. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a..allSatisfy { $0 == 🔥 }
print(b) // false
Метод проверяет, содержит ли коллекция определённый элемент. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.contains(💧)
print(b) // True
Метод возвращает начальный сегмент коллекции, содержащий указанное количество элементов. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.prefix(3)
print(b) // [🔥, 💧, ☀️]
Метод похож на предыдущий, только возвращает указанное количество элементов начиная с конца коллекции. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.suffix(2)
print(b) // [❄️, 🔥]
Этот метод обменивает местами значения двух элементов в коллекции по их индексам. Пример:
let a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.swapAt(0, 3)
print(b) // [❄️, 💧, ☀️, 🔥, 🔥]
Остальные методы разберём во второй части. Сохраняй и пользуйся
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14😁2❤1
🚀 Новый набор на стажировки в Тинькофф
Стажировка подойдет как для студентов, там и начинающих специалистов. Среди направлений есть Android-разработчик и iOS-разработчик. 😋
На стажировке вас ждёт много интересных и сложных проектов. Стажировка не для строчки в резюме, а для старта в ИТ-карьере. 👨💻
💡 Изучайте подробности и отправляйте заявку, дедлайн — 18 декабря: https://fintech.tinkoff.ru/start/
Стажировка подойдет как для студентов, там и начинающих специалистов. Среди направлений есть Android-разработчик и iOS-разработчик. 😋
На стажировке вас ждёт много интересных и сложных проектов. Стажировка не для строчки в резюме, а для старта в ИТ-карьере. 👨💻
💡 Изучайте подробности и отправляйте заявку, дедлайн — 18 декабря: https://fintech.tinkoff.ru/start/
❤3🔥3
В Swift 6, как и в предшественниках, вероятно, будут внесены улучшения в такие области, как синтаксис языка, производительность компилятора и совместимость с различными платформами.
Основное внимание может быть уделено улучшению функций безопасности, оптимизации для ускорения компиляции кода и расширению поддержки новых платформ Apple.
📖 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🔥1🌚1
💬 Более опытные разработчики часто жалуются, что новичкам не хватает «базы». По их мнению, в программисты идут люди без профильного образования, что ведёт к общей деградации. Правы ли они? И что представляет собой эта «база»?
Поделись своим мнением 👇
#холивар
Поделись своим мнением 👇
#холивар
👍8❤2🔥1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
⭐ FAQ по трудоустройству: разбираем самые популярные вопросы
Каждый, кто хотя бы раз искал работу, сталкивался с массой проблем: «Врать в резюме или не надо?», «@#$%!, вакансия классная, но я не подхожу... Что делать?». Под катом — разбор этих и других популярных вопросов.
🔗 Читать статью
🔗 Зеркало
Каждый, кто хотя бы раз искал работу, сталкивался с массой проблем: «Врать в резюме или не надо?», «@#$%!, вакансия классная, но я не подхожу... Что делать?». Под катом — разбор этих и других популярных вопросов.
🔗 Читать статью
🔗 Зеркало
👍5
очередной #дайджест полезностей для мобильного разработчика
🟣 GPT4 для доработки приложения — как новые функции GPT-4 помогают в ежедневных задачах разработчика.
🟣 Переход на кроссплатформенность — статья рассказывает о переходе команды СберМаркета на кроссплатформенный подход в разработке приложения для доставки еды из ресторанов.
🟣 Размер так важен? — как Spotify отслеживает размеры приложений, почему это является важной задачей, которая может иметь значительные последствия.
🟣 Смертность мобильных игр — компания провела исследование SuperScale, которое показывает, что 83% мобильных игр «умирают» в течение трех лет после их запуска.
🟣 Из Figma во Flutter — статья рассказывает о том, как плагин DhiWise для Figma позволяет преобразовывать дизайны в код Flutter с помощью технологии low-code.
🟣 GPT4 для доработки приложения — как новые функции GPT-4 помогают в ежедневных задачах разработчика.
🟣 Переход на кроссплатформенность — статья рассказывает о переходе команды СберМаркета на кроссплатформенный подход в разработке приложения для доставки еды из ресторанов.
🟣 Размер так важен? — как Spotify отслеживает размеры приложений, почему это является важной задачей, которая может иметь значительные последствия.
🟣 Смертность мобильных игр — компания провела исследование SuperScale, которое показывает, что 83% мобильных игр «умирают» в течение трех лет после их запуска.
🟣 Из Figma во Flutter — статья рассказывает о том, как плагин DhiWise для Figma позволяет преобразовывать дизайны в код Flutter с помощью технологии low-code.
🔥2👍1👏1
Как работает Kotlin Flow, одна из новых функций языка Kotlin для асинхронного программирования. Автор рассказывает о разнице между последовательным и параллельным потоком, а также о том, как использовать операторы flowOn и buffer для управления потоком данных. Статья с примерами кода, которые показывают, как создавать и использовать потоки в Kotlin. Проверь и подтяни свои знания.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
👨💻 Переносим разработку под iOS и macOS на Neovim
Хотите попробовать разработку, используя только Neovim? Эта статья для вас. Автор статьи рассказывает, как установить и настроить различные плагины, чтобы обеспечить функции, такие как автодополнение кода, синтаксический анализ, форматирование, запуск тестов, отладка, создание симуляторов и многое другое. Также затрагивает тему преимущества и недостатка среды вместо Xcode.
Если готовы к приключениям, ознакомиться можно здесь 🔖
Хотите попробовать разработку, используя только Neovim? Эта статья для вас. Автор статьи рассказывает, как установить и настроить различные плагины, чтобы обеспечить функции, такие как автодополнение кода, синтаксический анализ, форматирование, запуск тестов, отладка, создание симуляторов и многое другое. Также затрагивает тему преимущества и недостатка среды вместо Xcode.
Если готовы к приключениям, ознакомиться можно здесь 🔖
🔥3🥱2
🎓💻 Продолжаем разбирать методы работы с массивами в Swift
Ознакомиться с первой частью можно тут🔗
Часть вторая👇
Первый метод — .append
Метод используется для добавления нового элемента в конец массива Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
a.append(☀️)
print(b) // [🔥, 💧, ☀️, ❄️, 🔥, ☀️]
Второй метод — .insert
Метод для вставки нового элемента в массив на указанную позицию. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
a.insert(💧, at: 2)
print(a) // [🔥, 💧, 💧, ☀️, ❄️, 🔥]
Третий метод — .removeFirst
Используется для удаления первого элемента из упорядоченной коллекции. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
a.removeFirst()
print(b) // [💧, ☀️, ❄️, 🔥]
Четвертый метод — .dropFirst
Метод в отличие от removeFirst(), не изменяет исходный массив. Вместо этого он создает новый «вид» на исходную коллекцию, исключая указанное количество элементов с начала. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.dropFirst(2)
print(b) // [☀️, ❄️, 🔥]
Пятый метод — .dropLast
Метод такой же, как и предыдущий, только удаляет элементы массива с конца. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.dropLast(2)
print(b) // [🔥, 💧, ☀️]
Шестой метод — .shuffle
Метод используется для перемешивания (или перетасовки) элементов в массиве случайным образом. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.shuffle()
print(b) // [☀️, 🔥, 💧, ❄️, 🔥]
Сохраняй и пользуйся📌
Ознакомиться с первой частью можно тут
Часть вторая
Первый метод — .append
Метод используется для добавления нового элемента в конец массива Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
a.append(☀️)
print(b) // [🔥, 💧, ☀️, ❄️, 🔥, ☀️]
Второй метод — .insert
Метод для вставки нового элемента в массив на указанную позицию. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
a.insert(💧, at: 2)
print(a) // [🔥, 💧, 💧, ☀️, ❄️, 🔥]
Третий метод — .removeFirst
Используется для удаления первого элемента из упорядоченной коллекции. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
a.removeFirst()
print(b) // [💧, ☀️, ❄️, 🔥]
Четвертый метод — .dropFirst
Метод в отличие от removeFirst(), не изменяет исходный массив. Вместо этого он создает новый «вид» на исходную коллекцию, исключая указанное количество элементов с начала. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.dropFirst(2)
print(b) // [☀️, ❄️, 🔥]
Пятый метод — .dropLast
Метод такой же, как и предыдущий, только удаляет элементы массива с конца. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.dropLast(2)
print(b) // [🔥, 💧, ☀️]
Шестой метод — .shuffle
Метод используется для перемешивания (или перетасовки) элементов в массиве случайным образом. Пример:
var a = [🔥, 💧, ☀️, ❄️, 🔥]
let b = a.shuffle()
print(b) // [☀️, 🔥, 💧, ❄️, 🔥]
Сохраняй и пользуйся
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🥱4
В видео автор раскрывает распространенные ошибки при работе с корутинами в Kotlin, особенно в контексте их отмены, подчеркивает важность понимания и правильной реализации. Видео наполнено техническими деталями и практическими советами, идеально подходит для разработчиков, желающих углубить свои знания в Kotlin и корутинах.
Содержание:
00:00 — Начало
00:41 — Ловушка №1
09:23 — Ловушка №2
17:03 — Ловушка №3
#видео
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🔖 Как получить международный оффер iOS-разработчику?
Доклад Дарьи Шульгиной, основательницы сервиса по поиску работы за рубежом AgileFluent, о развитии международной карьеры. Она делится своим опытом и опытом своей команды по оказанию помощи в поиске работы в разных странах, в первую очередь в Европе. В докладе рассматриваются такие ключевые моменты, как:
– Целесообразность поиска работы за рубежом;
– Факторы, влияющие на предложение работы за рубежом;
– Планирование поиска работы;
– Трудности получения приглашений на собеседование;
– Распространённые ошибки при поиске работы.
Если вы начинающий специалист, или специалист с опытом, и думаете о карьере за рубежом, видео будет полезно для вас. 🌏
🔗 Смотреть
Доклад Дарьи Шульгиной, основательницы сервиса по поиску работы за рубежом AgileFluent, о развитии международной карьеры. Она делится своим опытом и опытом своей команды по оказанию помощи в поиске работы в разных странах, в первую очередь в Европе. В докладе рассматриваются такие ключевые моменты, как:
– Целесообразность поиска работы за рубежом;
– Факторы, влияющие на предложение работы за рубежом;
– Планирование поиска работы;
– Трудности получения приглашений на собеседование;
– Распространённые ошибки при поиске работы.
Если вы начинающий специалист, или специалист с опытом, и думаете о карьере за рубежом, видео будет полезно для вас. 🌏
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2❤1
📱 Свайпы на ScrollView без жестов?
В видео автор рассказывает, как создать Swipe Actions для ScrollView с помощью новых API iOS 17. В SwiftUI вы можете добавить модификатор .swipeActions() к элементам списка. Этот модификатор позволяет добавлять кнопки, которые появляются при свайпе элемента влево или вправо.
► Смотреть
В видео автор рассказывает, как создать Swipe Actions для ScrollView с помощью новых API iOS 17. В SwiftUI вы можете добавить модификатор .swipeActions() к элементам списка. Этот модификатор позволяет добавлять кнопки, которые появляются при свайпе элемента влево или вправо.
► Смотреть
👍2
#дайджест полезностей для мобильного разработчика на Android
🔹 Новые API в Jetpack Compose — статья о новых API для адаптивных макетов в Jetpack Compose, современном инструменте для создания нативного пользовательского интерфейса на Android.
🔹 Не все тесты одинаковы — различные типы UI-тестов для Android-приложений и их особенности.
🔹 Миграция с kapt к KSP — как перейти от использования kapt к KSP в проектах на Android. KSP — это альтернатива kapt, которая анализирует код Kotlin напрямую, что ускоряет сборку в два раза.
🔹 События как состояние — критика популярной идеи о том, что события в пользовательском интерфейсе должны быть выражены как состояния, а не как потоки объектов, которые могут быть потреблены компонентами UI.
🔹 In-App Update — как реализовать функцию обновления, которая позволяет активным пользователям обновлять приложение без перехода в Google Play.
🔹 Новые API в Jetpack Compose — статья о новых API для адаптивных макетов в Jetpack Compose, современном инструменте для создания нативного пользовательского интерфейса на Android.
🔹 Не все тесты одинаковы — различные типы UI-тестов для Android-приложений и их особенности.
🔹 Миграция с kapt к KSP — как перейти от использования kapt к KSP в проектах на Android. KSP — это альтернатива kapt, которая анализирует код Kotlin напрямую, что ускоряет сборку в два раза.
🔹 События как состояние — критика популярной идеи о том, что события в пользовательском интерфейсе должны быть выражены как состояния, а не как потоки объектов, которые могут быть потреблены компонентами UI.
🔹 In-App Update — как реализовать функцию обновления, которая позволяет активным пользователям обновлять приложение без перехода в Google Play.
❤2🔥1