EXOZ OIDC Доклад.pdf
9.1 MB
А пока мы ждём запись доклада, держите презентацию
А ещё я написал статью на пространство "ВАЙТИ" в разбором кейса и приложением на гитхабе - которое можно посмотреть, поднять и потыкать)
#статьи
А ещё я написал статью на пространство "ВАЙТИ" в разбором кейса и приложением на гитхабе - которое можно посмотреть, поднять и потыкать)
#статьи
🔥6👍2🍾1
Итак, утро начинается с блокировки российских айпишников Docker Hub
Во-первых, тут в комментах есть разные варианты настроек зеркал (а ещё срачи!)
А ещё порадовал наш ответ - https://huecker.io/ ))) Не знаю, насколько надёжно использовать именно его в качестве прокси, но инструкция там удобная и есть адрес других проксей
Во-первых, тут в комментах есть разные варианты настроек зеркал (а ещё срачи!)
А ещё порадовал наш ответ - https://huecker.io/ ))) Не знаю, насколько надёжно использовать именно его в качестве прокси, но инструкция там удобная и есть адрес других проксей
😢4😭2
1. Введение в Elastic
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как Elasticsearch обрабатывает текст? (вы здесь)
5. ...
Как Elasticsearch обрабатывает текст?
1. Маппинги
Маппинг в Elastic - это набор правил о том, какие поля как обрабатывать. Например мы добавляем объект с полями
Также нам доступен динамический маппинг. При такой настройке эластик сам определяет тип данных на основе первого документа, попавшего в него: если поле текстовое, будет тип text, если это число - тип number и т.д. Динамический маппинг довольно удобен, однако если в документе у вас текстовое поле, которое может содержать как числа, так и строки, и в первом документе было число (или, например, строка, которая эластиком успешно распарсилась в дату), то при попытке добавить новый документ с текстовым значением поля выпадет ошибка.
2. Анализаторы
Они отвечают за обработку и индексацию входящего текста и состоят из:
- Фильтров символов (character filter), которые обрабатывают исходный текст. Например, могут убирать html-теги, удалять спецсимволы и т.д.
- Токенизаторов (tokenizer) - преобразуют текст в массив символов по разделителю и другим правилам. Например: на вход принимаем "Этот текст написан Дмитрием", на выход -
Токенизаторы, кстати, могут быть кастомными. Например, есть токенизатор uax_url_email, который распознаёт электронную почту и вставляет её в отдельный токен, а не разбивает адрес, ну и много других. Подробнее можно почитать тут.
- Фильтр токенов (token filter) - пост-обработка массива токенов. Каждый элемент в массиве токенов может быть как-то преобразован или удалён. Например часто удаляются стоп-слова, такие как предлоги и артикли "an", "a", "the", "but" и т.д.
Flexible Coding
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
✍2🔥2🤯1
1. Введение в Elastic
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как Elasticsearch обрабатывает текст?
5.Странности Ограничения Elasticsearch и Email (вы здесь)
Странности Ограничения Elasticsearch и Email
Как мы знаем из предыдущего поста - у эластика есть различные встроенные токенизаторы. Один из них -
- Результат стандартной токенизации:
- Результат токенизации uax_url_email:
В одной из систем, над которой я работал, был использован этот токенизатор для полнотекстового поиска по пользователям. И всё было прекрасно, пока не пришли... локальные домены верхнего уровня.
Домены верхнего уровня - это те самые
Поэтому идём в исходники
- Поиск по исходному коду эластика привёл к
- В файлах с реализацией UAX29URLEmailTokenizer ориентироваться довольно тяжело. Они созданы с помощью утилиты jflex, которая генерирует код на основе указанных спецификаций в специальных файлах. Тут нас интересует файл ASCIITLD.jflex, который содержит выражения для всех доменов на основе базы данных глобального регистратора IANA. На основе этих доменов elastic определяет: это собственно часть домена в адресе почты или просто строка. И в этой базе нет различных кастомных доменов, например "qwe", и никак их туда не добавить...
Какие выводы можно сделать? Если вы используете этот токенизатор и вам необходимо распознавать их эл. почту - проверьте, чтобы не использовались локальные домены
Flexible Coding
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как Elasticsearch обрабатывает текст?
5.
Странности
Как мы знаем из предыдущего поста - у эластика есть различные встроенные токенизаторы. Один из них -
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
🔥5❤1🤔1
Forwarded from Амбиции Петрова
Новая неделя — новый доклад 💚
Встречайте Дмитрия Бахтенкова с темой «Динамическое добавление провайдеров аутентификации OpenId Connect в .net core приложении»!
Напоминаем, что вы можете задать вопрос Дмитрию, написав его в комментариях.
Также в описании видео есть презентация с кликабельными ссылками, пользуйтесь 💬
https://youtu.be/2aC8OfQog9c
Встречайте Дмитрия Бахтенкова с темой «Динамическое добавление провайдеров аутентификации OpenId Connect в .net core приложении»!
Напоминаем, что вы можете задать вопрос Дмитрию, написав его в комментариях.
Также в описании видео есть презентация с кликабельными ссылками, пользуйтесь 💬
https://youtu.be/2aC8OfQog9c
YouTube
Динамическое добавление провайдеров аунтефикации OpenId Connect в .net - Дмитрий Бахтенков
Канал в Tg - https://t.me/exoz_tech
Сообщество в Вк - https://vk.com/exoz.tech
Канал на Дзен - https://dzen.ru/exoz
---
Презентация - https://disk.yandex.ru/i/I8a3wsSP4sFGvw
О чём доклад?
Узнаем общую информацию про протокол аутентификации OpenIdConnect…
Сообщество в Вк - https://vk.com/exoz.tech
Канал на Дзен - https://dzen.ru/exoz
---
Презентация - https://disk.yandex.ru/i/I8a3wsSP4sFGvw
О чём доклад?
Узнаем общую информацию про протокол аутентификации OpenIdConnect…
👍7🔥6
1. Введение в Elastic
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как эластик обрабатывает текст?
5. Странности и ограничения Elasticsearch и Email
6. Тестируем анализаторы Elasticsearch (вы здесь)
Тестируем анализаторы Elasticsearch
В предыдущем посте выяснилось, что некоторые токенизаторы ведут себя не очень очевидно. Вообще, проверять анализаторы можно в самом эластике, используя эндпоинт POST /_analyze.
Примеры запросов:
Тестируем анализатор:
Тестируем токенизатор и фильтры:
А в случае примера из предыдущего поста запрос будет таким:
С помощью этих запросов можно смотреть, как эластик будет разбивать поисковый запрос или текст на токены, и корректировать анализаторы, токенизаторы и фильтры для наилучшего качества при решении вашего кейса
Flexible Coding
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
✍4🔥1
Уже довольно давно в кругах любителей продуктивности светится браузер 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
С переездом на новую ОС мой прошлый браузер, Edge (который, кстати, совсем неплох - привычка хейтить его осталась со времён старых версий не на хромиуме), перестал справляться с задачами. Если на Windows он работал идеально, то на Mac оказался сырым и с неприятными визуальными багами. Так что я решил потестить Arc. Скачал, установил и почти сразу влюбился. Итак, что же мне понравилось?
1. Вертикальные вкладки по умолчанию. Они скрываются так, что сайт разворачивается на весь экран без лишних панелей-вкладок и всего такого.
2. Функция Tidy. Эта штука группирует вкладки по смысловому содержанию. Постоянно пользуюсь на работе, да и дома. Часто бывает, что открыто много вкладок и я уже в них запутался.
3. Easels. Холст прямо в браузере. Он простой, но при этом удобно встроен в браузер и им можно делиться (и, вероятно, даже устраивать совместную работу).
4. Ask. С помощью ctrl+f у ИИ можно спросить про контент на странице - это прикольно, на фото есть пример со статьёй на хабре (но можно лучше).
5. Spaces. Рабочие пространства сделаны гораздо удобнее, чем в Edge. Всё в одном месте, между ними можно переключаться, при этом контекст закладок, паролей и дизайна на каждое пространство свой.
6. Панель с избранными сайтами. Помимо закладок, в Arc можно вынести набор приложений для быстрого доступа в отдельное окошко - и это оказалось довольно удобно.
7. Модальные окна для сайтов из приложений. Arc открывает сайты из приложений в отдельной модалке, не создавая вкладку в основном окне браузера. Таким образом, мой браузер не забивается вкладками из страниц, которые мне прислали в телеге просто посмотреть, а я забыл их закрыть.
Из недостатков - к нему нужно привыкнуть. Адресная строка немного “спрятана”, что не всегда удобно, и не всегда корректно работает видимость вертикальных вкладок. Хотя когда привыкаешь, это перестаёт быть существенным недостатком. Dev tools обычные, сам браузер на хромиуме - это значит, что все расширения на нём корректно работают.
В общем, я призываю попробовать этот браузер - может быть, это будет вашим вторым браузером на ПК, а может вам так зайдёт, что вы перейдёте на него полностью.
#приложения
Flexible Coding
🔥6❤1
1. Введение в Elastic
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как эластик обрабатывает текст?
5. Странности и ограничения Elasticsearch и Email
6. Тестируем анализаторы Elasticsearch
7. Поисковые запросы в Elasticsearch (вы здесь)
Поисковые запросы в Elasticsearch
Итак, мы развернули Elasticsearch, загрузили туда документы, и теперь пришло время воспользоваться его главной функцией — поиском.
Search API в Elasticsearch предлагает использовать JSON с различными ключевыми словами, которые описывают разные типы поиска. Чтобы выполнить запрос, нужно обратиться к эндпоинту:
Как мы помним, в Elasticsearch есть анализаторы. Они обрабатывают текст не только при индексации, но и при выполнении поисковых запросов. Это значит, что текст запроса тоже проходит через анализаторы, что позволяет осуществлять более гибкий и точный поиск.
А что внутри Query?
Переходим к основным типам запросов. Один из самых распространённых — это
Если вам нужен поиск по точному совпадению, то используйте
Есть также
Для проверки существования поля используется
Помимо ключа поля и значения для поиска, в запросах можно указывать дополнительные параметры. Например:
-
-
И не забудем о Nested-запросах, которые используются для вложенных массивов объектов в структуре документа. У них свои особенности и нюансы, которые нужно учитывать при работе с ними.
Теперь поговорим о логических операциях, которые используются в запросах. Это операции типа
-
-
-
В логических операциях можно комбинировать несколько поисковых запросов - например terms по нескольким полям
Пример запроса
Допустим, в elastic хранятся списки товаров, и в структуре документов есть четыре поля: Id, Name, Description и Tags.
Для поиска "телефон Samsung" может использоваться следующий запрос:
Flexible Coding
2. Разворачиваем Elasticsearch
3. CRUD-операции в Elasticsearch
4. Как эластик обрабатывает текст?
5. Странности и ограничения Elasticsearch и Email
6. Тестируем анализаторы Elasticsearch
7. Поисковые запросы в Elasticsearch (вы здесь)
Поисковые запросы в Elasticsearch
Итак, мы развернули Elasticsearch, загрузили туда документы, и теперь пришло время воспользоваться его главной функцией — поиском.
Search API в Elasticsearch предлагает использовать JSON с различными ключевыми словами, которые описывают разные типы поиска. Чтобы выполнить запрос, нужно обратиться к эндпоинту:
GET /my-index-000001/_search.
{
"query": {
<запрос>
}
}
Как мы помним, в Elasticsearch есть анализаторы. Они обрабатывают текст не только при индексации, но и при выполнении поисковых запросов. Это значит, что текст запроса тоже проходит через анализаторы, что позволяет осуществлять более гибкий и точный поиск.
А что внутри Query?
Переходим к основным типам запросов. Один из самых распространённых — это
match: { field: "searchable text" }
. Он используется для полнотекстового поиска по тексту, числу, булевому значению или дате. Текст при этом анализируется с помощью соответствующего анализатора.Если вам нужен поиск по точному совпадению, то используйте
term: { field: "value" }
. Важно помнить, что для таких запросов поле должно иметь тип данных "keyword".Есть также
terms: { field: ["value1", "value2"] }
— он проверяет, является ли значение одним из элементов массива. Это похоже на оператор IN в SQL или $in в MongoDB.Для проверки существования поля используется
exists: { field: "fieldname" }
. Этот запрос вернёт false, если в исходном JSON поле было NULL
или пустым массивом []
.Помимо ключа поля и значения для поиска, в запросах можно указывать дополнительные параметры. Например:
-
operator: AND | OR
для полнотекстового поиска. Этот параметр определяет, должны ли все токены запроса присутствовать в документе (AND
) или хотя бы один (OR
).-
fuzziness: int
— расстояние Левенштейна для поиска с ошибками. Это позволяет искать слова с определённым количеством опечаток. Подробнее об этом можно прочитать здесь.И не забудем о Nested-запросах, которые используются для вложенных массивов объектов в структуре документа. У них свои особенности и нюансы, которые нужно учитывать при работе с ними.
Теперь поговорим о логических операциях, которые используются в запросах. Это операции типа
bool
, которые могут быть массивом или объектом с вложенным запросом. Например:-
must: {}
и filter: {}
выполняют роль логического "И". Разница в том, что must
влияет на оценку соответствия документа запросу, а filter
нет.-
should: {}
представляет собой логическое "ИЛИ".-
must_not: {}
— это логическое "НЕ".В логических операциях можно комбинировать несколько поисковых запросов - например terms по нескольким полям
Пример запроса
Допустим, в elastic хранятся списки товаров, и в структуре документов есть четыре поля: Id, Name, Description и Tags.
Для поиска "телефон Samsung" может использоваться следующий запрос:
curl --location --request GET 'http://localhost:9200/my-index/_search' \
--header 'Content-Type: application/json' \
--data '{
"query": {
"bool": {
"should": [
{
"match": {
"Name": "телефон Samsung"
}
},
{
"match": {
"Description": "Телефон Samsung"
}
},
{
"terms": {
"Tags": ["samsung"]
}
}
]
}
}
}'
Flexible Coding
🔥4👍2👏1
КОРОБКА
Машинный перевод в документации Microsoft иногда удивляет )
Вообще, как будто бы потихоньку русифицировать документацию - не такая и сложная задача, но она позволит избежать новых кринжей машинного перевода. Хотя зная объём доков от микрософт, вероятно, я не прав...
А вы натыкались на странности в документации?)
Машинный перевод в документации Microsoft иногда удивляет )
Вообще, как будто бы потихоньку русифицировать документацию - не такая и сложная задача, но она позволит избежать новых кринжей машинного перевода. Хотя зная объём доков от микрософт, вероятно, я не прав...
А вы натыкались на странности в документации?)
😁2
Углубленная работа - профессиональная деятельность, выполняемая в состоянии безраздельной концентрации, для чего требуется предельное напряжение мыслительных способностей. Такое усилие часто приводит к созданию новых ценностей и увеличивает мастерство исполнителя, его результаты трудновоспроизводимы
Прочитал книгу Кэла Ньюпорта "В работу с головой". Она часто светится в кругах любителей продуктивности :)
Книга про концентрацию. В последнее время многие (я, например) действительно её утратили из-за разнообразия потребляемого контента, многозадачности (которая вообще-то довольно губительна и неэффективна). И автор предлагает способы прокачать свой навык концентрации - так как чаще всего именно глубокая работа позволяет создавать ценности.
Несмотря на то, что автор довольно радикален, как по мне, я нашёл много интересных идей в книге - описание практики тайм-блокинга от непосредственно её автора, мысли о личной ответственности человека при выполнении деятельности, о самостоятельности и т.д.
Заметил, что после прочтения книги начал более сконцентрированно работать - начал следить за отвлечениями,
С окончанием рабочего дня откажитесь до следующего утра от любых размышлений о рабочих материях. Если вам не хватило времени - увеличьте свой рабочий день, но после того, как вы закончили, ваш ум должен быть свободен
Идея хорошая, думаю, многим подойдёт :)
Из минусов - некоторая радикальность автора (если вы не умеете жёстко концентрироваться вы ничего не добьётесь!!!), грамматические ошибки в книге и периодически попадался странный перевод. Надо было читать на английском :)
Думаю, книга будет полезна тем, кто заметил, что почему-то плохо концентрируется (но при этом здоровье и жизненный контекст в целом - ок) и хочет улучшить этот навык.
7/10
#книги
✍2👍2🔥1