Как устроен пакет Django-Leaflet-Admin-List

Попросили рассказать про этот пакет, чем я и займусь.
Пакет Django-Leaflet-Admin-List позволяет добавить карту со всеми географическими объектами на странице в отображение списка в админке Django.
Попросили рассказать про этот пакет, чем я и займусь.
Пакет Django-Leaflet-Admin-List позволяет добавить карту со всеми географическими объектами на странице в отображение списка в админке Django.
Система заказов: решаем проблему конкуренции без очередей
При разработке локального маркетплейса Django, и одна из задач, с которой пришлось поработать — это система бронирования товаров при создании заказа. Согласно требованиям, система должна уметь бронировать товары за покупателем, давать ему немного времени на оплату, а потом — если он не успел — освобождать эти товары для других.
Сначала стояла «заглушка»: при каждом новом заказе «на лету» агрегировали данные из базы — проверяли, хватает ли товара на складе с учетом уже оформленных заказов. Такой подход часто используют на старте, когда нужно быстро запустить MVP. Понимали, что при росте нагрузки он не масштабируется: возможны блокировки, гонки и overbooking. Пока писали другие части системы, держали это в голове и ждали, когда дойдут руки, чтобы заменить агрегацию на более устойчивое решение. Мы рассмотрели возможные варианты, и всё свелось к двум основным подходам. Дальше расскажем, как выбирали между ними и к чему в итоге пришли.
Что будет, если использовать B-tree индекс в базе данных на столбцах, где всего пара уникальных значений несколько десятком миллионов записей? Рассмотрим, сравним и измерим эффективность на примере приема soft delete
.
А так же попробуем раскрыть особенности особенности индексации B-tree, работа планировщика. Не все, конечно, но достаточно, чтобы остались вопросы для дальнейшего изучения.
Будет полезно разработчикам BE, которые надеются найти "серебряную пулю" и решить вопросы производительности быстро и сразу ;-)
Библиотека функций к Script-fu
Готовя эту статью я интересовался, что там в других языках, что там за «дженерики»? Все языки разбирать не буду, но скажу одно: Generic function использующиеся в ЛИСПе и современные дженерики различаются как НЕБО и ЗЕМЛЯ. За дженерики в современных языках в основном ратуют строго типизированные языки, всем понятно, что писать кучу однотипного кода просто глупо. Не скажу точно, кто стоит у истоков современных «дженериков», но пожалуй одним из ранних их проявлений это ШАБЛОНЫ в С++. Почему все остальные языки типа явы и ей подобных, решили назвать свои шаблоны дженериками мне не понятно. (у меня есть язвительное замечание, что хотели как в лиспе, но получилось как всегда). Но дело в том что в ПОДОБНЫХ дженериках языки с динамической типизацией просто не нуждаются. Функция list
работает с любыми типами данных, ШАБЛОНЫ не нужны! А в С++ именно контейнеры стали основной побудительной силой использования дженериков, это просто хранилища которые хранят значения, если Си мы можем обойтись (void *) и потом привести тип к нужному, то С++ решил пойти по типобезопасному пути, ну немного "потолстев" в коде. Ну а что же там у современных его последователей?
Рассмотрим Go. Пытаясь избавиться от типа, вводят обобщённую переменную T, но понимая, что сделать то с ней ничего нельзя(кроме как хранить и выдать обратно), пытаются как то её ТИПИЗИРОВАТЬ!!! Вводят КОНТРАКТ! А что делать когда в функции надо будет делать сложение? Надо будет к этому контракту добавить ещё контракт аддитиве? а умножение? или ещё что то? в любом случае код функции БЕДЕН! именно в силу того что мы не знаем что может прилететь нам в типе Т. Я вам расскажу, что такое НАСТОЯЩИЕ ДЖЕНЕРИКИ.
Go (Golang) создан для эффективной параллельной и конкурентной работы. Его killer feature — легковесные потоки выполнения, называемые горутины (goroutines), и мощные средства синхронизации. Приглашаю разобраться подробно.
Помните ли вы о существовании goto
?
Все его ненавидят, не исключая того, что найдётся пара случаев, когда он действительно упростит жизнь. Например, выход и множества вложенных циклов,. Оставим за скобками то, почему вообще это произошло.
Но почему-то я не встречал никакого негатива насчёт throw
. А ведь это точно такая же фигня, если даже не хуже.
Работа с документами - неотъемлемая часть документооборота. Документы завершают устные переговоры между различными сторонами и подтверждают их обязанности и ответственность.
После пяти лет работы JavaScript-разработчиком, занимаясь как фронтендом, так и бэкендом, я провел последний год, осваивая Go для серверной разработки. За это время мне пришлось переосмыслить многие вещи. Различия в синтаксисе, базовых принципах, подходах к организации кода и, конечно, в средах выполнения — все это довольно сильно влияет не только на производительность приложения, но и на эффективность разработчика.
Интерес к Go в JavaScript-сообществе тоже заметно вырос. Особенно после новости от Microsoft о том, что они переписывают официальный компилятор TypeScript на Go — и обещают ускорение до 10 раз по сравнению с текущей реализацией.
Эта статья — своего рода путеводитель для JavaScript-разработчиков, которые задумываются о переходе на Go или просто хотят с ним познакомиться. Я постарался структурировать материал вокруг ключевых особенностей языка, сравнивая их с привычными концепциями из JavaScript/TypeScript. И, конечно, расскажу о "подводных камнях", с которыми столкнулся лично — с багажом мышления JS-разработчика.
В этой статье я расскажу и покажу как из любого видео на youtube можно быстро скачать аудио и транскрибировать его. И также быстро, в режиме реального времени, отредактировать полученный текст под любой формат, будь то интервью, подкаст, инструкция или целый документальный фильм. Просто следуя этому руководству вы сможете легко переводить видео с ютуба в полноценные статьи для публикации на своих сайтах без ограничений на длину видео, их количество и т. д. И все это действительно стоит копейки, а точнее несколько центов за час видеоряда с аудио.
Все говорили о микросервисах. Гибкость. Масштабируемость. Независимые команды. Звучало как мечта. Многие компании бросились распиливать свои монолиты. Разработка действительно ускорилась. Отдельные компоненты стало проще обновлять и разворачивать.
А потом сервисам понадобилось общаться. И мечта превратилась в сложную, многомерную головоломку.
Многие Java-разработчики боятся алгоритмических задач (и я один из тех, кто включается в каждую дискуссиую на тему надобности алго-собесов для бигтеха). Они кажутся чем-то из параллельной реальности: где-то там, в университетах, на LeetCode, в собеседованиях в FAANG и контестах.
Но реальность такова: если вы хотите расти — алгоритмы знать нужно или хотя бы желательно. И не только ради собесов. Они в действительности помогают мыслить как инженер: структурировать задачи, оценивать сложность, писать оптимальный код, ну и шаблонно мыслить :)
Я расскажу, как можно подойти к этому процессу системно и без боли — на основе личного опыта Java-разработчика и преподавателя.
Библиотека функций к Script-fu
Введение.
Прежде чем приступить к описанию реализации обобщённых функций, надо рассказать о основном алгоритме использующемся при выборе наиболее подходящего метода, при вызове обобщённой функции.
Наша система реализует множественное наследование, поэтому при вызове обобщённой функции надо реализовать какой то способ определяющий какой метод надо построить иерархию родителей, от которых наследуются классы объектов используемых в качестве аргументов обобщённой функции и на основе этих иерархий выбрать метод наилучшим образом подходящий для данного набора аргументов.
Команда Spring АйО провела небольшое исследование JEP 520. В Java 25 JFR (Java Flight Recorder) позволит точно отслеживать выполнение конкретных методов — без изменения исходников, без логирования и без сторонних Java-агентов.
Данная статья направлена на повышение уровня понимания принципов работы барьеров памяти, которые лежат в основе атомарных операций. Она не описывает историю и первопричины появления данного механизма, а служит объяснением основных подходов.
Идеей было донести простыми словами и примерами механизмов работы барьеров памяти, поэтому в данной статье нет углубления в синтаксис ассемблер команд или архитектур процессоров.
Привет, Хабр!
Сегодня мы рассмотрим без преувеличений один из самых недооценённых алгоритмов стандартной библиотеки — std::search
. Разберёмся, как он устроен, где реально экономит процессорные тики, а где лучше заменить его на что-то иное.
Всех постоянно интересует, как сделать Postgres быстрее, эффективнее и всё такое, но никто не задумывался, как её замедлить. Да, большинству этих людей платят за то, чтобы они повышали скорость, но ко мне это не относится. Недавно я писал более полезное руководство, и мне вдруг пришла мысль, что кто-то должен попробовать создать такую конфигурацию Postgres, которая будет настроена на максимально медленную обработку запросов. Зачем? Сложно сказать, но вот такая возникла мысль.
Привет, Хабр! Меня зовут Дмитрий, я работаю в компании Orion soft. Преимущественно занимаюсь проектированием и разработкой бэкендов различного уровня от низкоуровневых сервисов до масштабируемых API. Сегодня мои основные инструменты — языки Python и Go. Так как ранее плотно работал с системным программированием, очень люблю *nix и всё, что с ними связано.
В статье расскажу, почему классические подходы к сетям перестали работать в условиях масштабирования, как мы выбирали стек, с какими архитектурными и техническими ограничениями столкнулись на практике — и почему выгоднее доработать существующий Open Source, а не переписывать всё с нуля. Покажу, как мы шаг за шагом избавлялись от узких мест, оптимизировали работу с большими объёмами ACL, переносили критичные компоненты на Go, и что в итоге получилось в продуктивных инсталляциях.
Если вам интересно, как реально эволюционирует инфраструктура и почему MVP — это не всегда «быстро и грязно», а зачастую — про осознанный выбор компромиссов — добро пожаловать под кат! Перед вами наш путь разработки программно-определяемой сети (SDN) для платформы виртуализации zVirt.
В какой-то момент в нашей команде стало очевидно: пора тащить всю инфраструктуру в Git — по-взрослому, через GitOps. Kubernetes у нас уже был, ArgoCD тоже. Осталось «дотащить» туда AWS-ресурсы, которые мы описываем с помощью AWS CDK.
Идея казалась простой: есть CDK-код в Git, запускается ArgoCD, всё красиво деплоится в облако. Но реальность оказалась совсем не такой. CDK — это не YAML и даже не Terraform. Это исполняемый код. GitOps — это про декларативность и kubectl apply
. CDK с этим не дружит.
Ожидалось, что наверняка есть готовый Kubernetes-оператор, который запускает cdk deploy
при изменении кода. Как это уже сделано для Terraform (через ArgoCD Terraform Controller), Pulumi, или хотя бы через ACK. Но после долгого ресерча выяснилось: нет ничего рабочего и production-ready.
Так появилась идея — написать собственный Kubernetes-оператор, который сможет:
- раз в какое-то время (или по коммиту в Git) запускать cdk deploy
;
- проверять cdk diff
и cdk drift
для отслеживания изменений и дрифта;
- удалять CloudFormation-стэк, если ресурс удалили из Git;
- интегрироваться с ArgoCD и Prometheus.
Получился полноценный GitOps-воркфлоу для AWS CDK — без пайплайнов, без ручных cdk deploy
, без дрейфующих стэков.
Под катом — расскажу, как мы подошли к проблеме, как устроен Custom Resource CdkTsStack
, какие фишки мы добавили (метрики, хуки, IAM-пользователи), и почему наш подход оказался практичнее, чем существующие альтернативы вроде Terraform Operator или Pulumi.
Рустам Курамшин, эксперт Spring АйО, разобрал свежий отчёт Stack Overflow за 2025 год о результатах ежегодного опроса разработчиков за 2025 год, и это отличный повод взглянуть на экосистему Java через призму статистики и интересов сообщества.
Привет, Хабр!
Сегодня мы рассмотрим три самые коварные ошибки, которые регулярно просачиваются даже в продовые C#-проекты. Разберёмся, как они рождаются, почему остаются незамеченными и что нужно сделать, чтобы больше никогда не ловить эти проблемы.