Pull to refresh
74
-1
Anton Karakulov @brutto

Conceptmeister

Send message

Хороший ретрай, плохой ретрай, или История одного падения

Level of difficultyMedium
Reading time17 min
Views39K

Порой простое и очевидное решение может потянуть за собой хвост проблем в будущем. Например, добавление ретраев.

Меня зовут Денис Исаев, и я работаю в Яндекс Go. Сегодня я поделюсь опытом решения проблем с отказоустойчивостью из-за ретраев. Основано на реальных инцидентах в системе из 800 микросервисов.

Этот пост — продолжение вымышленных историй о разработчике Васе, который несколько лет назад разбирался с идемпотентностью в распределённых системах. Теперь перед ним новые задачи — получится ли справиться с ними в этот раз? Давайте узнаем.

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

Вы хочете песен? Их есть у меня! (Poison Message #2)

Reading time3 min
Views2.1K

Самое время рассмотреть “достаточно хороший” алгоритм для борьбы с Poison Message. Здесь будет уже специфика RabbitMQ и к Apache Kafka она не применима, точнее применима только частично - но это уже совсем другая история.

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

Poison Message #1

Reading time4 min
Views2.4K

Я участвую в проекте, в котором очень интенсивно используется брокер сообщений RabbitMQ. Под "очень интенсивно" я подразумеваю, что это единственный канал взаимодействия десятков сервисов - никаких вам HTTP и REST. И в этой статье мы рассмотрим понятие "Poison Message" и как с ним можно жить.

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

Что делает ChatGPT… и почему это работает?

Level of difficultyMedium
Reading time75 min
Views147K

То, что ChatGPT может автоматически генерировать что-то, что хотя бы на первый взгляд похоже на написанный человеком текст, удивительно и неожиданно. Но как он это делает? И почему это работает? Цель этой статьи - дать приблизительное описание того, что происходит внутри ChatGPT, а затем исследовать, почему он может так хорошо справляться с созданием более-менее осмысленного текста. С самого начала я должен сказать, что собираюсь сосредоточиться на общей картине происходящего, и хотя я упомяну некоторые инженерные детали, но не буду глубоко в них вникать. (Примеры в статье применимы как к другим современным "большим языковым моделям" (LLM), так и к ChatGPT).

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

Нормальные числа. Эпизод II: атака де Брёйна

Reading time7 min
Views14K
Добрый день, любезные хабражители. Как, быть может, некоторые из вас помнят, в предыдущем посте я грозился показать, как конструируется нормальное число, доказательство нормальности которого возможно провести элементарными средствами. К сожалению, у меня целый месяц не было возможности написать этот пост вследствие неожиданного перехода моего аккаунта в режим рид-онли. Однако теперь я вернулся, так сказать, отдохнувшим и могу приступить к выполнению обещания.

Если вы знаете, что такое нормальные числа, и вам интересно, как их строить — пожалуйте под кат. Если вы не знаете, что такое нормальные числа — прочитайте предыдущую статью (ссылка выше), затем пожалуйте под кат. Если же вам неинтересно, как строить нормальное число — всё равно пожалуйте под кат, потому что там я буду рассказывать про циклы де Брёйна, которые сами по себе очень интересные штуки.

image

А вот, собственно, и кат
Total votes 27: ↑26 and ↓1+25
Comments6

Неперсонализированные рекомендации: метод ассоциаций

Reading time5 min
Views20K
Персональные рекомендации позволяют познакомить пользователя с объектами, о которых он, возможно, никогда не знал (и не узнал бы), но которые могут ему понравиться с учетом его интересов, предпочтений и поведенческих свойств. Однако, часто пользователь ищет не новый объект, а, к примеру, объект A похожий на объект B («Форсаж 2» похож на «Форсаж»), или объект A, который приобретается/потребляется с объектом B (сыр с вином, пиво с детским питанием, гречка с тушенкой и т.д.). Построить такие рекомендации позволяют неперсонализированные рекомендательные системы (НРС).


Рекомендовать похожие/сопутствующие объекты можно, ориентируясь на знания об объектах (свойства, теги, параметры) или на знания о действиях, связанных с объектами (покупки, просмотры, клики). Преимуществом первого способа является то, что он позволяет достаточно точно определить похожие по свойствам объекты («Форсаж 2» и «Форсаж» — похожие актеры, похожий жанр, похожие теги, ...). Однако данный способ не сможет порекомендовать сопутствующие объекты: сыр и вино. Еще одним недостатком этого способа является тот факт, что для разметки всех объектов, доступных на сервисе, требуется не мало усилий.

В то же время почти каждый сервис логирует информацию о том, какой пользователь просмотрел/купил/кликнул какой объект. Данной информации достаточно для построения НРС, которая позволит рекомендовать как похожие, так и сопутствующие объекты.

Под катом описан метод ассоциаций, позволяющий построить неперсонализированные рекомендации, основываясь лишь на данных о действиях над объектами. Там же код на Python, позволяющий применить метод для большого объема данных.
Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments16

Строим Nested Set дерево без рекурсии

Reading time3 min
Views81K
Деревья в базах данных можно хранить тремя основными методами: Adjacency List, Matherialized Path & Nested Set. Когда мы хотим переехать с AL на NS, это можно сделать с помощью рекурсии (если БД расово верная). Но что делать в случае MySQL?
Переехать с AL на NS
Total votes 20: ↑16 and ↓4+12
Comments20

Казалось бы, простой вопрос: что такое паттерны проектирования?

Reading time6 min
Views17K
image

В индустрии разработки ПО есть ряд тем, о которых ведутся споры почти в каждой компании. Я считаю, что история паттернов проектирования — одна из них. Можно найти сколько угодно постов, статей и ответов на Quora/Stackoverflow в пользу и не в пользу паттернов проектирования. Например, на днях я наткнулся на этот старый вопрос на Quora:
«Почему сейчас программисты меньше говорят о паттернах проектирования? Какие паттерны (если они есть) все еще представляют ценность?»
Читать дальше →
Total votes 17: ↑15 and ↓2+22
Comments3

Перспективы межпланетной синхронизации времени и что будет после GPS

Reading time13 min
Views9.8K

Тема варьирования или замедления времени в космических масштабах кажется настолько фантастической, что даже на Хабре пока разобрана преимущественно в специфическом «релятивистском» ключе – например, применительно к фильму «Интерстеллар». Но соотнесение представлений о пространстве-времени в различных точках постепенно перетекает не только в научную, но и в практическую реальность. Известно, что GPS-навигация – первая широко распространённая технология, в которой принципиальную роль играют релятивистские эффекты (кстати, вот ещё отличный пост из ЖЖ). Поэтому сегодня я хотел бы разобрать, как в настоящее время видится прокладка Интернета на Луну и Марс, и как предполагается координировать GPS-навигацию и передачу данных хотя бы в рамках внутренней части Солнечной системы.    

Читать далее
Total votes 53: ↑49 and ↓4+62
Comments22

Гравицапа для межпланетных перелётов или гравитационный манёвр

Reading time9 min
Views20K

Вопрос эмиграции в последние десятилетия стоит наиболее остро. И если 40 лет назад пределом мечтаний было перебраться за океан, то в XXI веке умами овладела мечта о релокейшне на Марс, например. Однако там тоже в скором времени может стать тесно. Остаётся одна дорога — колонизация Солнечной Системы и экзопланет. Допустим, мы собрались покинуть внутреннюю область Солнечной Системы, а, если повезёт, то и совсем выбраться за её пределы. Помимо невероятных объёмов тушёнки и кислорода, необходимых для выживания в суровом Космосе, нам потребуется в разы на порядки большее количество топлива, чтобы всё это добро дотащить. И ещё столько же топлива, чтобы тащить то топливо. И ещё топливо.

И самое обидное, что скорее всего мы закончим свой век среди троянских астероидов Юпитера, померев от тоски. Потому что топлива всё равно ни на что не хватит. Однако присмотримся к нашей Солнечной системе повнимательнее. Вот те же «троянцы и греки» — не просто так столпились в точках Лагранжа L4 и L5 Юпитера. Их туда «затолкала» гравитация планеты-гиганта, не потратив ни единой капли гидразина.

Давайте же и мы применим дармовую энергию Природы для достижения благородной цели доставки полезной нагрузки в далёкий космос.
Читать дальше →
Total votes 41: ↑40 and ↓1+55
Comments11

Полезные материалы по Data Science и машинному обучению, которые помогут пройти сквозь джунгли из терминов

Level of difficultyEasy
Reading time8 min
Views24K

Привет, Хабр! Меня зовут Ефим, я MLOps-инженер в Selectel. В прошлом был автоматизатором, ML-инженером, дата-аналитиком и дата-инженером — и уже несколько лет падаю в пропасть машинного обучения и Data Science. Это буквально необъятная сфера, в которой почти нет ориентиров. Основная проблема в том, что разделов математики довольно много и все они, на первый взгляд, нужны в том же машинном обучении.

В этой статье делюсь полезными материалами, которые помогут найти и заполнить теоретические и практические проблемы и основательно подойти к своему профессиональному развитию. Добро пожаловать под кат!
Читать дальше →
Total votes 59: ↑59 and ↓0+59
Comments15

Численно решаем волновое уравнение разностной схемой

Level of difficultyMedium
Reading time10 min
Views6.9K

Для меня уравнения в частных производных -- это очень красивая история из студенчества. Почему? Это невероятно красиво. Но что особенно стало для меня захватывающим, так это то, что дифуры в широком смысле прикладной математики -- это тот самый пример, когда математика и компьютер используются вместе, чтобы представить некоторую компьютерную модель вполне реальных процессов. Как вы уже, наверное, догадались, речь пойдёт про то, как вообще можно попробовать решать дифференциальные уравнения в частных производных на компьютере. Мы попробуем это сделать на примере волнового уравнения и с использованием уже ставших привычными python, scipy и numpy. Если вы примерно помните математику, но панически боялись дифуров или они просто как-то обошли вас стороной, то добро пожаловать.

Читать далее
Total votes 20: ↑19 and ↓1+27
Comments15

Апгрейд системы для облачного гейминга: теперь с Nvidia и Moonlight

Reading time5 min
Views9.2K

Третья, заключительная часть серии, посвященной пробросу видеокарт в виртуальную машину и организации облачной игровой системы для удаленного подключения по локальной сети с различных устройств.
Читать дальше →
Total votes 22: ↑21 and ↓1+33
Comments13

Проведение A/B-тестирования: пошаговый разбор

Reading time10 min
Views42K
Это репост статьи, опубликованной на сайте dou.ua. В статье Анна Пономарева, Game Analyst в Plarium Kharkiv, делится личными наработками по проведению A/B-тестирования: описывает каждый шаг, освещает сложности и ловушки, с которыми можно столкнуться, и рассказывает об опыте их решения.

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

Ваши процессы попахивают. Как это понять и что делать?

Reading time13 min
Views21K

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

Читать далее
Total votes 42: ↑40 and ↓2+55
Comments17

Пишем GPT в 60 строк NumPy (часть 1 из 2)

Level of difficultyMedium
Reading time16 min
Views72K

В этом посте мы начнём реализацию с нуля GPT всего в 60 строках numpy. Во второй части статьи мы загрузим в нашу реализацию опубликованные OpenAI веса обученной модели GPT-2 и сгенерируем текст.
Читать дальше →
Total votes 73: ↑71 and ↓2+92
Comments33

Используем sequence в MySQL

Reading time5 min
Views12K

Хочу рассказать о том, как создать сквозной монотонно возрастающий  целочисленный id в MySQL (это называется sequence в других БД). Зачем это нужно? Например, у нас есть два вида задач для сотрудников в системе, у каждого типа задач есть свой набор атрибутов и свой жизненный цикл (набор статусов). Для того чтобы не городить огород в коде приложения для корректного чтения разных сущностей из БД и не плодить колонки с NULL проще всего разнести сущности по разным таблицам.

Читать далее
Total votes 5: ↑4 and ↓1+4
Comments16

Создание бессерверного веб-приложения AWS

Reading time5 min
Views2.8K

Благодаря бессерверным предложениям AWS повышаются возможности разработки, снижается нагрузка на управление, а развернутые приложения могут воспользоваться различными возможностями из коробки, такими как высокая доступность, производительность и оптимизация затрат.

Читать далее
Total votes 10: ↑6 and ↓4+5
Comments1

Делай нейминг как сеньор

Reading time13 min
Views115K

Это объект Pizza, там хранится инфа о латте, а заказали его в Restaurant или в Pizzeria? Неудобно? Максимально. Мы читаем код существенно больше, чем пишем. И хочется сразу понимать, что происходит, не играя в квесты «что имел в виду автор», «да как это работает» и «я снова ничего не понял». Без навыка давать хороший нейминг невозможно писать качественный и поддерживаемый код. Про нейминг говорят заодно, в рамках архитектуры и общих инженерных практик. В статье поговорим про него отдельно.

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

Читать далее
Total votes 148: ↑146 and ↓2+182
Comments221

Information

Rating
Does not participate
Location
Жуковский, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Software Architect
Lead
PHP
OOP
High-loaded systems