Все потоки
Поиск
Написать публикацию
Обновить

Бэкенд

Сначала показывать
Порог рейтинга
Уровень сложности

Про esModuleInterop и совместимость модулей ES6 и CommonJS

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

Всем привет, хабровчане! Я (не)начинающий разработчик с относительно небольшим стажем, который пытается углубить свои знания в любимой технологии. В работе и повседневной жизни очень часто приходится работать с языком TypeScript, который мне очень нравится, но к своему стыду, сам очень плохо знаком с настройкой его конфигурации, поэтому решил восполнить этот пробел, ведя собственный Today I Learned. Некоторые опции tsconfig являются очень простыми и понятными. Другие же заставляют знатно напрячься. И даже если поверхностное назначение какой-то настройки является понятным, все равно возникает желание разобраться с принципом ее действия, понять, на какие структурные аспекты проекта она влияет, а также узнать, а как вообще людям жилось до ее появления.

Как раз об одном из них и пойдет разговор в этой статье, а именно об esModuleInterop. Действие опции проверялось при попытке подружить CommonJS-модуль с ES-модульным проектом. Поверхностная гуглешка не дала исчерпывающий ответ на ряд моих вопросов, поэтому приходилось обращаться к спецификации ES6, документации tsconfig (упаси боже читать документацию (шутка)), в личные блоги авторитетных дядек в сообществе и к описаниям модульных систем. На основе найденной информации я составил небольшое резюме, с попыткой собрать материал во едно. Надеюсь, кому-то он покажется интересным. Приятного чтения!

Читать далее

IDE для COBOL на Delphi — часть 2: GMP, улучшенная отладка и подсветка

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

Теперь IDE позволяет компилировать программы с подключением дополнительных библиотек. Например, библиотека GMP (GNU Multiple Precision Arithmetic Library) может использоваться для работы с большими числами и точной арифметикой.

Читать далее

Пуск Беспроводной CLI на Микроконтроллере

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

Иной раз возникает такая ситуация, что надо получить доступ к устройству висящему под потолком.

В этом тексте я расскажу как запустить беспроводную консоль на микроконтроллере.

Читать далее

Фундаментальные шаблоны проектирования на Python

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

Разбор самых фундаментальных шаблонов проектирования на языке программирования python: наблюдатель, адаптер, команда, компоновщик, декоратор, фасад, фабрика, итератор, заместитель, одиночка, состояние, шаблонный метод.

Читать далее

Зачем я написал очередной велосипед для работы с директориями (спойлер: не совсем велосипед)

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

Вы когда-нибудь сталкивались с плагинами, которые лезут в чужие папки, перезаписывают файлы ядра и превращают git status в ад?

Я — да. И вместо того чтобы мириться с ручным копированием, гигантскими .gitignore и вечными конфликтами, написал dmp — инструмент, который:
 Отслеживает, откуда взялся каждый файл,
 Автоматически разрешает конфликты (или даёт контроль),
 Не ломает IDE (никаких симлинков!),
 Работает с любыми языками и фреймворками.

Для кого:
— Разработчики плагинов/модулей,
— Те, кто устал от git-submodules и rsync,
— Все, кто хочет чистый workflow без монрепозитория.

Читать далее

Перенастроить тысячи удаленных устройств — Java, SSH, Native executable

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

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

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

Основная задача УСПД — это опрос подключённого к нему оборудования (электросчётчиков, резервных генераторов и других устройств, необходимых для работы базовых станций) с последующей передачей собранных данных на серверы МегаФона, где в дальнейшем они используются для формирования отчётности, анализа и управления работой базовых станций. По сути, это классическая IoT-система.

Речь пойдёт как раз о перенастройке УСПД.

Читать далее

Асинхронный Telegram бот на PyTelegramBotAPI

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

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

Читать далее

Активность найма на IT-рынке в первом полугодии 2025

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

Завершилось первое полугодие 2025 — и мы посмотрели, как компании нанимали специалистов в этот период на Хабр Карьере. В прошлом году мы собирали это исследование каждый квартал, а в этом решили брать шире и смотреть на наём сразу за шесть месяцев. Но если после исследования поймете, что полезнее читать срезы чаще — просто дайте знать в комментах. 

Теперь посмотрим, какие компании размещали больше всего вакансий и кого искали чаще в первом полугодии 2025. 

А если вы только выходите на рынок найма, просто скажем, что у нас на Хабр Карьере есть маркетплейс курсов в самых разных специализациях и навыках с отзывами, чтобы вы легко выбрали подходящее обучение.

Из интересного: в прошлом году количество вакансий для стажеров весь год ощутимо превышало число предложений для джунов на Хабр Карьере, но сейчас ситуация изменилась. Число вакансий для джунов в этом году снова больше, чем для стажёров: в первом полугодии их было 637 против 304.

Читать далее

Архитектура корпоративных данных: AWS + Snowflake

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

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

Это приводит к тому, что они постоянно находятся в состоянии тушения пожара и не могут сосредоточиться на решении более важных задач. И хуже всего то, что из‑за этого бизнес теряет доверие к данным.

Читать далее

Погружение в Go: подборка ресурсов для новичков и продолжающих

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

Привет, Хабр! Пару лет назад мы уже выпускали подборку книг, подкастов и других ресурсов для изучения языка программирования Go. За это время коллекция полезных материалов подросла, и пришло время поделиться продолжением.

Новая подборка ждет вас под катом. Сохраняйте себе и отправляйте коллегам — пригодится как новичкам, так и опытным специалистам.

Читать далее

pg_dphyp: учим PostgreSQL соединять таблицы по-другому

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

Большая часть времени планировщика запросов в СУБД тратится на поиск оптимального способа соединения таблиц. В PostgreSQL используется два алгоритма: алгоритм динамического программирования, также называемый DPsize, и генетический — GEQO. В других СУБД реализовано еще множество других алгоритмов. DPhyp — алгоритм соединения на основе гиперграфов — уже используется такими СУБД как MySQL и YDB. Я задался вопросом: можно ли реализовать его в PostgreSQL? Оказывается, можно. Так и зародилось расширение pg_dphyp для PostgreSQL, реализующее альтернативный алгоритм соединения таблиц. В статье я не описываю подробно сам алгоритм, привожу только концептуальное описание его идеи, а рассказываю вот о чем:

-- Какие решения пришлось принять, чтобы добавить алгоритм DPhyp в существующую кодовую базу без изменения ядра;
-- Как GPLv2 помог найти эффективный алгоритм обхода соседей;
-- Как проиндексировали неиндексируемое гиперрёбра;
-- Планирование какого запроса смогли ускорить в 600 раз;
-- Какой изъян в работе существующего планировщика был найден.

Но главный сюжетный поворот — в конце...

Читать далее

Путешествие в мир функционального программирования: как я провела курс студентам

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

Привет! Меня зовут Ксюша, я работаю бэкенд-разработчиком на C# в Контуре. В весеннем семестре я провела курс по функциональному программированию на Haskell для студентов 3 и 4 курса направления ФИИТ (фундаментальная информатика и информационные технологии) в УрФУ и хочу поделиться своим опытом организации и проведения курса.   

Читать далее

Как разработать новую систему с первой попытки взамен старой

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

«Мы хотим заменить систему на новую, потому что в старой всё плохо» — именно такую фразу слышит очередной вендор при заключении контракта на замену или модернизацию системы. С одной стороны, это действительно так, но все же стоит дополнить эту фразу: «Мы хотим заменить систему на новую, потому что в старой хотим убрать недостатки и сохранить достоинства». Казалось бы, небольшая разница, но на практике это оборачивается провалами внедрения новых систем. Почему так происходит и что с этим можно сделать — рассмотрим в этой статье.

Читать далее

Ближайшие события

Паттерн Спецификация: реальный опыт применения

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

Четыре года назад на собеседовании я услышал от интервьюера о том, как замечательно паттерн Спецификация помогает справиться с проблемой разрастания репозитория. Я думаю, многие с этим сталкивались, когда количество методов типа getByThisAndThat(…) улетает за десяток, а то и за несколько десятков, и репозиторием становится пользоваться неудобно.

Вдохновившись таким позитивным отзывом, я изучил первоисточник и начал экспериментировать с использованием спецификации как со средством упрощения репозитория.

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

Читать далее

MemHawk — профилировщик памяти для многопоточных приложений

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

Практически каждому разработчику однажды приходилось искать утечки памяти в его приложении / либо же профилировать использование памяти процессом. Задача эта довольно трудоемкая и непростая.

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

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

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

Спойлер - удалось ускориться по отношению к heaptrack в 30 раз.

Читать далее

Рецензия на книгу “Программируем на Java: практический подход к созданию надежных и эффективных приложений”

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

Теперь и на русском языке! Аарон Плоетц представил свое практическое руководство по Java 21 — вполне себе современному изданию, наполненному реальными примерами, охватывающими всю экосистему: от базовых конструкций языка и новых возможностей версии 21, через работу с реляционными и NoSQL‑базами (PostgreSQL и Cassandra), до создания GUI‑веб‑приложений на Spring Boot и Vaadin, и даже простых игр с анимацией. Книга получила высокие оценки читателей на Амазон — 4.2 звезд из 5.

Читать далее

Бинарные семафоры на futex через parking_lot_core

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

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

Сегодня рассмотрим, как реализовать собственный бинарный семафор на основе futex и библиотеки parking_lot_core.

Читать далее

Как научить нейросеть работать руками: создание полноценного ИИ-агента с MCP и LangGraph за час

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

Надоели чат‑боты, которые только болтают? Создаём настоящего ИИ‑помощника: читает файлы, ищет в сети, запоминает всё. LangGraph + MCP — пошаговый гайд для Python‑разработчиков. Меньше теории, больше работающего кода.

— Два готовых агента: классификатор вакансий + файловый помощник
— Поддержка Ollama, OpenAI, DeepSeek — выбирайте любую модель
— Асинхронная архитектура с обработкой ошибок
— Полная интеграция в Python‑проекты без no‑code конструкторов
— Код готов к продакшену: логирование, retry‑механизмы, конфигурация

От настройки окружения до рабочего агента за час.

Читать далее

Альтернатива чатам с ИИ для анализа и оптимизации SQL запросов

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

Всем привет!

Экспериментировал с оптимизацией SQL запросов в ChatGPT и Claude. В какой-то момент понял, что это превращается в одно и то же: Напиши промт → вставь SQL → подожди → поправь → повтори

Читать далее

Операции ввода-вывода в Python

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

Все мы пользуемся различными приложениями для разных целей. Банковские приложения для операций с денежными средствами, мессенджеры для общения. Они принимают внутрь себя команду от человека и возвращают ответ. Банальный запрос ответ, но это так кажется с первого взгляда. Эти операции называются Input Output и они является самой распространённой операцией в сети. Предлагаю сегодня разобраться как они работают.

Читать далее