Pull to refresh
91
359

Motion – Peter Sandberg

Send message

getopts: как писать CLI-утилиты с флагами без внешних библиотек

Level of difficultyEasy
Reading time5 min
Views2.1K

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

getopts — это встроенный в любой POSIX-совместимый Linux/Unix-shell мини-парсер аргументов. Один shebang — и у вас CLI-утилита без единой внешней зависимости. В статье рассмотрим, как выжать из getopts максимум, где он спотыкается и когда пора переехать на getopt или Argbash.

Читать далее

Ссылки и указатели в C++

Level of difficultyEasy
Reading time6 min
Views8K

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

Сегодня разбираем &&* неувядающую классику C++ — ссылки & и указатели *. Казалось бы, два оператора, делов-то, но стгоит нырнуть под крышку — и выясняется: тут и разное время жизни, и несменяемость адреса, и прочие вещички. Разберемся в статье подробнее.

Читать далее

Как защитить бизнес-логику от мутаций в DTO: коротко

Reading time5 min
Views2.2K

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

Сегодня рассмотрим, как обезопасить бизнес-логику от случайного (или злонамеренного) изменения DTO, чем опасна мутабельность моделей и какие инструменты дают C#, Java, Python и Go, чтобы вы больше никогда не ловили эти баги.

Читать далее

exit /b, errorlevel и catch-like конструкции в cmd

Level of difficultyEasy
Reading time4 min
Views1.2K

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

Сегодня у нас на повестке интересная тема: как адекватно обрабатывать ошибки в cmd-файлах (он же — Windows Batch).

В общем, если вам приходилось писать batch-скрипт, который делает чуть больше, чем echo Hello World — добро пожаловать. Рассмотрим как работает %ERRORLEVEL%, когда и как юзать exit /b, как раскладывать try/catch на лейблы и почему всё это ломается, когда в бой идут call, for и if.

Читать далее

std::launder: зачем и когда нужен

Level of difficultyEasy
Reading time7 min
Views7.8K

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

В этой статье разберём мутный, но крайне важный инструмент ‒ std::launder. Мы поглядим, зачем его протащили в C++17 и что компилятор делает, когда видит launder.

Читать далее

Почему multiprocessing.Queue() тормозит и как обойти это с помощью shared_memory

Level of difficultyEasy
Reading time6 min
Views1.7K

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

Вы запускаете многопроцессную задачу, кидаете данные в multiprocessing.Queue(), а потом вдруг замечаете... что всё тормозит. Муторно. Медленно. Местами прям отвратительно. Вы смотрите в монитор, на top, на htop, на код — и не понимаете: ну ведь должно же летать! А не летит.

Читать далее

Что может пойти не так с merge() — дубли, потери, ошибки типов

Level of difficultyEasy
Reading time5 min
Views1.8K

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

Тонкое скрещивание DataFrame-ов в pandas по-прежнему остаётся источником прелестных багов: случайных дубликатов, потерянных строк и неуловимых NaN-ов. В статье рассмотрим эти проблемы.

Читать далее

Как устроен reflect.Value и что происходит, когда вы вызываете .Field(i)

Level of difficultyEasy
Reading time8 min
Views1.5K

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

Сегодня разберём, как устроен reflect.Value изнутри и что на происходит, когда вы вызываете .Field(i).

Читать далее

Чем опасен apply() и почему его стоит заменить

Level of difficultyEasy
Reading time4 min
Views12K

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

Сегодня рассмотрим почему DataFrame.apply() — это так себе инструмент в 2025 году, чем его заменять и как писать dataframe-логику так, чтобы она летала вместо того, чтобы жечь CPU и бюджет.

Читать далее

Как service discovery ломается в Kubernetes (и почему DNS не всегда помогает)

Level of difficultyEasy
Reading time4 min
Views1.7K

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

В этой статье рассмотрим, как и почему в Kubernetes может сломаться service discovery — даже когда DNS вроде бы работает.

Читать далее

Application Layer на примере Go — зачем он нужен, если уже есть сервисы?

Level of difficultyEasy
Reading time5 min
Views3.4K

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

Сегодня разберёмся, зачем Go-проекту слой Application / Use-Case: как он герметично изолирует бизнес-логику, позволяет переключаться между HTTP, gRPC, Cron-джобами и очередями, а заодно экономит тесты и нервные клетки.

Читать далее

«Люди сами не знают, чего хотят»: как читать сигналы команды

Level of difficultyEasy
Reading time4 min
Views1.8K

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

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

Люди редко приходят к вам и прямо говорят: «Я выгорел», «Я не хочу делать эту задачу» или «Ты задолбал меня микроменеджить». Но явно читаются по определенным сигналам.

Читать далее

Почему java -jar игнорирует твой -cp и как это обойти

Level of difficultyEasy
Reading time5 min
Views2.4K

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

Когда java -jar цинично игнорирует ваш -cp, хочется грустить, но спокойствие, сегодня рассмотрим, почему так происходит и как это обойти.

Читать далее

Как работает position: sticky и почему он часто не прилипает

Level of difficultyEasy
Reading time5 min
Views2K

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

position: sticky — штука, которая превращает relative-элемент в fixed-элемент, как только он доезжает до заданного инсет-порога, и отлипает в момент, когда скроллинг выталкивает родителя за край.

Работает круто, пока вы не включите overflow, не забудете задать top, не положите элемент в flex c align-items: stretch, не сделаете таблицу из <thead> и не упрётесь в кейс с вложенными скролл-контейнерами.

Читать далее

Почему твой await fetch тормозит — и как это исправить

Level of difficultyEasy
Reading time5 min
Views14K

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

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

Читать далее

Обратный вызов operator delete: когда, как и зачем он вызывается

Level of difficultyEasy
Reading time4 min
Views2.4K

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

Сегодня разбираемся, когда, как и зачем рантайм вызывает обратный вызов operator delete, откуда берётся sized delete, почему компилятор подсовывает placement-delete, и когда стоит выкинуть всю эту ручную экзотику, заменив коллбэки на std::function_ref или шаблонные параметры.

Читать далее

Подумайте перед тем, как внедрять CQRS

Level of difficultyEasy
Reading time4 min
Views4.7K

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

Если вы тимлид или архитектор, и в команде всё чаще звучит «давай сделаем CQRS» — стоит остановиться. Этот паттерн мощный, но далеко не беспроблемный.

Читать далее

Rust: как не утечь в Rc<RefCell

Level of difficultyEasy
Reading time3 min
Views1.7K

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

Сегодня рассмотрим проблемную тему в Rust: управление владением в структурах с циклическими ссылками, таких как графы и деревья. Особое внимание уделим комбинации Rc<RefCell<T>> и тому, как избежать зацикливания с помощью Weak.

Читать далее
1
23 ...

Information

Rating
5-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity

Specialization

Specialist
Middle
From 1 ₽
SQL
Python
Database
English
PostgreSQL
Git