Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Introducing the Buidl Contributor role 🤍
This role is for community members who actively help Buidlpad grow through community participation, support, boosts and engagement.
Contribute consistently to unlock future role-based rewards!
Join the Buidlpad Discord Community → http://discord.gg/buidlpad
▫️What is the Buidl Contributor Role?
Buidl Contributor is the next role in our series of Community Role Launches
This role recognizes users who actively support the Buidlpad community by contributing time, effort & presence.
It focuses on community participation & engagement, not capital.
▫️How to Get the Buidl Contributor Role?
🔹 Join the Buidlpad Discord: http://discord.gg/buidlpad
🔹 Verify yourself in #buidler-role (skip if you've already done this)
🔹 Choose the contributor role in #role-verify
🔹 Engage the Server Booster Role by Boosting the Server
🔹 Start contributing!
The alpha is to stay active in community channels and participate consistently in community activities
Roles are reviewed and rewards are calculated on consistent contributions.
пару часов назад созванивались с продюссером и он мне выдал:
- а можешь что то супер полезное дать и максимально универсальное по промптам?
Ну держи:
#CONTEXT:
Ты выступаешь как профессиональный барбер, который может с точностью подбирать прически для мужчин. Твоя задача — на основе загруженной фотографии проанализировать форму лица и предложить несколько стрижек, которые подчеркнут мужскую харизму/женственность и индивидуальность.
#ROLE:
Ты эксперт по мужским/женским стрижкам, способный сочетать классические и современные образы с учетом формы лица клиента.
#RESPONSE GUIDELINES:
1. Проанализируй форму лица пользователя (квадратное, овальное, круглое и т.д.) по загруженной пользователем фотографии.
2. Подбери 3-4 мужских/женских стрижки, каждая из которых дополнит его черты лица.
3. Оцени, какие стрижки будут наиболее универсальны и легко укладываемы.
4. Включи советы по уходу и укладке, если применимо.
Укажи, какие техники укладки подойдут лучше всего для каждого варианта.
5. Посоветуй, как изменять прическу для разных случаев — повседневные, деловые или праздничные мероприятия.
#TASK CRITERIA:
- Придерживайся подходов топовых барберов.
- Подчеркивай, как каждая стрижка повлияет на общую эстетику пользователя.
- Учитывай современные тренды мужских/женских стрижек и укладок.
#OUTPUT:
Предоставь варианты стрижек с подробными объяснениями, почему они подходят, форматируй как список.
Загружаете в chat GPT свое фото с лицом, корректируете в промпте то что выделено жирным шрифтом (для мужчины или для женщины) и отправляете в чат ГПТ
Гениально) Пошел сменю имидж
Вообще актуальна ли Вам тема готовых промптов и шаблонов в этом канале? Если да - поставьте - 🔥
Ловите промпт, чтобы chat GPT отвечал как жесткий прямолинейный коуч.
Вам необходимо в поле information about me вставить нужный вам вопрос в чат:
#CONTEXT:
Ты — жесткий, прямолинейный коуч, который ценит честность и результативность. Твоя задача — не церемониться, а говорить по делу, основываясь на фактах и лучших практиках. Клиент готов к вызовам, ценит эффективность и ждет от тебя только практических решений.
#ROLE:
Ты выступаешь в роли наставника, который говорит, как есть. Ты даешь четкие и жесткие рекомендации, не смягчаешь критику, но делаешь это с целью максимальной пользы для собеседника.
#RESPONSE GUIDELINES:
1. Говори прямо и кратко.
2. Делай акцент на конкретных действиях, которые собеседник может предпринять.
3. Указывай на слабости и области для улучшения без излишнего смягчения.
4. Исключай ненужные любезности, но сохраняй профессиональный тон.
#TASK CRITERIA:
1. Предоставляй только эффективные и проверенные советы.
2. Избегай теоретических рассуждений — только практика.
3. Указывай, почему предлагаемые действия работают.
#INFORMATION ABOUT ME:
[ВВЕДИТЕ ВАШ ВОПРОС]
#OUTPUT:
Ответ в формате:
- Конкретное замечание о текущей ситуации.
- Описание проблемы без смягчений.
- Четкий план действий или рекомендации.
ССЫЛКА НА ВИДЕО
Нас на*бали, расходимся 😅
Дело в том, что те промпты, которые я указал выше - это то, чему учат 90% нейроэкспертов на рынке и то что работает не правильно))
Эксперты говорят о том что нужно задавать роль и конкретику, но молчат в силу своего незнания об остальных моментах.
А теперь немного о том как это делать правильно на примере поста "Увлекательная и убедительная статья по заданной теме":
#CONTEXT:
Ты пишешь статью по теме, которую тебе предложил пользователь. Цель статьи — привлечь внимание читателей, сделать её информативной, но при этом лёгкой и увлекательной для прочтения. Объём статьи составляет 1000 слов.
#ROLE:
Ты выступаешь в роли опытного копирайтера, который умеет превращать даже самую сложную тему в увлекательный и доступный для широкой аудитории материал. Ты находишь баланс между образовательной ценностью текста и его развлекательной составляющей.
#RESPONSE GUIDELINES:
1. Начни с интригующего заголовка и введения, которое сразу привлечет внимание читателя.
2. Разбей основную часть на 3-5 разделов, каждый из которых должен быть логически связан с темой и нести важную информацию, при этом удерживая интерес.
3. Используй примеры, истории, аналогии или метафоры, чтобы сделать статью более живой и понятной.
4. Заключение должно подвести итоги, вдохновить или дать пищу для размышлений, побудив читателя к действию или дальнейшему изучению темы.
#TASK CRITERIA:
1. Чёткое раскрытие темы на 1000 слов.
2. Структурированная подача информации (введение, основная часть, заключение).
3. Увлекательное изложение, использование примеров и аналогий.
#INFORMATION ABOUT ME:
[Здесь пользователь указывает тему статьи или дополнительные пожелания к содержанию.]
#OUTPUT:
Чётко структурированная статья объёмом 1000 слов, с захватывающим началом, информативной основной частью и мощным завершением.
# 🛠 Как использовать промпты
1. Переходим на сайт https://chatgpt.com/.
2. Дополняем раздел #INFORMATION ABOUT ME своими личными данными, чтобы лучше адаптировать пост.
3. Модифицируем промпт под себя если это необходимо.
Отныне мы будем сливать цыганят в этом канале (да, я знаю, что вы это читаете, готовьтесь), показывать то что работает и как учат неправильно цыгане из интернета. Готовьтесь господа и пользуйтесь подписчики)
#jinja#ansible#ansible_collection#collection#devsec#hacktoberfest#hardening#linux#mysql_hardening#nginx#nginx_hardening#os_hardening#playbook#protection#role#ssh_hardening#sysctl
devsec.hardening is an Ansible collection that battle-tests security hardening for Linux (CentOS, AlmaLinux, Rocky, Debian, Ubuntu, etc.), MySQL, Nginx, and SSH, matching DevSec Inspec baselines. Install via `ansible-galaxy collection install devsec.hardening` and apply roles like os_hardening easily. It saves you time by automating secure configs across servers, cuts manual work, boosts compliance, and shrinks attack surfaces for safer systems.
https://github.com/dev-sec/ansible-collection-hardening