Pull to refresh
0
0
Максим Фениксов @Feniksovich

User

Send message

Я 6 лет в IT. Вместо меня повысили коллегу, который гуглил, как проверить API-запрос. Что я сделал

Level of difficultyEasy
Reading time7 min
Views228K

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

Читать далее

Кто сообщает картам, где едет ваш транспорт

Level of difficultyMedium
Reading time8 min
Views25K
Приветствую всех!
Когда-то давно здесь уже был пост про то, как работает отображение движения транспорта на Яндекс-Картах. С тех пор мне не раз предлагали рассказать про то, что происходит на «транспортной» стороне: что вообще за устройства установлены на подвижном составе, в каком формате они передают положение и что с этими данными делают дальше. Самое время восполнить это упущение.



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

«Радикальный» способ собрать команду

Level of difficultyMedium
Reading time6 min
Views8.1K

В этом посте мы разберем с вами 7 основных психотипов людей по классификации Виктора Пономаренко («радикалов») и выделим сильные и слабые стороны каждого из них, применимо к командной работе и решению задач.

Предыстория

Как-то раз я набрела на вот такой диалог в одном чате, где обсуждались командные процессы:

— Должен быть лидер-слуга
— Почему слуга? Может, лидер-партнер?
— Не согласен! 100%, это мертвые нерабочие подходы!

Меня долго не отпускала мысль: как вообще могут существовать настолько полярные мнения? Ведь это писали не вчерашние студенты, а состоявшиеся в профессии люди. Казалось бы, это те, кто работал в IT последние 10-15-20 лет, что называется, «смотрели одни и те же мультики», читали похожие книги, наблюдали за преображением бизнес-процессов и кардинальной сменой технологий.

Читать далее

Осторожно: токсики! Или как понять, что пора бежать из компании

Level of difficultyEasy
Reading time5 min
Views9.2K

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

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

Читать про токсиков

Я уволился, потому что с зумерами невозможно работать

Level of difficultyEasy
Reading time16 min
Views239K

Мы изучили, что происходит в компаниях, и выяснили, почему хорошие специалисты не выдерживают и уходят. Разбираем 5 проблем, которые не компенсируют высокая зарплата и интересные задачи.

Читать далее

Может ли Java-приложение использовать больше памяти, чем размер кучи

Reading time11 min
Views27K

Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области памяти. 

Давайте начнем со структуры памяти Java-приложения и источников потребления памяти.

Читать далее

Про Rust — просто. Что читать в каком порядке?

Level of difficultyMedium
Reading time20 min
Views25K

Друзья! Многие из вас, возможно, как и я, интересовались изучением и использованием в работе очень эффективного и востребованного языка программирования Rust но, как и я, оставляли свои попытки из-за сложности, запутанности и многослойности доступного материала и книг по этой теме.

Лично я делал не меньше 5 попыток на протяжении последних 10 лет, прорабатывая, большей частью в свободное и личное время, литературу, некоторые книги по несколько раз, в поисках ответов на простые человеческие вопросы - как свободно писать на Rust и решать, как орешки, ежедневные задачи, не страдая от головной боли и хорошо понимая, что происходит и почему простая программа не компилируется.

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

Читать далее

Что не так с OpenStack и почти всеми российскими публичными облаками

Reading time13 min
Views38K
image

Это один из тех адских опенсорсных проектов, которые отлично начинались в 2010-м, но потом с сообществом что-то пошло конкретно не так. Можно сказать, что перед нами — опенсорс, болеющий всеми корпоративными проблемами.

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

Но при этом, если вы строите публичное облако в России, варианты выбора у вас очень богатые: либо на OpenStack с собственной разработкой, либо на OpenStack, но коммерческом.

Просто чтобы вы понимали уровень ситуации:

  • Архитектура — заявленная как микросервисная, по факту — распределённый монолит, причём взаимодействие с компонентами вроде файловых хранилищ разного типа не вынесено в отдельные модули, а затянуто в ядро.
  • 49 команд разработки, которые делят сервисы по зоне ответственности, а не архитектурной задаче. Десятки комитетов, которые добавляют бюрократии.
  • Документация не соответствует реальности.
  • Иногда баг в одном модуле исправляется специальной утилитой, убирающей его последствия от другой команды разработки, а не апдейтом исходного модуля.
  • Код неоптимальный, сервисы работают медленно, есть бутылочные горлышки.
  • Обновляться очень тяжело.
  • ИБ часто делается по остаточному принципу.

В общем, в 2025 году я никак не могу советовать идти в OpenStack, но особого выбора-то и нет.

Чтобы не быть голословным, ниже будет полный каталог проблем, с которыми мы столкнулись на практике.
Читать дальше →

Перестаньте молиться на принципы S.O.L.I.D

Reading time6 min
Views48K

В мире разработки программного обеспечения существует множество "священных коров" — принципов и практик, которые принимаются как данность и редко подвергаются критическому анализу. Особенно показательна ситуация с принципами SOLID на русскоязычных ресурсах: достаточно открыть Хабр, чтобы найти 100500 статей о SOLID, и в каждой из них принципы интерпретируются по-разному.


Само существование такого количества "объяснительных" статей говорит о фундаментальной проблеме: если принципы требуют толкования, значит их названия не являются самодостаточными и интуитивно понятными. А если каждый разработчик понимает принципы по-своему, возникает вопрос — зачем вообще нужны принципы, которые не дают однозначного руководства к действию? Принципы SOLID, предложенные Робертом Мартином, давно стали одной из таких "священных коров". Однако пришло время честно признать: то, как мы используем SOLID сегодня, часто противоречит изначальным идеям и в целом иногда может приносить больше вреда, чем пользы. Зависит от контекста.


SRP не SRP


Самый яркий пример искажения первоначального замысла — это интерпретация принципа единственной ответственности (SRP).

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

Разбираемся с Redis

Reading time19 min
Views400K

Этот материал представляет собой глубокое исследование всего, что связано с Redis. В частности — речь пойдёт о различных способах организации хранилищ Redis, о постоянном хранении данных, о форках процессов.

Читать далее

Безумные и забавные факты о SQLite

Level of difficultyMedium
Reading time5 min
Views32K

  1. SQLite — самая часто разворачиваемая и используемая база данных. На текущий момент активно используется более одного триллиона (1000000000000 или миллиона миллионов) баз данных SQLite.

    Её поддерживают три человека. Они не допускают внешних контрибьюторов.
Читать дальше →

Очередная китай-камера с бэкдором

Level of difficultyMedium
Reading time8 min
Views37K

Как можно догадаться, на этот раз речь пойдёт об очередном поделии китайского IoT-гения, а именно о цифровой камере для третьего "глаза" микроскопа (можно ли назвать камеру для микроскопа IoT-ом?). Не знаю, может у них там сверху наказ такой: в каждую камеру по бэкдору совать (и чем больше, тем лучше), но это в самом деле треш.

За какую камеру ни возьмись: будь она для видеонаблюдения, либо, как в моём случае, для вывода картинки с микроскопа на монитор/смартфон - по факту вы получаете не только девайс, выполняющий свои основные функции, но и как "премиум-фичу" - потенциально следящее (конечно же, за Вами) устройство. Об одном таком девайсе я и хочу рассказать.

Читать далее

Более 14 лет ставлю цели на год: рассказываю, как и почему этот процесс работает у меня

Reading time14 min
Views65K

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

Читать далее

Хитрости для программистов: пять команд Linux, с которыми ваша жизнь не будет прежней

Reading time8 min
Views86K

Интерфейс командной строки — это альфа и омега для большинства технарей, особенно для разработчиков и сисадминов. Чем бы вы ни занимались — скриптами, конфигурацией серверов или автоматизацией задач, — команды Linux сэкономят вам часы рабочего времени. Но если только вы умеете грамотно с ними обращаться.

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

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

Читать далее

Валидация и обработка исключений с помощью Spring

Reading time8 min
Views21K

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

В этой статье я обобщаю свой опыт и даю несколько советов по валидации интерфейсов.

Читать далее

STM32 — грамотно включаемся от кнопки

Level of difficultyEasy
Reading time7 min
Views20K

Наличие у контроллеров STM32, да и практически любых других, режима энергосбережения STANDBY, который фактически представляет собой полное отключение (работает только RTC и сторожевой таймер, потребление составляет первые микроамперы, а состояние не сохраняется), дает возможность простейшим способом сделать включение и выключение устройства на таком МК нажатием кнопки, в том числе и задействованной под другие функции, без каких-либо дополнительных элементов. Есть, однако, несколько подводных камней, и в этой статье я расскажу, как на них не попасть.

Читать далее

Генерация SHA-256 посредством SIMD (SSE-2) инструкций, в MMX и XMM регистрах, без использования памяти (почти)

Reading time5 min
Views3K

Сижу я значит спокойно, никого не трогаю, починяю примус, и вдруг как захочется сгенерировать SHA-256 целиком внутри процессора без обращения к памяти, что прям места себе не нахожу.

В итоге к памяти все таки пришлось обращаться за самим сообщением, константами и сохранять начальное значение hesh блока, а в остальном смотрите ниже.

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

Читать далее

Как я оптимизировал свой конвейер CI/CD до выполнения за 60 секунд

Level of difficultyEasy
Reading time9 min
Views5.9K

Как и многие, я храню свой код на GitHub. Пару лет назад я сделал простой пайплайн для сборки, анализа и тестирования моих веб‑приложений и сервисов. Он выполнял свою задачу, и так как это был мой первый опыт по настройке пайплайна CI/CD на GitHub, он сводился к одному шагу.

build (and deploy)

Со временем я стал замечать, что я стараюсь избегать вносить изменения в код. Будучи счастливым обладателем ADHD, я часто замечаю за собой сложность в решении задач с большим количеством препятствий и одним из них стало то, что выполнение пайплайна занимало больше 5 минут. Я коммитил изменения и шел делать кофе, пока пайплайн тестировал и деплоил код. И не всегда возвращался, отвлекаясь на другие вещи.

Я решил для себя, что максимальное количество времени, которое я готов ждать - 1 минута.

Читать далее

Подробно про JWT

Level of difficultyMedium
Reading time6 min
Views48K

О чем эта статья: мы разберемся, что такое JSON Web Token, как он устроен и для чего используется, рассмотрим такие приемы, как «black-list токенов» и «контроль версий» токенов. Для наглядности, в конце будут блок-схемы клиент-серверных запросов с пояснениями.

Для кого эта статья: для тех, кто хочет детально понять что такое JWT, а так же для тех, кто просто ищет схему реализации.

Читать далее

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer
Intern
Git
Nginx
Linux
Docker
Java
High-loaded systems
Redis
MongoDB
RabbitMQ
Java Spring Framework