Flexible Coding
155 subscribers
165 photos
2 files
100 links
Download Telegram
EXOZ OIDC Доклад.pdf
9.1 MB
А пока мы ждём запись доклада, держите презентацию

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

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

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

А ещё порадовал наш ответ - https://huecker.io/ ))) Не знаю, насколько надёжно использовать именно его в качестве прокси, но инструкция там удобная и есть адрес других проксей
😢4😭2
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
2🔥2🤯1
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
🔥51🤔1
Тут запись доклада с Exoz подъехала!
🔥2
Новая неделя — новый доклад 💚

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

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

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

https://youtu.be/2aC8OfQog9c
👍7🔥6
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
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
🔥61
1. Введение в Elastic
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 иногда удивляет )

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

А вы натыкались на странности в документации?)
😁2
Углубленная работа - профессиональная деятельность, выполняемая в состоянии безраздельной концентрации, для чего требуется предельное напряжение мыслительных способностей. Такое усилие часто приводит к созданию новых ценностей и увеличивает мастерство исполнителя, его результаты трудновоспроизводимы


Прочитал книгу Кэла Ньюпорта "В работу с головой". Она часто светится в кругах любителей продуктивности :)

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

Несмотря на то, что автор довольно радикален, как по мне, я нашёл много интересных идей в книге - описание практики тайм-блокинга от непосредственно её автора, мысли о личной ответственности человека при выполнении деятельности, о самостоятельности и т.д.

Заметил, что после прочтения книги начал более сконцентрированно работать - начал следить за отвлечениями, стал меньше играть в теннис в рабочее время и побольше задумываться в моменте, а чем же я сейчас занимаюсь. Результат неплохой. Ну а ещё - автор уважает идею Work Life-balance и предлагает не думать о работе после окончания рабочего дня (у него это 17:30):
С окончанием рабочего дня откажитесь до следующего утра от любых размышлений о рабочих материях. Если вам не хватило времени - увеличьте свой рабочий день, но после того, как вы закончили, ваш ум должен быть свободен
Идея хорошая, думаю, многим подойдёт :)


Из минусов - некоторая радикальность автора (если вы не умеете жёстко концентрироваться вы ничего не добьётесь!!!), грамматические ошибки в книге и периодически попадался странный перевод. Надо было читать на английском :)

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

7/10

#книги
2👍2🔥1