Pull to refresh
16
0
Антон Шабовта @zloyusr

Программист

Send message

Пишем поиск семантически похожих текстов (или товаров) за полчаса на Go и Postgres (pgVector)

Reading time5 min
Views9K


Казалось бы, в посгресе и так есть неплохой полнотекстовый поиск (tsvector/tsquery), и вы из коробки можете проиндексировать ваши тексты, а потом поискать по ним. Но на самом деле это не совсем то, что нужно — такой поиск работает лишь по чётким совпадениям слов. Т.е. postgres не догадается, что "кошка гонится за мышью" — это довольно близко к "котёнок охотится на грызуна". Как же победить такую проблему?


TLDR:


  1. Преобразовываем наши тексты в наборы чисел (векторы) при помощи API openAI.
  2. Сохраняем векторы в базе с помощью pgvector.
  3. Легко ищем близкие друг к другу векторы или ищем их по вектору-запросу.
  4. Ускоряем индексами.
Читать дальше →
Total votes 21: ↑21 and ↓0+24
Comments8

Получение данных для сайта из 1С: Предприятие (на примере статусов заказов Управление Торговлей 11.5)

Level of difficultyMedium
Reading time6 min
Views5.4K

Постановка задачи: получать данные о заказах из базы данных 1С: Предприятие в формате JSON для отображения на сайте. Запросы должны обрабатываться максимально быстро, по возможности, не мешать работе локальных пользователей.

Задача, конечно, надуманная, но хорошо отражает целый класс задач из реального мира – обслуживание большого количества мелких запросов на чтение данных...

Читать далее
Total votes 3: ↑3 and ↓0+4
Comments7

Architecture as Code: реализуем подход Саймона Брауна

Reading time2 min
Views13K

Если вы знакомы с подходом к документированию, предложенным Саймоном Брауном, вы могли заинтересоваться им, но, возможно, задавались вопросом о его реализации. Этот репозиторий заполняет пробел, представляя конкретный шаблон реализации подхода, который состоящего из:


  1. Модели архитектуры программного обеспечения как код, построенные с использованием Structurizr Lite
  2. Документация, созданная с помощью шаблона Arc42
  3. Журнал решений, созданный с помощью ADR Tools

Предполагается хранение этой документации в репозитории и работа с ней так же, как и с кодом.


Читать дальше →
Total votes 8: ↑7 and ↓1+8
Comments3

Solidity: Путешествие в сердце оптимизации

Level of difficultyMedium
Reading time9 min
Views8.9K

Приветствую, кодеры Solidity!

Если вы здесь, то или у вас есть смарт-контракт, который готов к «похудению», или вы просто пытаетесь нарастить свои мышцы в области оптимизации Solidity. Как бы то ни было, сегодня я предлагаю вам навес золота в виде 27 проверенных методов оптимизации. Это ваш новый тренажерный зал для мозга! Всегда приятно иметь на руках свежий чек-лист перед запуском нового проекта. Итак, погнали!

Читать далее
Total votes 15: ↑14 and ↓1+21
Comments12

Использование ICU Message Format в PHP

Level of difficultyEasy
Reading time6 min
Views3.5K

Недавно я узнал про довольно интересный инструмент, встроенный в РНР. Оказывается, в языке нативно поддерживается универсальный формат шаблонов для сообщений, ICU Message Format. В частности, он используется в Symfony Translation Component и в системе интернационализации фреймворка Yii 2. Однако этот функционал доступен и сам по себе, в чистом РНР. И может использоваться не только для создания многоязычных сайтов, но и в качестве простенького шаблонизатора, например для email-рассылок.

Я решил разобраться с ним поподробнее
Total votes 16: ↑16 and ↓0+16
Comments2

Dagster | Туториал

Reading time9 min
Views13K

Dagster — это оркестратор, предназначенный для организации конвейеров обработки данных: ETL, проведение тестов, формирование отчетов, обучение ML-моделей и т.д.

На паре несложных примеров посмотрим как его развернуть, настроить и работать с ним.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments4

Проверяем Архитектурные стили на движке Factorio (часть 1)

Reading time28 min
Views46K

Добрый день всем, дорогие читатели!

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

Если вы хотя бы чуть-чуть имели неудачу пообщаться с Архитекторами, то знаете, что в их понимании не существует идеальной архитектуры ПО и вся их работа состоит во взвешивании плюсов и минусов того или иного Архитектурного стиля. И поскольку Архитектурных стилей много и каждый имеет свои преимущества (даже Монолит) и недостатки (даже Микросервисы) - работа архитектора состоит в попытках применения данных стилей на конкретный продукт и попыток предугадать, что из этого получит в итоге для бизнес-части.

Как сказал мой добрый друг-программист про Factorio: "Эту игру создали программисты для программистов" и эти слова плотно въелись в мою память. И реально игра в эту игру очень сильно напоминает процесс разработки ПО: можно просто строить как попало и прийти к полностью запутанной и сложнообслуживаемой системе, а можно подойти к вопросу с умом изначально и в итоге получить производительную и легкую в обслуживании систему (Прям как в жизни!)

Читать далее...
Total votes 25: ↑25 and ↓0+25
Comments24

Неочевидные проблемы с быстродействием в Doctrine, связанные с гидрацией объектов

Reading time2 min
Views11K
Недавно я реализовал функции API в проекте с бэк-эндом Symfony2, использущем Doctrine в качестве ORM.

И, как это иногда бывает, скороость отрабатывания не вполне меня устроила. На несложный запрос ответ генерировался аж 7,2 сек.



Первое предположение, где-то запускаются какие-то тяжелые запросы. Но через профайлер не видно ничего такого, что могло бы
навести на мысль о том, где скрылась проблема. SQL-запросов многовато, но все быстрые, и общее их время выполнения всего 223 милисекунды.

Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments11

Как и зачем я решил начать собственное дело

Reading time8 min
Views190K
Салют, Хабр!
Недавно я уволился с довольно завидной должности (главного архитектора) в довольно неплохой компании (Acronis) и с непоколебимым решением в мозгу больше не работать по найму переехал из Москвы обратно в Ереван, откуда семь лет назад понаехал в Златоглаво-Нерезиновую. Учитывая необычность произошедшего и часто задаваемый вопрос «но почему?!», я решил разобраться в собственных мыслях и озвучить их вслух для себя самого и тех, кто может почерпнуть в моих размышлениях что-то для себя полезное. Короче говоря, это рассказ о том, почему я оставил высокооплачиваемую перспективную работу в международной компании ради сомнительной перспективы начать собственное дело, и как я собираюсь дальше жить.
Читать дальше →
Total votes 321: ↑291 and ↓30+261
Comments418

Еще раз о Security в Symfony2 подход user-resource-privilege

Reading time5 min
Views9K
Не так давно взялся за Symfony2. Не смотря на то, что до этого имел достаточно богатый опыт общения с Zend1, барьер входа для меня оказался высоким. Вдоволь начитавшись у меня начало что-то получаться. Наибольшие затруднения вызвал вопрос разграничения прав доступа. Практически все мои поиски выводили меня на FOSUserBundle или обрывки информации о том, как можно расширить функционал модуля Security из стандартной поставки фреймворка. Каких-либо преимуществ для себя в громоздком FOSUserBundle я не обнаружил. Поэтому эта статья будет о том, как я допиливал Symfony2 Security под свои нужды. Цель была следующая: symfony2 + security + разграничение прав доступа на уровне объекта в зависимости от роли пользователя. В этой статье не будет ничего про наследование ролей и кумулятивные привилегии, информацию о которых вы, без труда, найдете сами. Схема прав в моем проекте: запрещено все, что не разрешено. Один пользователь имеет строго одну роль. Роль имеет доступ к различным ресурсам с различным набором привилегий. Разные роли могут иметь доступ к одним и тем же ресурсам с разными или равными наборами привилегий. Я не буду пытаться сделать код максимально абстрактным, а просто буду использовать фрагменты из своего проекта, связанные с функциональностью заказ-нарядов на обслуживание техники.
Читать дальше →
Total votes 9: ↑6 and ↓3+3
Comments17

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity