Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
🤖Новые возможности для разработчиков циферблатов для WearOS
В WearOS 6 будет поддерживаться новая версия Watch Face Format (WFF). Она принесет
👉 Добавление пользовательского фото
👉 Анимации при переходе и выходе из спящего (ambient) режима
👉 Цветовые трансформации на основе значения
👉 Автоматическое изменения размера текста (доступно в WFF v3)
#android#wearos
🤖WearOS 6 позволит создавать магазины циферблатов
Google предоставляет множество возможностей по созданию циферблатов для WearOS на основе Watch Face Format и в следующей ОС добавляют Watch Face Push API, позволяющее создать свой магазин циферблатов 🤯
Циферблаты будут публиковать как и ранее. Разработчик может сделать приложение с витриной циферблатов и устанавливать их на часы с помощью Watch Face Push API
#android#wearos
🤖Snapdragon Wear Elite — новый чип для носимых устройств
На MWC 2026 Qualcomm анонсировала Snapdragon Wear Elite — первый чип серии Elite для носимых устройств. И это реально большое обновление на бумаге.
Чип сделан по 3нм техпроцессу. По сравнению с предыдущим Snapdragon W5+ Gen 2:
🚀 5x быстрее по CPU
🚀 7x быстрее по GPU
🔋 +30% к времени работы от батареи
⚡️зарядка до 50% всего за 10 минут
Главная фишка — впервые в носимых появился выделенный Hexagon NPU с поддержкой моделей до 2B параметров прямо на устройстве🤯
Это значит, что голосовые помощники, перевод, транскрибация и фитнес-аналитика смогут работать без облака.
Первые устройства ждём уже через несколько месяцев. Интересно, будет ли это заметно в реальном использовании или снова всё утонет в маркетинге AI-фич, а их работа приведет к быстрому сгоранию заряда батарейки на устройстве.
#Android#AndroidDev#WearOS
🤖Из WearOS убирают поддержку циферблатов на основе AndroidX / Wearable Support Library (WSL)
Как часть улучшения качества работы WearOS компания отказывается от использования старых инструментов для создания циферблатов и переходит на Watch Face Format (уже скоро будет версия 4) - декларативный XML формат без написания кода для создания циферблатов 🤯
Все изменения вступают с 14 января 2026, а именно:
‼️ Пользователи не смогут установить циферблаты старых форматов. Те что уже были установлены, продолжат работать.
‼️ Разработчики циферблатов должны мигрировать на WFF
🪙 Для циферблатов старого формата отключат всю монетизацию
‼️ Если использовали Watch Face Studio для создания циферблата, тогда вам надо повторно отправить их в Google Play с использованием версии 1.8.7 и выше
⚰️ Публиковать циферблаты старого формата уже нельзя с 27 января 2025, только обновлять те что опубликовали ранее
Подробнее про новый формат циферблатов в официальной документации
#android#wearos#googleplay
My first Wear OS app on Play Store, “Simple Memo”, is now open for testing.
Check it out and learn how to join the test!
https://1a23.com/works/open-source/simple-memo/
#WearOS#PlayStore🐟
🤖Важно для разработчиков Wear OS: с 2026 года обязательна 64-битная поддержка
Google объявила, что с 15 сентября 2026 года все новые приложения и обновления для Wear OS, содержащие нативный код (C/C++), должны включать 64-битную версию наряду с 32-битной. Google Play начнёт блокировать загрузку несовместимых APK/AAB.
Что нужно сделать разработчикам:
👉 Проверьте, есть ли в вашем приложении нативный код (файлы .so в lib/armeabi-v7a или lib/arm64-v8a). Даже если вы не пишете на C++, зависимости или SDK могут его добавлять.
👉 Для каждой 32-битной ABI (armeabi-v7a) добавьте 64-битную (arm64-v8a).
👉 Обновите сторонние SDK до версий с поддержкой 64 бит.
👉 Протестируйте приложение на 64-битном эмуляторе Wear OS (все новые образы уже 64-битные).
⚠️ Политика 32-битной поддержки не отменяется — Google Play по‑прежнему будет доставлять приложения на старые 32-битные устройства.
🔗Гайд по миграции
🔗 Источник - Android Dev Blog
#WearOS#AndroidDev#GooglePlay
Material 3 Expressive начали раскатывать на Android часы. Сразу сделали краткий обзор нововведений и запустили неделю, посвященную разработки под обновлённую WearOS
#android#wearos#material3expressive