Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Короткая ссылка чтобы создать новый файл
У многих популярных сервисов есть короткие ссылки на домене .new по которым можно прямо в адресной строке создать новый документ или файл
Figma — дизайн интерфейсов
https://figma.new
FigJam — онлайн доска
https://figjam.new
Miro — онлайн доска
https://wireframe.new
https://whiteboard.new (Легкая версия, которая живет 24 часа, можно потом утащить к себе в профиль)
Board — онлайн доска, где можно совместно рисовать и стирать как в фотошопе — стриается только часть линии по которой прошла резинка, а не вся линия целиком
https://board.new
Google
https://docs.new — Документы
https://sheets.new — Таблицы
https://slides.new — Презентации
https://note.new — Заметки
Adobe
https://editpdf.new — Редактировать PDF
https://mergepdf.new — Соединить PDF
https://splitpdf.new — Разделить PDF
https://compresspdf.new — Сжать PDF
https://rotatepdf.new — Повернуть PDF
https://sign.new — Подписать PDF
Canva — дизайн-редактор для недизайнеров
https://design.new
Asana — управление проектами
https://task.new
На сайте проекта .new еще больше сервисов
#ToolHacks
Как скрыть любой бесячий элемент сайта с помощью Ublock Origin.
Ublock origin это блокировщик рекламы с мощными дополнительными настройками и инструментами. Один из них — element picker mode (значок пипетки).
Позволяет скрыть любой элемент на сайте — всплывающий баннер, мигающее окно чата, cookie banner в пол экрана или красный счетчик новых постов.
Нужно выбрать пипетку, кликнуть по элементу, в нижней панели слайдером отрегулировать «глубину» удаления элемента и нажать «Create». В зависимости от структуры страницы, может понадобиться удалить один и тот же элемент несколько раз.
#ToolHacks
Как пользоваться GPT-4 легально за деньги, но без подписки
Краткая версия — можно пользоваться через API по модели «pay as you go».
В личном кабинете OpenAI выпустить API ключ и подключить его к клиенту YakGPT который работает в браузере локально и отсылает запросы по API. В конце месяца присылают инвойс на оплату в зависимости от количества запросов.
Если ничего не поняли, дальше объяснение человеческим языком👇
У компании OpenAI, которая делает сервис ChatGPT есть две версии нейросети — GPT3.5 turbo и GPT4. Четвертая версия работает медленнее, но отвечает точнее, льёт меньше воды и по многим показателем выдает ответы лучше чем «базовая» версия 3.5
Бесплатно GPT-4 можно пользоваться в браузере Edge через поисковик Bing или на сайте агрегатора чатботов Poe
GPT-3.5 Бесплатен на официальном сайте и в приложениях а для доступа к GPT4 нужно оформить подписку $20 в месяц. В довесок дают плагины с возможностью доступа нейронки к интернету (как в бесплатной Bing).
Но мало кто знает, что можно легально пользоваться GPT-4 по модели «плати за использование», через официальный программный интерфейс для разработчиков — API.
Вообще предполагается, что такой вариант будут использовать для подключения к своим сервисам. Например Khan Academy использует API для того. чтобы помогать ученикам и учителям лучше разбираться в материалах.
По факту, API запросы можно отправлять из консоли компьютера - просто это не удобно.
Для удобства энтузиасты написали YakGPT который выглядит очень похоже на официальный сайт ChatGPT, но работает на вашем компьютере и общается напрямую с серверами OpenAI по API
Как настроить доступ
В личном кабинете OpenAI Platform нужно привязать карту, настроить ограничение по сумме в месяц, выпустить API ключ и вставить его в YakGPT
У меня сейчас установлена отсечка 14 баксов в месяц. За июнь-июль в два человека на модели GPT4 наговорили на $10.5. В августе почти не пользовались, и накапало всего $1.4
Дополнительный плюс этого варианта — история разговоров хранится на серверах OpenAI 30 дней и не может быть использована для обучения. В отличии от всех других вариантов, где данные — один из главных способов монетизации бесплатного доступа.
Естественно, если очень плотно пользоваться GPT4 подписка может быть выгоднее, чем такая плата за запросы. Ну и если в бесплатной версии хватает качества, то официальный клиент удобнее и проще.
#ToolHacks
Скеретный чит-код в Notion Calendar чтобы активировать больше 4 часовых поясов
Есть очень приятная оболочка для гугл календаря — Notion Calendar (раньше назывался Cron Calendar)
Там очень удобно планировать встречи, блокировать слоты для работы и жизни, плюс все на горячих клавишах и с продуманным UX.
Одна из киллер фич для меня — возможность сразу видеть текущее время в других часовых поясах сбоку от окна календаря.
Но у меня недавно в команде добавился ещё +1 часовой пояс и 4 по умолчанию стало не хватать.
Так вот, оказывается есть секретный чит-код, который позволяет добавлять зон сколько нужно :)
Надо вызвать меню команд CTRL(⌘) + K и там написать такое заклинание:
defaults write ui maxTimeZones 10
Где 10 это число нужных дополнительных максимальных слотов. После этого при добавлении новой зоны он оставит её в боковой панели, вместо того, чтобы заменить последню добавленную.
p.s интересно, что я в поисках этого кода перерыл твиттер, гугл, ходил на поклон к Grok, Claude, ChatGPT, но только perplexity.aiсо второго, настойчивого запроса выдал явки и пароли)
🎤Ссылки на утро — второй канал
⏲Устойчивый VPN за звезду
#ToolHacks@cogload#ToolReview@cogload
Кстати, авторы ТГ каналов! Зацените интерфейсный сахар: на компе если выделить текст поста и нажать «редактировать» он сразу поставит курсор в нужном месте и в том же месте выделит кусок!
#ToolHacks@cogload#telegram@cogload
Платный поиск по содержанию всего телеграма
В новом обновлении телеги можно искать по ключевым словам во всех существующих публичных каналахтелеграма, даже в тех на которые не подписаны
Владельцам премиум аккаунта доступно 10 поисков в день, потом просят 10 звезд за каждый новый поиск 🗿
Находится во вкладке Posts если нажать на строку поиска.
Кстати там по умолчанию без набранного запроса были ссылки на канал Дурова и новости телеграма, но на следующий день их убрали — теперь просто иконка лупы)
😳
Работает неплохо, но я не смог сделать поиск с точным совпадением фразы, вроде "API ключи" — он сам решает в каком контексте искать.
Сортирует от самых свежих постов по времени, но по ощущениям еще как-то учитывает геопозицию, потому что сначала были ответы которые географически ближе.
Лимит на запросы в день видимо потому что нагрузка на сервера очень сильная.
Но как доп фишка для владельцев премиума вроде норм.
Раньше чтобы это сделать приходилось ходить в TgStat и там выдача была очень сомнительная по качеству.
Например я сейчас проверил запрос "ComfyUI nunchaku":
TgStat выдал мне два результата, и чтобы посмотреть второй (под спойлером) мне предложили заплатить подписку за 2940 в месяц 🌚
Поиск телеги же выдал 14 нормальных результатов.
На один канальчик даже подписался.
Что приятно, если вбивать те же слова, он не просит «потратить» платный поиск снова — просто показывает результат который уже был. (работает в течении 24 часов)
Видимо где-то сохраняют, чтобы попусту не крутить запросы. На следующий день этот же запрос будет платным, но информация тоже свежая по всем каналам
🎤Ссылки на утро — второй канал
⏲YouTube за звезду (VPN за 2 ₽)
#telegram@cogload#toolhacks@cogload
Раздельный поиск в Telegram
В свежей версии Telegram добавили возможность раздельно искать по трем категориям: личным чатам, группам, и каналам!
Очень не хватало!
Буквально ждал обещанноготри года (и четыре месяца). Ура!
🎉
Остался последний шаг — возможность искать внутри папки.
Но к этому времени мы наверное достигнем AGI и такие мелочи бренного бытия мне будут уже не важны :)
Работает в свежей версии Android/iOS только на мобиле, в десктоп пока не завезли
На десктопы тоже довезли!
🎤Ссылки на утро — второй канал
⏲Устойчивый VPN за звезду
#ToolHacks@cogload#Telegram@cogload
Вот пример мощи Affinity, особенно для графдизов: рисую в режиме вектора стрелку, редактирую её как в иллюстраторе, потом по F2 переключаюсь в растровый «режим фотошопа» и на этот вектор кидаю растровую маску.
Быстрыми жестами масштабирую размер кисти и хоткеем переключаюсь между скрытием и проявлением, чтобы детально подогнать маску под объект.
Потом возвращаюсь обратно в «иллюстратор» и жестом масштабирую весь объект под маской.
Еще обратите внимание как на 00:31 он в реальном времени подсвечивает результат действия, прежде чем я его совершил! Работает и с другими эффектами и фильтрам за счет ускорения на видеокарте. Фотошоп по-моему до сих пор так не умеет!
Ну и там же, из любого режима можно открыть полноценную панель текста как в индизайне с колонками, обтеканием текста, стилями, лигатурами, колонтитулами, табличными отступами и всем остальным типографско-издательским сахаром. Даже data merge есть!
🎤Ссылки на утро — второй канал
⏲YouTube за звезду (VPN)
#ToolHacks@cogload#Affinity@cogload
А еще в Affinity 2.6.0 добавили выделение объектов с помощью нейронки (работает гораздо быстрее если есть видеокарта)
Они единственные на моей памяти за долгое время, кто удержался и не назвал фичу «AI выделение».
Просто скромно расположили в настройках во вкладе Machine Learning две кнопки на скачивание моделей:
«Сегментация» 290мб — для выделения по наведению мышью (и прямоугольным выделением)
«Заметность» 72 мб — для выделения ключевого объекта в сцене (работает гораздо хуже)
В общем, долгожданный Mega Chad move!
Вы все еще кипятите? платите подписку? Может ну его?
#affinity@cogload#toolhacks@coglaod
Режим быстрого трансформирования маски в Affinity Photo
Сейчас много работаю с фотомонтажом для карточек товаров, и попутно открываю маленькие прелести Affinity, Видно что разработчики сами пользуется продуктом.
Для любого растрового выделения можно двумя хотекеями: [Q] → [V] активировать крутилки, как у примитивов. Потом нужным образом подогнать, и так же быстро переключиться обратно. Очень удобно!
Если еще не пробовали Affinity, напоминаю что у них теперь есть 6-месячный беслпатный триал
🎤Ссылки на утро — второй канал
⏲YouTube за звезду (VPN за 2₽)
#ToolHacks#Affinity
Мелочь а приятно - в Affinity есть режим «сбалансированных» пунктирных линий. Он старается поставить черточку на место поворота кривой — чтобы уголки всегда были прорисованы и не терялся силуэт формы
#ToolHacks#Affinity