Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Har kuni bir video
#challenge
😅 Anchadan beri kanaldagi nofaollikka nuqta qo'ymasak bo'lmaydi. Nasib qilsa kanalga har kuni kamida bittadan video tayyorlab, yuklab borishga harakat qilaman. Ko'ramiz qanchagacha ushbu challenge ni davom ettirar ekanmiz.
Hozirda ko'proq shorts'lar tayyorlashga harakat qilaman, lekin nasib qilsa katta videolar tayyorlash ham niyatimiz mavjud.
🥹Sizdan 2 ta iltimosim bor:
1. Bizni qo'llab-quvvatlang va biz bilan bo'ling
2. Izohaga video uchun "zakaz" lar yozib qoldiring 😉
🔄 Tah.: challenge'ning birinchi videosini birozdan so'ng joylaymiz. Yana bir gap: har kuni test ham tashlab turishga harakat qilamiz.
💻 Kompyuterni birga o'rganamiz ⤵️
TelegramIInstagramITikTokIYouTube
#challenge
🏛Termiz davlat universiteti Yuridik fakulteti talabalar va o’qituvchilari o‘rtasida “Korrupsiyaga qarshi kurash” mavzusida challenge o‘tkazildi.
Ushbu tadbirda yoshlar o‘z pozitsiyasini ochiq ifoda etib, jamiyatda adolat va shaffoflikni targ‘ib qilishga chaqiruvchi plakatlar bilan qatnashdi.
❌Korrupsiyaga qarshi kurash – har birimizning burchimiz! Keling, birgalikda adolatli va shaffof kelajak sari qadam tashlaylik!
🌐Bizni ijtimoiy tarmoqlar orqali kuzating!
🚀Telegram | 📷Instagram | 🔵Facebook | 🎬You tube
#challenge😂😂😂
1. Siz Cobalt'ga pul to‘labsiz. Sizga Matiz bermoqchimiz noqulaylik uchun uzr!
2. Diplomatiyaga grantga kiribsiz. Sizni Milliy universitetga o‘tkazmoqchimiz noqulaylik uchun uzr!
3. Ko‘richagizni oldirmoqchi ediz. Bitta buyragingizni olib tashladik. Noqulaylik uchun uzr!
4. Kuyov katta qizimga uylanmoqchi ediz. Sizga ammasini qizini beramiz. Noqulayliklar uchun uzr 😂
👉@abdusattor
😎 Короче. Я придумал конкурс.
Задача
Нагенерить персонажа Acid Crunch в формате «страшный сон конспиролога».
Формат и количество контента не ограничены, но если сделаешь слишком много, я тебе напишу, и мы вместе выберем 2 лучших варианта на твой взгляд.
Это может быть: картинка, мем, комикс или даже видос.
Сроки
Итоги подводим 15 февраля.
Месяц с запасом, чтобы ты реально успел сделать что-то крутое, а не на коленке.
Призы
1 место — 5 000 ₽
2 место — 2 000 ₽
3 место — 1 000 ₽
Финальное решение
Победителей выбирают подписчики канала голосованием.
PS. Сергей хочу видео из соры как ты умеешь) , а ещё я скину исходники в комменты чтобы было с чем работать)
😂И не ссы что-то делать. В прошлом конкурсе почти не было конкурентов. Просто немного потрать времени, залутай мани, а мы поржём с мемов.
#challenge | AcidCrunch
😂Напоминаю про конкурс в 10 000₽ осталась НЕДЕЛЯ!!!
Пока поучаствовало всего 2 человека так что ты вполне легко можешь забрать косарик даже если не займешь первое место))
Задача:
Создать видеоролик с персонажем AcidCrunch и опубликовать его в любой социальной сети (TikTok, Instagram, YouTube Shorts, Reels и т.д.) с ссылкой на этот канал.
Формат ролика — абсолютно любой (42):
Видео, сгенерированное в Sora-2, Veo-3, Kling или других нейросетях
Запись экрана с обзором (например, на Banana Crunch Canvas, с лайфхаками, фишками и т.д.)
Слайд-шоу из картинок (например, как комикс-новелла)
Экспериментальный арт-формат (анимация, стоп моушен типа робоцыпа )
Примеры идей
Взаимодействие с персонажем AcidCrunch (диалог, встреча, пародия)
История про AcidCrunch (юмор, хоррор, приключение, стёб)
Гайд или обучающий ролик (например, про фишки канала или AI-сервисы)
Что-то про «банан и кранч» — мем, нарратив, мини-сюжет
Творческая подача (музыкальный клип, монтаж-эксперимент, стилизованная новелла)
Победитель определяется только по количеству просмотров
Призы
1 место (по просмотрам) — 5000 ₽
Гран-при (мой личный выбор) — 2000 ₽
3 поощрительных места — по 1000 ₽
Условия участия
1. Сними ролик в любом формате.
2. Опубликуй его в соцсети с ссылкой на канал AcidCrunch.
3. Скинь ссылку на свой ролик в комментарии к этому посту.
Сроки
Итоги будут объявлены 1 ноября 2025 года в 20:00.
#challenge | AcidCrunch
Итак, новости по сайту
После запуска и репостов в крупных каналах бесплатные лимиты очень быстро превратились в платные и заблокировали мою карту. Пришлось экстренно отключать платёжку, и сайт, соответственно, лёг.
Сейчас со мной связался Mr. @Paddler — мы вместе просмотрели код и выяснили, что моя гипотеза с бесплатным AI-ключом не работает. Увы, банану в него не включили.
Так что, если у тебя есть платный AI-ключ и хочется работать в более удобном интерфейсе — добро пожаловать на временный сайт
Если платного ключика нет возвращаемся в ai studio . Это решение пока до того момента, как я решу, что делать с сервисом дальше.
+небольшой лайфхак для тебя! Если хочешь такую же ширину, как на сайте, но без гугловской хрени: нажми F12, выбери инструмент выделения элементов и удали мешающие гугловские интерфейсы. Будет точно как на сайте — только уже с твоими лимитами 😗🤩
Возможно, придётся разделить проект на два направления:
«Народный» AI Studio-вариант для всех.
Платный продукт с доп. фишками и подпиской.
К сожалению, по-другому сайт не заработает (за исключением вставки твоего личного платного API-ключа, эту опцию я оставлю).
Ещё раз спасибо Paddler — он сэкономил мне кучу времени. Взамен могу порекомендовать его сервис по автоматизации бизнеса ai2flow, возможно, он окажется полезен и тебе.
😂 Сорри за неидеальный первый запуск, но не унываем и двигаемся дальше)
#challenge | AcidCrunch
😂Конкурс с AcidCrunch - Призовой фонд 10 000 ₽
Задача:
Создать видеоролик с персонажем AcidCrunch и опубликовать его в любой социальной сети (TikTok, Instagram, YouTube Shorts, Reels и т.д.) с ссылкой на этот канал.
Формат ролика — абсолютно любой (42):
Видео, сгенерированное в Sora-2, Veo-3, Kling или других нейросетях
Запись экрана с обзором (например, на Banana Crunch Canvas, с лайфхаками, фишками и т.д.)
Слайд-шоу из картинок (например, как комикс-новелла)
Экспериментальный арт-формат (анимация, стоп моушен типа робоцыпа )
Примеры идей
Взаимодействие с персонажем AcidCrunch (диалог, встреча, пародия)
История про AcidCrunch (юмор, хоррор, приключение, стёб)
Гайд или обучающий ролик (например, про фишки канала или AI-сервисы)
Что-то про «банан и кранч» — мем, нарратив, мини-сюжет
Творческая подача (музыкальный клип, монтаж-эксперимент, стилизованная новелла)
Победитель определяется только по количеству просмотров
Призы
1 место (по просмотрам) — 5000 ₽
Гран-при (мой личный выбор) — 2000 ₽
3 поощрительных места — по 1000 ₽
Условия участия
1. Сними ролик в любом формате.
2. Опубликуй его в соцсети с ссылкой на канал AcidCrunch.
3. Скинь ссылку на свой ролик в комментарии к этому посту.
Сроки
Конкурс длится 1 месяц с момента публикации поста.
Итоги будут объявлены 1 ноября 2025 года в 20:00.
За ролик родивший идею спасибо Niko
#challenge | AcidCrunch
Terdapat R1 dan R2 yang saling mengadvertise network mereka dengan protokol EIGRP seperti pada gambar.
• Network LAN ( 192.168.1.0 dan 192.168.2.0 ) diadvertise tanpa menggunakan wildcard mask.
• Sedangkan network WAN ( 172.16.0.0 ) diadvertise menggunakan wildcard mask.
Pertanyaan:
1- Apakah konfigurasi EIGRP diatas sudah tepat?
2- Apakah network LAN perlu diadvertise menggunakan wildcard mask? Kenapa?
3- Kalau ya, seperti apa konfigurasinya?
4- Apa perbedaannya antara menggunakan wildcard mask, dengan tanpa menggunakan wildcard mask?
5- Apakah perintah no auto-summary dibutuhkan pada network tersebut? Alasannya?
Tulis jawaban kamu di telegra.ph lalu kirim ke @computernetworksbot untuk bergabung ke grup.
#challenge