Flexible Coding
148 subscribers
163 photos
2 files
96 links
Download Telegram
Выступление прошло вполне успешно! Конечно, есть над чем работать (как обычно), но в целом я доволен.

Чуть позже выложу презентацию и другие материалы)
EXOZ OIDC Доклад.pdf
9.1 MB
А пока мы ждём запись доклада, держите презентацию

А ещё я написал статью на пространство "ВАЙТИ" в разбором кейса и приложением на гитхабе - которое можно посмотреть, поднять и потыкать)

#статьи
Итак, утро начинается с блокировки российских айпишников Docker Hub

Во-первых, тут в комментах есть разные варианты настроек зеркал (а ещё срачи!)

А ещё порадовал наш ответ - https://huecker.io/ ))) Не знаю, насколько надёжно использовать именно его в качестве прокси, но инструкция там удобная и есть адрес других проксей
1. Введение в Elastic
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как Elasticsearch обрабатывает текст? (вы здесь)
5. ...

Как Elasticsearch обрабатывает текст?

1. Маппинги
Маппинг в Elastic - это набор правил о том, какие поля как обрабатывать. Например мы добавляем объект с полями id, name и description. Для id и name нам нужен поиск по точному совпадению, а по description - полнотекстовый поиск. Мы можем настроить разные типы данных данных для этих полей: "keyword" для точного поиска, а "text" для полнотекстового.

Также нам доступен динамический маппинг. При такой настройке эластик сам определяет тип данных на основе первого документа, попавшего в него: если поле текстовое, будет тип text, если это число - тип number и т.д. Динамический маппинг довольно удобен, однако если в документе у вас текстовое поле, которое может содержать как числа, так и строки, и в первом документе было число (или, например, строка, которая эластиком успешно распарсилась в дату), то при попытке добавить новый документ с текстовым значением поля выпадет ошибка.

2. Анализаторы

Они отвечают за обработку и индексацию входящего текста и состоят из:
- Фильтров символов (character filter), которые обрабатывают исходный текст. Например, могут убирать html-теги, удалять спецсимволы и т.д.
- Токенизаторов (tokenizer) - преобразуют текст в массив символов по разделителю и другим правилам. Например: на вход принимаем "Этот текст написан Дмитрием", на выход - ['этот', 'текст', 'написан', 'дмитрием']
Токенизаторы, кстати, могут быть кастомными. Например, есть токенизатор uax_url_email, который распознаёт электронную почту и вставляет её в отдельный токен, а не разбивает адрес, ну и много других. Подробнее можно почитать тут.
- Фильтр токенов (token filter) - пост-обработка массива токенов. Каждый элемент в массиве токенов может быть как-то преобразован или удалён. Например часто удаляются стоп-слова, такие как предлоги и артикли "an", "a", "the", "but" и т.д.

Flexible Coding
1. Введение в Elastic
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как Elasticsearch обрабатывает текст?
5. Странности Ограничения Elasticsearch и Email (вы здесь)


Странности
Ограничения Elasticsearch и Email


Как мы знаем из предыдущего поста - у эластика есть различные встроенные токенизаторы. Один из них - uax_url_email_tokenizer, который работает как стандартный, но при наличии в тексте адреса электронной почты, выделяет его в отдельный токен. Например:
- Результат стандартной токенизации: [ Email, me, at, john.smith, global, international.com ]
- Результат токенизации uax_url_email: [ Email, me, at, john.smith@global-international.com ]

В одной из систем, над которой я работал, был использован этот токенизатор для полнотекстового поиска по пользователям. И всё было прекрасно, пока не пришли... локальные домены верхнего уровня.

Домены верхнего уровня - это те самые .ru, .com и т.д. А в локальной сети их можно назначить самостоятельно, например .qwe и использовать. Ну, кто-то их и использовал, и у нас сломался поиск по пользователям. Почему сломался? Непонятно. Адреса просто разбивались как в примере со стандартным механизмом. Документация нам ответа не дала...

Поэтому идём в исходники
- Поиск по исходному коду эластика привёл к UAX29URLEmailTokenizerFactory, который просто возвращает new UAX29URLEmailTokenizer(). Судя по импортам в файле, он находится в Lucene. Направляемся туда.
- В файлах с реализацией UAX29URLEmailTokenizer ориентироваться довольно тяжело. Они созданы с помощью утилиты jflex, которая генерирует код на основе указанных спецификаций в специальных файлах. Тут нас интересует файл ASCIITLD.jflex, который содержит выражения для всех доменов на основе базы данных глобального регистратора IANA. На основе этих доменов elastic определяет: это собственно часть домена в адресе почты или просто строка. И в этой базе нет различных кастомных доменов, например "qwe", и никак их туда не добавить...

Какие выводы можно сделать? Если вы используете этот токенизатор и вам необходимо распознавать их эл. почту - проверьте, чтобы не использовались локальные домены

Flexible Coding
Тут запись доклада с Exoz подъехала!
Новая неделя — новый доклад 💚

Встречайте Дмитрия Бахтенкова с темой «Динамическое добавление провайдеров аутентификации OpenId Connect в .net core приложении»!

Напоминаем, что вы можете задать вопрос Дмитрию, написав его в комментариях.

Также в описании видео есть презентация с кликабельными ссылками, пользуйтесь 💬

https://youtu.be/2aC8OfQog9c
1. Введение в Elastic
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как эластик обрабатывает текст?
5. Странности и ограничения Elasticsearch и Email
6. Тестируем анализаторы Elasticsearch (вы здесь)

Тестируем анализаторы Elasticsearch

В предыдущем посте выяснилось, что некоторые токенизаторы ведут себя не очень очевидно. Вообще, проверять анализаторы можно в самом эластике, используя эндпоинт POST /_analyze.
Примеры запросов:
Тестируем анализатор:
POST _analyze
{
  "analyzer": "whitespace",
  "text":     "Какой-то текст"
}

Тестируем токенизатор и фильтры:
POST _analyze
{
  "tokenizer": "standard",
  "filter":  [ "lowercase" ],
  "text":      "Какой-то текст"
}


А в случае примера из предыдущего поста запрос будет таким:
POST _analyze
{
  "tokenizer": "uax_url_email",
  "filter":  [ "lowercase"],
  "text":      "john@domain.qwe"
}


С помощью этих запросов можно смотреть, как эластик будет разбивать поисковый запрос или текст на токены, и корректировать анализаторы, токенизаторы и фильтры для наилучшего качества при решении вашего кейса

Flexible Coding
Уже довольно давно в кругах любителей продуктивности светится браузер Arc. Например, обсуждение можно найти здесь. И вот, у меня наконец-то дошли руки его попробовать.

С переездом на новую ОС мой прошлый браузер, Edge (который, кстати, совсем неплох - привычка хейтить его осталась со времён старых версий не на хромиуме), перестал справляться с задачами. Если на Windows он работал идеально, то на Mac оказался сырым и с неприятными визуальными багами. Так что я решил потестить Arc. Скачал, установил и почти сразу влюбился. Итак, что же мне понравилось?

1. Вертикальные вкладки по умолчанию. Они скрываются так, что сайт разворачивается на весь экран без лишних панелей-вкладок и всего такого.
2. Функция Tidy. Эта штука группирует вкладки по смысловому содержанию. Постоянно пользуюсь на работе, да и дома. Часто бывает, что открыто много вкладок и я уже в них запутался.
3. Easels. Холст прямо в браузере. Он простой, но при этом удобно встроен в браузер и им можно делиться (и, вероятно, даже устраивать совместную работу).
4. Ask. С помощью ctrl+f у ИИ можно спросить про контент на странице - это прикольно, на фото есть пример со статьёй на хабре (но можно лучше).
5. Spaces. Рабочие пространства сделаны гораздо удобнее, чем в Edge. Всё в одном месте, между ними можно переключаться, при этом контекст закладок, паролей и дизайна на каждое пространство свой.
6. Панель с избранными сайтами. Помимо закладок, в Arc можно вынести набор приложений для быстрого доступа в отдельное окошко - и это оказалось довольно удобно.
7. Модальные окна для сайтов из приложений. Arc открывает сайты из приложений в отдельной модалке, не создавая вкладку в основном окне браузера. Таким образом, мой браузер не забивается вкладками из страниц, которые мне прислали в телеге просто посмотреть, а я забыл их закрыть.

Из недостатков - к нему нужно привыкнуть. Адресная строка немного “спрятана”, что не всегда удобно, и не всегда корректно работает видимость вертикальных вкладок. Хотя когда привыкаешь, это перестаёт быть существенным недостатком. Dev tools обычные, сам браузер на хромиуме - это значит, что все расширения на нём корректно работают.

В общем, я призываю попробовать этот браузер - может быть, это будет вашим вторым браузером на ПК, а может вам так зайдёт, что вы перейдёте на него полностью.

#приложения
Flexible Coding