Практика Rails: Розумний семантичний пошук через PostgreSQL & ActiveRecord
#codica_advice
Чи бувало у вас таке: замовник приходить і каже: “Нам терміново потрібен AI-пошук у проекті!“, а ви вже уявляєте новий деплой, налаштування Pinecone або Qdrant, додатковий бюджет і головний біль з інфраструктурою?
Спокійно! Знайшли для вас елегантне рішення, яке дозволяє реалізувати семантичний векторний пошук без жодної нової бази даних — прямо у вашому звичному PostgreSQL.
Більшість продуктів зараз додають AI-фічі, але підключати окремі векторні бази даних (Pinecone/Qdrant) — це зайвий деплой, гроші та інфраструктура.
Якщо у вас вже є PostgreSQL, проблему вирішує розширення pgvector та гем pgvector-ruby
#codica_advice
Чи бувало у вас таке: замовник приходить і каже: “Нам терміново потрібен AI-пошук у проекті!“, а ви вже уявляєте новий деплой, налаштування Pinecone або Qdrant, додатковий бюджет і головний біль з інфраструктурою?
Спокійно! Знайшли для вас елегантне рішення, яке дозволяє реалізувати семантичний векторний пошук без жодної нової бази даних — прямо у вашому звичному PostgreSQL.
Більшість продуктів зараз додають AI-фічі, але підключати окремі векторні бази даних (Pinecone/Qdrant) — це зайвий деплой, гроші та інфраструктура.
Якщо у вас вже є PostgreSQL, проблему вирішує розширення pgvector та гем pgvector-ruby
Як це працює на практиці за 4 кроки:
1️⃣ Додаємо гем та вмикаємо розширення:
2️⃣ Додаємо векторну колонку до моделі:
3️⃣ Підключаємо магію в ActiveRecord:
4️⃣ Робимо семантичний пошук у коді:
🔥 Чому це круто:
• Жодних сторонніх сервісів — все всередині вашої Postgres.
• Повна підтримка стандартних з’єднань, scope та фільтрів ActiveRecord.
• Легко масштабується до мільйонів записів за допомогою HNSW індексів.
А ви вже пробували впроваджувати векторний пошук у своїх Rails-проектах чи поки використовуєте звичайний Full-Text Search? 👇
TikTok | Instagram | Telegram
1️⃣ Додаємо гем та вмикаємо розширення:
# Gemfile
gem “pgvector”
Створюємо міграцію:
class EnablePgvector < ActiveRecord::Migration[7.1]
def change
enable_extension “vector”
end
end
2️⃣ Додаємо векторну колонку до моделі:
class AddEmbeddingToProducts < ActiveRecord::Migration[7.1]
def change
# 1536 — розмірність для стандартних векторів OpenAI (text-embedding-3-small)
add_column :products, :embedding, :vector, limit: 1536
end
end
3️⃣ Підключаємо магію в ActiveRecord:
class Product < ApplicationRecord
has_neighbors :embedding
end
4️⃣ Робимо семантичний пошук у коді:
# Отримуємо вектор від AI для пошукового запиту “теплий худі на зимову погоду”
user_vector = OpenAIClient.embed(“теплий худі на зимову погоду“)
# Шукаємо найближчі товари за косинусною відстаню прямо через SQL:
@nearest_products = Product.nearest_neighbors(:embedding, user_vector, distance: “cosine”).first(5)
🔥 Чому це круто:
• Жодних сторонніх сервісів — все всередині вашої Postgres.
• Повна підтримка стандартних з’єднань, scope та фільтрів ActiveRecord.
• Легко масштабується до мільйонів записів за допомогою HNSW індексів.
А ви вже пробували впроваджувати векторний пошук у своїх Rails-проектах чи поки використовуєте звичайний Full-Text Search? 👇
TikTok | Instagram | Telegram
👍3
Друзі, ми багато говорили про те, як створювати, копіювати та ефективно працювати з обʼєктами в JavaScript 😎
Робота з обʼєктами в JavaScript давно не обмежується keys() чи entries(). Сучасний синтаксис дозволяє писати коротше, читабельніше і без зайвих перевірок — особливо коли дані приходять з API або структура обʼєкта може змінюватися.
Ці кілька “маленьких” можливостей мови часто недооцінюють, хоча саме вони роблять production-код акуратним і зрозумілим 👇
✨ Modern Object Tricks in JavaScript — маленькі речі, які роблять код чистішим
Гортайте картки — розберемося, коли який метод доречний і як писати ефективніше.
#codica_advice
Попередні пости рубрики:
📍 5 Important Object Methods in JavaScript
📍 Iteration Patterns
📍 Shallow vs Deep Copy in JavaScript
📍 Object vs Map in JavaScript — коли що використовувати?
📍 Protecting Objects in JavaScript — freeze, seal чи preventExtensions?
TikTok | Instagram | Telegram
Робота з обʼєктами в JavaScript давно не обмежується keys() чи entries(). Сучасний синтаксис дозволяє писати коротше, читабельніше і без зайвих перевірок — особливо коли дані приходять з API або структура обʼєкта може змінюватися.
Ці кілька “маленьких” можливостей мови часто недооцінюють, хоча саме вони роблять production-код акуратним і зрозумілим 👇
✨ Modern Object Tricks in JavaScript — маленькі речі, які роблять код чистішим
Гортайте картки — розберемося, коли який метод доречний і як писати ефективніше.
#codica_advice
Попередні пости рубрики:
📍 5 Important Object Methods in JavaScript
📍 Iteration Patterns
📍 Shallow vs Deep Copy in JavaScript
📍 Object vs Map in JavaScript — коли що використовувати?
📍 Protecting Objects in JavaScript — freeze, seal чи preventExtensions?
TikTok | Instagram | Telegram
🔥3
🚨 ХТО ЗНОВУ ЗЛАМАВ СТЕЙДЖ? НОВИЙ IT-ДЕКТЕКТИВ! 🚨
Друзі, у нас в компанії черговий релізний форс-мажор. Чотири спеціалісти працювали над фічами, але хтось один завантажив сирий код і повністю поклав стейджинг-сервер 😱
Наш PM зібрав первинні логи та записав кілька фактів. Допоможіть знайти винуватця, визначивши для кожного: Роль, Мову/Інструмент та їхній єдиний головний факап.
📋 Команда та ресурси:
Андрій, Марія, Сергій, Олена.
Ролі:
Backend, Frontend, QA, PM.
Мови та Інструменти:
Python, JavaScript, Jira, Postman.
Факапи:
Поклав стейдж, Забув дедлайн, Видалив ліда з CRM, Створив 50 merge conflicts.
Відомо, що:
Андрій працює з Python.
Марія — QA.
QA працює в Postman і не ламала стейдж.
PM веде задачі в Jira і саме він забув дедлайн.
Олена — не Frontend і не QA.
Сергій — не Backend і не PM.
Frontend працює з JavaScript і саме він поклав стейдж.
Backend створив 50 merge conflicts.
🤔 Хто поклав стейдж? Яка у нього роль та інструмент?
Пишіть у коментарях ім’я винуватця 👇
TikTok | Instagram | Telegram
Друзі, у нас в компанії черговий релізний форс-мажор. Чотири спеціалісти працювали над фічами, але хтось один завантажив сирий код і повністю поклав стейджинг-сервер 😱
Наш PM зібрав первинні логи та записав кілька фактів. Допоможіть знайти винуватця, визначивши для кожного: Роль, Мову/Інструмент та їхній єдиний головний факап.
📋 Команда та ресурси:
Андрій, Марія, Сергій, Олена.
Ролі:
Backend, Frontend, QA, PM.
Мови та Інструменти:
Python, JavaScript, Jira, Postman.
Факапи:
Поклав стейдж, Забув дедлайн, Видалив ліда з CRM, Створив 50 merge conflicts.
Відомо, що:
Андрій працює з Python.
Марія — QA.
QA працює в Postman і не ламала стейдж.
PM веде задачі в Jira і саме він забув дедлайн.
Олена — не Frontend і не QA.
Сергій — не Backend і не PM.
Frontend працює з JavaScript і саме він поклав стейдж.
Backend створив 50 merge conflicts.
🤔 Хто поклав стейдж? Яка у нього роль та інструмент?
Пишіть у коментарях ім’я винуватця 👇
TikTok | Instagram | Telegram
👀2
💎 Ruby-інструменти, які варто знати кожному розробнику. Частина 4
Попередні частини:
👉 [Ruby-інструменти. Частина 1]
👉 [Ruby-інструменти. Частина 2]
👉 [Ruby-інструменти. Частина 3]
Застосунок починає «гальмувати» через відправку email-ів чи обробку великих файлів? Користувачі дивляться на лоадер довше, ніж на власне життя? Час виносити важкі завдання у фонові черги.
#codica_advice
Ось 3 популярні інструменти для асинхронного виконання завдань у Rails👇
📌 Sidekiq
Багатопотоковий процесор завдань на базі Redis. Золотий стандарт індустрії для високонавантажених та продуктивних систем.
📌 GoodJob
Інструмент для фонових завдань прямо в PostgreSQL. Дозволяє працювати без Redis і тримати все в єдиній базі даних.
📌 Solid Queue
• Сучасний офіційний бекенд для Active Job від команди Rails, який став рішенням за замовчуванням в Rails 8.
А який бекенд для Active Job зараз крутиться у ваших проєктах?
TikTok | Instagram | Telegram
Попередні частини:
👉 [Ruby-інструменти. Частина 1]
👉 [Ruby-інструменти. Частина 2]
👉 [Ruby-інструменти. Частина 3]
Застосунок починає «гальмувати» через відправку email-ів чи обробку великих файлів? Користувачі дивляться на лоадер довше, ніж на власне життя? Час виносити важкі завдання у фонові черги.
#codica_advice
Ось 3 популярні інструменти для асинхронного виконання завдань у Rails👇
📌 Sidekiq
Багатопотоковий процесор завдань на базі Redis. Золотий стандарт індустрії для високонавантажених та продуктивних систем.
📌 GoodJob
Інструмент для фонових завдань прямо в PostgreSQL. Дозволяє працювати без Redis і тримати все в єдиній базі даних.
📌 Solid Queue
• Сучасний офіційний бекенд для Active Job від команди Rails, який став рішенням за замовчуванням в Rails 8.
А який бекенд для Active Job зараз крутиться у ваших проєктах?
TikTok | Instagram | Telegram
👍2
Друзі, наша щира рекомендація! І одразу головний спойлер: участь повністю безкоштовна! 🙌
Організатори AI HOUSE та SQUAD збирають 30 найкрутіших AI/ML-спеціалістів, щоб вивезти їх в Карпати на 6 днів технічного інтенсиву.
Що там буде:
- AI-челенджі: робота в командах по 3–4 людини над прикладними інженерними задачами.
- Менторство: з вами працюватимуть досвідчені фахівці, а завершиться все фінальним Demo Day.
- Перезавантаження: вечірнє багаття, походи в гори та затишний нетворкінг.
Найкраща частина: організатори покривають проживання, харчування та трансфер! Від вас потрібен лише благодійний донат (від 1 000 грн) на підтримку «Реактивної Пошти», яка допомагає нашій артилерії.
Якщо ти AI/ML Engineer, Data Scientist, Researcher або Developer — це той самий знак, на який ти чекав. Прокачати скіли, знайти однодумців та побути в горах.
🔗 [Посилання на реєстрацію]
Подавайте заявки самі або пересилайте колегам, яким це актуально! Погнали? 🔥
TikTok | Instagram | Telegram
Організатори AI HOUSE та SQUAD збирають 30 найкрутіших AI/ML-спеціалістів, щоб вивезти їх в Карпати на 6 днів технічного інтенсиву.
Що там буде:
- AI-челенджі: робота в командах по 3–4 людини над прикладними інженерними задачами.
- Менторство: з вами працюватимуть досвідчені фахівці, а завершиться все фінальним Demo Day.
- Перезавантаження: вечірнє багаття, походи в гори та затишний нетворкінг.
Найкраща частина: організатори покривають проживання, харчування та трансфер! Від вас потрібен лише благодійний донат (від 1 000 грн) на підтримку «Реактивної Пошти», яка допомагає нашій артилерії.
Якщо ти AI/ML Engineer, Data Scientist, Researcher або Developer — це той самий знак, на який ти чекав. Прокачати скіли, знайти однодумців та побути в горах.
🔗 [Посилання на реєстрацію]
Подавайте заявки самі або пересилайте колегам, яким це актуально! Погнали? 🔥
TikTok | Instagram | Telegram
🔥2
Друзі, всім глибокого та змістовного вихідного 🇺🇦
#codica_weekend
Сьогодні — підбірка, яка точно не залишить байдужим 👇
➡️ Голодомор: геноцид українського народу
Глибока розмова з дослідником про одну з найболючіших тем нашої історії .
⏱ Тривалість — 66 хв
➡️ Коли з’явилась українська мова, як говорили на Русі, мовні каліки з СРСР
Про мову без міфів: звідки вона, як її змінювали і чому сьогодні це важливіше, ніж здається.
⏱ Тривалість — 60 хв
➡️ Справжня історія козаків в XVI–XVII ст.
Козаки — система, політика і навіть дипломатія, яка виглядає значно складніше, ніж нас вчили.
⏱ Тривалість — 80 хв
➡️ Василь Стус. Україна і вибір долі — лекція Віталія Портникова
Про моральний вибір, який формує цілу націю — і чому ці питання досі актуальні.
⏱ Тривалість — 79 хв
Нехай ці вихідні будуть не тільки про відпочинок, а й про розуміння себе і свого коріння 💛
TikTok | Instagram | Telegram
#codica_weekend
Сьогодні — підбірка, яка точно не залишить байдужим 👇
➡️ Голодомор: геноцид українського народу
Глибока розмова з дослідником про одну з найболючіших тем нашої історії .
⏱ Тривалість — 66 хв
➡️ Коли з’явилась українська мова, як говорили на Русі, мовні каліки з СРСР
Про мову без міфів: звідки вона, як її змінювали і чому сьогодні це важливіше, ніж здається.
⏱ Тривалість — 60 хв
➡️ Справжня історія козаків в XVI–XVII ст.
Козаки — система, політика і навіть дипломатія, яка виглядає значно складніше, ніж нас вчили.
⏱ Тривалість — 80 хв
➡️ Василь Стус. Україна і вибір долі — лекція Віталія Портникова
Про моральний вибір, який формує цілу націю — і чому ці питання досі актуальні.
⏱ Тривалість — 79 хв
Нехай ці вихідні будуть не тільки про відпочинок, а й про розуміння себе і свого коріння 💛
TikTok | Instagram | Telegram
❤3
Англійська за мемами😜
👉 Говоримо красиво
📍 ancient — давній, стародавній
📍 skull — череп
📍 origins — походження, джерело
#codica_english
TikTok | Instagram | Telegram
👉 Говоримо красиво
📍 ancient — давній, стародавній
📍 skull — череп
📍 origins — походження, джерело
#codica_english
TikTok | Instagram | Telegram
😁6
Ранковий мемчик в студію! 😜
Заряджаємось на гарний день, друзі! ☕️
#codica_humor
TikTok | Instagram | Telegram
Заряджаємось на гарний день, друзі! ☕️
#codica_humor
TikTok | Instagram | Telegram
😁4👏1
🎯 10 питань, які часто “валять” Ruby dev-ів на співбесідах
#codica_interviews
Друзі, ми час від часу публікуємо питання які задають на співбесідах, але якщо рухатися далі — є ще один рівень.
Є питання, які дуже люблять задавати Senior інтерв’юери, тому що вони добре показують не просто знання синтаксису, а глибину розуміння Ruby та Rails.
Саме такі питання часто стають моментом, коли співбесіда переходить із “кандидат знає Ruby” → до “кандидат дійсно розуміє, як працює Ruby”.
#codica_interviews
Друзі, ми час від часу публікуємо питання які задають на співбесідах, але якщо рухатися далі — є ще один рівень.
Є питання, які дуже люблять задавати Senior інтерв’юери, тому що вони добре показують не просто знання синтаксису, а глибину розуміння Ruby та Rails.
Саме такі питання часто стають моментом, коли співбесіда переходить із “кандидат знає Ruby” → до “кандидат дійсно розуміє, як працює Ruby”.
❤3🔥1
Ми зібрали 10 таких питань, які регулярно з’являються на співбесідах.
Перевіримо, чи готові ви до них? 👇
📌 1. What is the difference between
📌 2. What happens when you use
📌 3. What is the difference between
📌 4. How does Ruby garbage collection work?
Ruby використовує mark-and-sweep garbage collector.
Алгоритм:
1️⃣ знаходить об'єкти, на які ще є посилання
2️⃣ видаляє об'єкти, на які більше ніхто не посилається
📌 5. What is method lookup chain in Ruby?
Ruby шукає метод у такому порядку:
1️⃣ singleton class
2️⃣ class
3️⃣ included modules
4️⃣ superclass
5️⃣ Object → Kernel → BasicObject
📌 6. What is the difference between
📌 7. What are Ruby singleton methods?
Це методи, які належать конкретному об’єкту, а не всьому класу.
📌 8. What is the difference between symbol and string in terms of memory?
Тому symbols часто використовують як keys у hash.
📌 9. What are Rails callbacks and why can they be dangerous?
Callbacks — це методи, які виконуються під час lifecycle моделі.
Наприклад:
Проблема: вони можуть ускладнювати логіку і створювати приховані side-effects.
📌 10. What is the difference between
💬 А тепер чесно:
на якому з цих питань ви б задумались на співбесіді? 😄
TikTok | Instagram | Telegram
Перевіримо, чи готові ви до них? 👇
📌 1. What is the difference between
dup and clone in Ruby?dup копіює об'єкт без singleton methodsclone копіює об'єкт разом із singleton methods і frozen state📌 2. What happens when you use
include vs extend in Ruby modules?include додає методи модуля як instance methodsextend додає методи модуля як methods конкретного об'єкта або класу📌 3. What is the difference between
class_eval and instance_eval?class_eval додає instance methods до класуinstance_eval виконує код у контексті singleton class об'єкта📌 4. How does Ruby garbage collection work?
Ruby використовує mark-and-sweep garbage collector.
Алгоритм:
1️⃣ знаходить об'єкти, на які ще є посилання
2️⃣ видаляє об'єкти, на які більше ніхто не посилається
📌 5. What is method lookup chain in Ruby?
Ruby шукає метод у такому порядку:
1️⃣ singleton class
2️⃣ class
3️⃣ included modules
4️⃣ superclass
5️⃣ Object → Kernel → BasicObject
📌 6. What is the difference between
load, require, and require_relative?require — завантажує файл один разload — виконує файл кожного разу при викликуrequire_relative — завантажує файл відносно поточного файлу📌 7. What are Ruby singleton methods?
Це методи, які належать конкретному об’єкту, а не всьому класу.
obj = "hello"
def obj.shout
upcase
end
📌 8. What is the difference between symbol and string in terms of memory?
String створює новий об'єкт у памʼятіSymbol існує в одному екземпляріТому symbols часто використовують як keys у hash.
📌 9. What are Rails callbacks and why can they be dangerous?
Callbacks — це методи, які виконуються під час lifecycle моделі.
Наприклад:
before_saveafter_createПроблема: вони можуть ускладнювати логіку і створювати приховані side-effects.
📌 10. What is the difference between
before_action and around_action?before_action виконується перед controller actionaround_action обгортає виконання action
around_action :wrap
def wrap
puts "before"
yield
puts "after"
end
💬 А тепер чесно:
на якому з цих питань ви б задумались на співбесіді? 😄
TikTok | Instagram | Telegram
🔥6