Обновить
4
0

Разработчик

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

Сравнительный анализ эффективности планировщиков СУБД при выполнении различных запросов

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

Когда мы пишем запрос, СУБД делает гораздо больше, чем просто ищет данные. Она оценивает десятки сценариев выполнения, сравнивает стоимость операций и выбирает оптимальный путь к результату. От этого выбора зависит, будет ли запрос выполняться секунду или минуту. Почему одни системы находят лучший план, а другие выстраивают менее эффективный алгоритм? Попробуем разобраться, как планировщики СУБД принимают решения и что определяет их эффективность.

Читать далее

Идеи потерявшие смысл: Scrum и ООП

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели42K

Когда хорошая идея становится популярной - все начинают пересказывать её "как поняли". В итоге в информационном поле от изначальной идеи остаётся настолько мало, что её перестают воспринимать всерьёз. В этой статье я хочу рассказать о двух таких идеях: Scrum и ООП

Читать далее

Когда State уже не спасает: путь к Statechart

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

В мире разработки программного обеспечения управление состоянием объекта - одна из фундаментальных задач. Когда поведение объекта должно меняться в зависимости от его внутреннего состояния, разработчики часто обращаются к паттерну State. Однако здесь и возникает путаница: его нередко отождествляют с более общей концепцией — State Machine (Конечный автомат), а то и вовсе не видят разницы.

Погрузимся в мир управления состояниями — от простого к сложному!

Читать далее

Разработка высоконагруженных API: проблемы, решения, практические рекомендации

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели26K

Ваш проект взлетел. Первые пользователи превратились в тысячи. Тысячи стали десятками тысяч. Метрики в дашбордах рисуют красивую кривую, устремленную вверх. Но есть и другие кривые, которые ползут вверх с не меньшей скоростью. Время ответа сервера. Количество ошибок 502 и 504.

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

Читать далее

Решето дельт — простой способ раскладывать числа на множители, о котором вам не рассказывали

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.2K

Что вы скажете, если я расскажу вам, что знаю метод разложения чисел на множители, который не так сложен, как алгоритмы QS и GNFS, основывается не на магии, а на логике и простых арифметических принципах, легко реализуется, его легко распараллелить для ускорения вычислений, он не требует много памяти и при этом зачастую в разы эффективнее метода Ферма́? Заинтересовало?

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

Примеры, объяснения, таблицы — всё на месте. Даже если вы забыли, что такое \bmod, вы всё равно поймёте, как это работает.

Читать далее

Как построить надежную архитектуру B2B-системы на основе 1С

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели1.7K

Здравствуйте! Меня зовут Дмитрий Гусаков, я менеджер проектов компании DD Planet. В своей статье я расскажу, почему нельзя использовать 1С как полноценный бэкенд в современных B2B-системах, с какими ограничениями могут сталкиваться разработчики, и как выстроить надёжную структуру, используя дополнительный слой бэкенда и брокеры сообщений.

В России существует острый дефицит отечественных продуктов для автоматизации бизнеса. 1С — один из немногих российских игроков на этом рынке. В условиях активного импортозамещения он стал основным кандидатом на замену западных систем, вроде Oracle CRM, ERP SAP и все больше российских компаний переходят на эту платформу. Однако сам по себе этот переход не решает всех проблем.

Читать далее

Путь от Кода до Бинарного Файла

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели3K

Как же исходный код превращается в бинарный файл, который потом исполняется на компьютере? Не нашёл ни одной статьи, которая описывала бы полный процесс от начала до конца, поэтому я написал данный материал.

Читать далее

Вынос товарных остатков из 1С в микросервис

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели4.2K

Рив Гош – это одна из крупнейших розничных сетей косметики и парфюмерии. Мы представлены в нескольких каналах продаж: офлайн-магазины, собственный интернет-магазин и все ведущие маркетплейсы.

Каждый канал продаж индивидуален, но все они требуют онлайн информацию об остатках: В офлайн-магазине на кассе мы предлагаем клиенту товар по акции. Причем предлагаем только товар, аналогичный выбранному клиентом, который есть в остатках этой локации. В собственном интернет-магазине есть опция получения товара в магазине сети Ривгош или заказать экспресс-доставку из магазина. Маркетплейсам вообще нужна максимально актуальная информация об остатках – любой отказ от заказа клиента влечет штрафы и снижение рейтинга.

Откуда же эту информацию мы можем выдать? Достоверная оперативная информация о товарных остатках в Рив Гош распределена по разным OLTP системам: часть магазинов в современной централизованной 1С ERP управление холдингом, остальные магазины – в специализированных базах Oracle, распределительные центры – в 1С УПП. Единого оперативного хранилища нет.

Чтобы централизованно выдать остатки, шине данных приходилось последовательно пробегаться по базам данных всех магазинов, агрегировать их и консолидировано выдавать их внешним потребителям этих данных. Магазинов много, и на их последовательно-параллельную обработку уходило порядка 3х часов. Такая задержка с обновлением остатков вызывала много ложных заказов: клиент заказывает товар, товаровед идет его собирать с полок магазина и не находит. Клиент получает отказ, а значит мы теряем рейтинг на маркетплейсах и клиентскую удовлетворенность. Надо было что-то делать.

Читать далее

Структурный дизайн. Древний секрет простого и быстрого кода

Уровень сложностиСредний
Время на прочтение30 мин
Охват и читатели8.3K

Я пишу коммерческий код с 2005 года и с 2014 года ищу способ систематически писать хороший код.

В рамках этих поисков я изучил всю популярную литературу о хорошем коде и его дизайне — от «Чистого кода» Анкл Боба до «DDD» Эрика Эванса. Однако все популярные подходы в значительной степени субъективны: они не дают объективного и последовательного судьи, который бы решал, какой код лучше.

Например, в чистом коде я до сих пор не знаю способа за конечное время дать ответ на вопрос «Сколько уровней абстракции в этой функции?». А если взять DDD — то я до сих пор не знаю способа, который бы позволял стабильно и за конечное время находить границы между ограниченными контекстами (прошу прощения за каламбур) или агрегатами.

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

Отчаявшись научиться писать стабильно хороший объектно‑ориентированный код, в 2016 году я пошёл в сторону функционального программирования и архитектуры. Там с детерминированностью было получше: если в коде нет побочных эффектов (ввода‑вывода, оператора присваивания и чтения глобальных переменных) — то код хороший, если есть — плохой. Однако как затащить в коммерческий проект и, главное, собственную голову свободные монады и их интерпретаторы — я так и не понял.

Поэтому в 2020 году поиски своего Святого Грааля я продолжил в «эзотерических» и древних книгах. Одной из таких книг стал «Структурный дизайн» Ларри Константина. И в этой книге я, наконец, нашёл простой и понятный принцип, который лёг в основу моего текущего подхода к проектированию и кодированию, и для которого можно быстро и однозначно дать ответ, соответствует ли тот или иной кусочек кода этому принципу или нет.

В этом посте я даю краткий экскурс в идею сбалансированной формы системы из структурного дизайна и рассказываю на примере трёх кейсов о результатах применения этой идеи в моей коммерческой практике.

Читать далее

Синтаксический анализатор на стеках и lambda-выражениях (Axolotl)

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели789

Синтаксический анализатор на стеках и lambda-выражениях (Axolotl)

В этой статье рассматривается практическая реализация синтаксического анализатора, основанного на стеке состояний и lambda-выражениях. Такой подход упрощает обработку синтаксиса, делая его гибким и легко масштабируемым. В статье описана архитектура анализатора, от лексического анализа до правил обработки состояний и обработки ошибок. Обсудим, как использовать состояния для синтаксического анализа ключевых конструкций и продемонстрируем простые, но эффективные методы для управления состояниями. Эта реализация — отличный выбор для быстрого прототипирования и собственных учебных языков.

Читать далее

Синтаксический анализатор — модифицированный Shunting Yard

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели801

Алгоритм синтаксического анализа кода на основе Shunting Yard

Преимущество модифицированного Shunting Yard над рекурсивным спуском заключается в его способности эффективно работать с более сложными синтаксическими конструкциями и грамматиками, которые не поддерживаются рекурсивным спуском. Благодаря использованию стеков для управления состояниями и операторами, алгоритм избегает проблем с глубокой рекурсией и может обрабатывать конструкции, требующие динамического изменения контекста. Это делает его более универсальным и производительным решением для построения абстрактного синтаксического дерева (AST) без ограничений на тип грамматик, характерных для рекурсивного спуска.

Читать далее

Применение обобщённой свёртки для обработки синтаксических деревьев

Время на прочтение16 мин
Охват и читатели4.4K

Привет, Хабр! В статье я покажу, как представить синтаксические деревья с помощью фиксированной точки для функторов. Такое представление позволяет снабжать каждый лист дерева дополнительной информацией о самом листе (например позицией выражение в файле с программой), при этом непосредственно перед обработкой листа мы можем убрать из него эту информацию. Таким образом во время обработки в конструкторах синтаксического дерева будут находиться только необходимые данные, что позволяет писать более чистый код для его обработки. К концу статьи мы напишем интерпретатор для простого императивного языка программирования, на примере которого будет показано всё вышеперечисленное

Читать далее

Архитектура архитектуры архитектора

Время на прочтение6 мин
Охват и читатели25K

Архитектор – это звучит… Звучит как-то не понятно. Наверное, поэтому всегда добавляют что-то. Ну типа «системный архитектор» или там «программный архитектор». Не то чтоб так стало понятно, что он делает, но точно кто-то важный. Я вообще пишу «архитектор информационных систем и программного обеспечения». Это ж как назовёшься -так и поплывешь! С архитекторами тут вообще такое дело – это как бы и не профессия. Ведь архитектором как стать? Либо тебя назовут таковым, либо сам назовёшься. Другого пути нет. Ни школы, ни спец. образования, никаких то там универсальных сертификатов нету. Только название и есть.

А раз оно есть – значит зачем-нибудь нужно! А нужно чтоб как-то указать на необходимость главного элемента мозаики – архитектуры. А раз нужен элемент, то за него, конечно, должен кто-то да отвечать. А раз должен, то вот и появляется такая должность.

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

Чтоб избежать проверенного классического сценария «много, дорого, бестолково» нужны ориентиры. Пунктир намеченного пути на карте требований и функционала. Это не красота и элегантность рисунков Леонардо, и не лабиринты цвета Поллока. Архитектура вообще не про искусство. Нет, все любят, когда красиво. Вот я бы строил дом, тоже бы хотел не бетонную коробку, а чтоб в вечность. Но у вечности, однако свои расценки. Так что даже Джи-мэн с кейсом полным золота хочет хайп и тренды, но строго в бюджет. Архитектура даёт парадигму.

Читать дальше и дальше

Онлайн-чеки по федеральной сети посредством RabbitMQ, 1С и черной магии

Время на прочтение10 мин
Охват и читатели13K

В прошлом году к нам обратился ИТ-директор одного из крупнейших аграрно-промышленных холдингов в России. Подход к бизнесу, который реализовал наш клиент, был впечатляющим. Он одним из первых реализовал идею предприятия полного цикла – от поля до полки в продуктовом магазине. Благодаря доступности и высокому качеству продукции этот холдинг стал признанным брендом, который знают и выбирают. В тот момент в холдинг входило более 650 торговых точек и более 20 000 сотрудников, распределенных по всей территории РФ.


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


С учетом указанной специфики решение задачи превратилось в увлекательное приключение с бубном, шаманами и кроличьими лапками в лице RabbitMQ. Как мы строили федеративный кластер очередей и с чем столкнулись – под катом.

Читать дальше →

Как перестать бояться и полюбить синтаксический анализ?

Время на прочтение13 мин
Охват и читатели17K
Как часто, программируя очередную бизнес-фичу, вы ловили себя на мысли: есть же на Земле люди, которые пишут базы данных, распознают лица на фотографиях, делают фреймворки и реализуют интересные алгоритмы. Почему в моей работе всё сводится к перекладыванию из одной таблицы БД в другую, вызову http-сервисов, верстке html-формы и прочей «бизнес-лапше»? Может быть я занимаюсь чем-то не тем или работаю не в той компании?


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

Недавно мы написали синтаксический анализатор языка запросов 1С и его транслятор в обычный SQL. Это позволило нам выполнять запросы к 1С без участия 1С :) Минимальная рабочая версия на regexp-ах получилась недели за две. Ещё месяц ушёл на полноценный парсер через грамматики, разгребание нюансов структуры БД разных 1С-объектов и реализацию специфических операторов и функций. В результате решение поддерживает практически все конструкции языка, исходный код выложен на GitHub.

Под катом мы расскажем, зачем нам это понадобилось, как удалось, а так же затронем несколько интересных технических подробностей.
Читать дальше →

Классификация с использованием муравьиного алгоритма

Время на прочтение4 мин
Охват и читатели22K
На хабре уже был рассмотрен муравьиный алгоритм, позволяющий используя простые правила решить задачу поиска оптимального маршрута. В данной статье рассмотрено применение этого алгоритма к задаче классификации.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность