Как стать автором
Обновить
0
0
Leonid Kudrik @LeoKudrik

Программист

Отправить сообщение

Уделите внимание токенизаторам — и вот почему

Время на прочтение12 мин
Количество просмотров2.7K

На прошлой неделе я помогал одному другу пустить одно его новое приложение в свободное плавание. Пока не могу особенно об этом распространяться, но упомяну, что это приложение, конечно же, сдобрено искусственным интеллектом — сегодня этим не удивишь. Может быть, даже изрядно сдобрено, в зависимости от того, к чему вы привыкли.

В большинстве современных приложений с ИИ в той или иной форме внедрена технология RAG (генерация с дополненной выборкой). Сейчас она у всех на слуху — о ней даже написали страницу в Википедии! Не знаю, ведёт ли кто-нибудь статистику, как быстро термин обычно дозревает до собственной статьи в Википедии, но термин RAG определённо должен быть где-то в топе этого рейтинга.

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

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

За последние пару лет я успел заметить одну выраженную черту разработчиков, привыкших действовать в области традиционного (детерминированного) программирования: им очень сложно перестроиться на осмысление задач в статистическом контексте, а именно так и следует подходить к программированию приложений с большими языковыми моделями, суть которых — это статистика. Статистика «хаотичнее» традиционной информатики и подчиняется иным правилам, нежели алгоритмы обычной computer science. К чему я клоню: статистика — это по-прежнему математика, но очень своеобразная математика.  

Читать далее
Всего голосов 6: ↑6 и ↓0+9
Комментарии2

Асинхронный SQLAlchemy 2: улучшение кода, методы обновления и удаления данных

Время на прочтение20 мин
Количество просмотров1.9K

Третья статья цикла по асинхронному SQLAlchemy 2 посвящена оптимизации кода, обновлению и удалению данных. Рассмотрены улучшения базового класса, подходы к обновлению записей и методы удаления, с акцентом на повышение производительности. Нажмите «Читать», чтобы ознакомиться с материалом.

Читать далее
Всего голосов 7: ↑7 и ↓0+9
Комментарии5

Марии (db) 15 лет! 15 причин чтобы её полюбить (или хотя бы с ней познакомиться)

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4K

MariaDB Server исполняется 15 лет! Вот 15 причин, по которым разработчики и администраторы баз данных любят его!

Читать далее
Всего голосов 17: ↑15 и ↓2+17
Комментарии5

Асинхронный Rust в трех частях. Часть первая: Futures

Время на прочтение14 мин
Количество просмотров3.3K

В введении мы посмотрели на пример асинхронного Rust без какого‑либо объяснения, как он работает. Это дало нам несколько вопросов для размышления: Что такое асинхронные функции и возвращаемые ими «future»? Что делает join_all? Чем отличается tokio::time::sleep от std::thread::sleep?

Чтобы ответить на эти вопросы нам потребуется преобразовать каждую из частей в обычный не асинхронный код Rust. Вскоре мы обнаружим, что воспроизвести foo и join_all достаточно просто, а вот со sleep ситуация чуть сложнее. Начнем же.

Читать далее
Всего голосов 21: ↑21 и ↓0+24
Комментарии3

База, которую нужно знать про JSON Schema

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров16K

Привет, Хабр!

Сегодня мы рассмотрим одну из тем, которая, как ни странно, остаётся недооценённой — JSON Schema. Если ты аналитик (или хочешь им быть) и в твоей работе часто мелькают JSON-файлы, то наверняка знаешь, как сложно порой бывает держать всё это под контролем. В этой статье мы разберём всё, что тебе нужно знать про JSON Schema.

Читать далее
Всего голосов 34: ↑30 и ↓4+36
Комментарии10

Кластеры и мир: хроника высокодоступного Pub/Sub в Redis

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров2.1K

В статье рассматриваются основные принципы и особенности использования Redis в режиме Pub/Sub для масштабируемых и высоконагруженных приложений. Описаны два подхода к обеспечению высокой доступности — Redis Sentinel и Redis Cluster, их преимущества, ограничения и примеры настройки. Приведены примеры использования Pub/Sub в реальных системах, а также практические конфигурации и код для настройки отказоустойчивого кластера Redis. Статья предназначена для разработчиков, которые ищут решения для создания надежных систем обмена сообщениями с высокой производительностью и отказоустойчивостью.

Читать далее
Всего голосов 8: ↑8 и ↓0+12
Комментарии8

Почему многие пользуются древними версиями Postgres?

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров15K

Postgres 17.0 уже вышла, и она замечательная, но реальность такова: большинство пользователей Postgres не выполняют апгрейд сразу же. Многие, вероятно, сейчас даже не на 16.4, и даже не на 16, они пользуются Postgres 15 или ещё более старой версией. Ситуация с Postgres не такая же, как с новыми Call of Duty, когда каждый хочет скачать обновление сразу же после его выхода.

Почему же люди так неохотно идут на апгрейд?

На то есть множество причин, но всё сводится к двум основным: качество работы Postgres и неудобство апгрейдов.
Читать дальше →
Всего голосов 35: ↑33 и ↓2+44
Комментарии52

Rust IPC Ping-Pong

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров1.9K

На работе наша команда недавно столкнулась с необходимостью в высокопроизводительном IPC в Rust. Поиск привел нас к содержательной статье от 3tilley «IPC in Rust — a Ping Pong Comparison», что стало превосходной отправной точкой в нашем исследовании.

Вдохновляясь этой работой, мы решили копнуть глубже и провести собственные замеры производительности, в особенности нас интересовал новый многообещающий фреймворк iceoryx2. Взяв за основу работу в исходной статье, мы будем использовать UNIX Domain Sockets (как stream, так и datagram), Memory Mapped Files и Shared Memory с использованиемiceoryx2 для сравнения производительности IPC между процессами на одной машине для различных размеров пэйлоада.

Читать далее
Всего голосов 13: ↑13 и ↓0+18
Комментарии1

Дизайн и реализация виртуальной машины CPython

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров6.9K

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

В этой статье мы обсудим формат инструкций байт‑кода CPython, а также реализацию цикла обработки байт‑кода в интерпретаторе, где он и исполняется.

Читать далее
Всего голосов 22: ↑22 и ↓0+30
Комментарии2

Микросервисы (Microservices)

Время на прочтение22 мин
Количество просмотров696K
От переводчика: некоторые скорее всего уже читали этот титанический труд от Мартина Фаулера и его коллеги Джеймса Льюиса, но я все же решил сделать перевод этой статьи. Тренд микросервисов набирает обороты в мире enterprise разработки, и эта статья является ценнейшим источником знаний, по сути выжимкой существующего опыта работы с ними.

Термин «Microservice Architecture» получил распространение в последние несколько лет как описание способа дизайна приложений в виде набора независимо развертываемых сервисов. В то время как нет точного описания этого архитектурного стиля, существует некий общий набор характеристик: организация сервисов вокруг бизнес-потребностей, автоматическое развертывание, перенос логики от шины сообщений к приемникам (endpoints) и децентрализованный контроль над языками и данными.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии45

Как мы заработали 250 000 руб, запустив ИИ приложение для обучения математике в США

Время на прочтение5 мин
Количество просмотров17K

Что мы поняли, запустив за 1 месяц простое приложение, которое обучает решению задач по математике в США. И как вышли на +$1200/месяц спустя 4 месяца после запуска.

Читать далее
Всего голосов 46: ↑36 и ↓10+33
Комментарии87

SQLAlchemy 2.0 для новичков

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров8.7K

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

Предполагается, что вы знакомы с базовым синтаксисом языка Python и, возможно, новичок в программировании.

Читать далее
Всего голосов 14: ↑10 и ↓4+8
Комментарии6

Как создать игру PUBG: Battlegrounds в Roblox (ПАБГ) – 12 уроков

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров1.5K

Предлагаем разобраться, как сделать ПАБГ в Роблоксе. Это популярная игра в жанре батл рояль (battle royale), в которую любят играть современные дети и подростки. Если вы в их числе, изучите представленную бесплатную инструкцию и видео: они помогут понять, как сделать клон PUBG в Roblox.

Мы пройдем весь путь от создания ландшафта до моделирования различных объектов (ангара, вышек, домов, гаража, внутренней части самолета и т. д.) и оформления дополнительных карт. Поделимся скриптами на Lua для таблицы игроков, телепорта, прыжка с парашютом, перемещения между картами, открытия и закрытия дверей, брони и т. д.

Сразу отметим, что текстовый гайд сложно воспринимать без минимальных знаний и опыта, но переживать не стоит: в каждом разделе есть ролик с подробными пояснениями от преподавателя. Благодаря им создание Battlegrounds в Роблоксе можно заметно упростить. Также подчеркнем, что работать быстро не удастся: каждый новый шаг потребует усидчивости и вдумчивости.

А теперь предлагаем приступить к сути без лишних отступлений.

Читать далее
Всего голосов 15: ↑13 и ↓2+13
Комментарии0

Современная Lakehouse-платформа данных Data Ocean Nova

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров2.7K

Привет. Меня зовут Евгений Вилков. Я занимаюсь системами управления и интеграции данных с 2002 г., а конкретно системами анализа и обработки данных — с 2007 г. Технологии, с которыми я имел дело на протяжении моего профессионального пути, стремительно развивались. Начиная с решений, основанных на стеке традиционных СУБД, таких как Oracle, MS SQL Server, Postgres, постепенно эволюционируя в ставшие уже классическими (а некоторые даже и закрытыми) MPP-системы, такие как Teradata, GreenPlum, Netezza, Vertica, IQ, HANA, Exadata, ClickHouse, в различные решения на базе экосистемы Hadoop, облачные сервисы и платформы. Меняется мир, меняются технологии, меняются подходы к проектированию, меняются и требования к задачам аналитического ландшафта данных.

Уверен, что многие, кто уже знаком с терминами Data Mesh и Data Lakehouse, задаются вопросом: что может предложить рынок аналитических систем в этих методологиях проектирования и архитектурных подходах. Я хочу рассказать об аналитической платформе данных Data Ocean Nova, владельцем и технологическим идеологом которой я являюсь.

Читать далее
Всего голосов 10: ↑9 и ↓1+11
Комментарии0

Почему микросервисы лучше компонент или как деградируют идеи в IT

Время на прочтение7 мин
Количество просмотров15K

Попробуем начать с цитаты:

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

...

Традиционно приложение состояло из отдельных файлов, модулей или классов, которые компилировались и компоновались в единое целое. Разработка приложений из микросервисов — так называемых приложений микросервисной архитектуры — происходит совершенно иначе. Микросервис подобен миниприложению; он поставляется пользователю как двоичный код, скомпилированный и готовый к использованию. Единого целого больше нет. Его место занимают специализированные микросервисы, которые подключаются во время выполнения к другим микросервисам, формируя приложение. Модификация или расширение приложения сводится просто к замене одного из составляющих его микросервисов новой версией.

Если интересно откуда эта цитата и что с ней не так прошу под кат.

Читать далее
Всего голосов 23: ↑17 и ↓6+16
Комментарии72

Слои, Луковицы, Гексогоны, Порты и Адаптеры — всё это об одном

Время на прочтение4 мин
Количество просмотров58K
Перевод статьи Mark Seemann о популярных архитектурах разработки ПО и о том, что между ними общего.

Один из моих читателей спросил меня:
Вернон, в своей книге «Implementing DDD» много говорит об архитектуре Порты и Адаптеры, как о более продвинутом уровне Слоистой Архитектуры. Хотелось бы услышать ваше мнение на этот счёт.
Если не вдаваться в детали, то в своей книге я описываю именно этот архитектурный паттерн, хотя никогда не называю его этим именем.

TL;DR Если применить принцип инверсии зависимостей к слоистой архитектуре, то в конечном счете получим Порты и Адаптеры.
Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии9

Ubiquitous Language и Bounded Context в DDD

Время на прочтение3 мин
Количество просмотров57K

Domain-Driven Design: Tackling Complexity in the Heart of Software Эванса — лучшая книга о проектировании действительно больших enterprise-приложений, что я читал. Видимо это мнение разделяют многие другие разработчики и проектировщики, потому что Entity и ValueObject, Repository и Specification встречаются почти в каждой большой кодовой базе. Но вот незадача, Ubiquitous Language (единый язык) и Bounded Context (контекст предметной области) в чужом коде я не видел ни разу. И здесь зарыта очень большая собака.
Выкапываем собаку
Всего голосов 23: ↑16 и ↓7+9
Комментарии42

Domain Driven Design на практике

Время на прочтение12 мин
Количество просмотров277K
Эванс написал хорошую книжку с хорошими идеями. Но этим идеям не хватает методологической основы. Опытным разработчикам и архитекторам на интуитивном уровне понятно, что надо быть как можно ближе к предметной области заказчика, что с заказчиком надо разговаривать. Но не понятно как оценить проект на соответствие Ubiquitous Language и реального языка заказчика? Как понять, что домен разделен на Bounded Context правильно? Как вообще определить используется DDD в проекте или нет?

Последний пункт особенно актуален. На одном из своих выступлений Грег Янг попросил поднять руки тех, кто практиукует DDD. А потом попросил опустить тех, кто создает классы с набором публичных геттеров и сеттеров, располагает логику в «сервисах» и «хелперах» и называет это DDD. По залу прошел смешок:)

Как же правильно структурировать бизнес-логику в DDD-стиле? Где хранить «поведение»: в сервисах, сущностях, extension-методах или везде по чуть-чуть? В статье я расскажу о том, как проектирую предметную область и какими правилами пользуюсь.
Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии18

Немного про DDD: Реализация событий предметной области в .NET

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров8.1K

Всем привет! Предметно-ориентированное проектирование, на мой взгляд, является недопонятым подходом, о котором многие говорят, но немногие его действительно применяют.

Одним из относительно простых в реализации и полезных в архитектурном смысле паттернов, на мой взгляд, являются события предметной области (Domain Events). В данной статье я бы хотел рассказать о возможных вариантах реализации этого шаблона DDD с использованием .NET.

Читать далее
Всего голосов 11: ↑10 и ↓1+14
Комментарии34

LINUX + FL Studio + платные VST (32+64)

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров9.5K

Я смог запустить FL Studio и любые VST плагины в GNU Linux, при этом экранировав всё это дело от основной системы! Теперь я могу безопасно писать музыку, играть на гитаре с крутыми эффектами и крутить баст-бустед звуки друзьям в Дискорд и Телеграм. Хотите так же, но не проходя через боль и не теряя столько же времени и нервов, сколько потерял я?

Установить FL Studio на Linux
Всего голосов 20: ↑19 и ↓1+19
Комментарии19
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность