habrahabr
Хватит страдать: Выбросьте ООП и ECS. Есть путь проще

Десятилетиями нам рассказывают, что есть только два пути: громоздкие иерархии ООП или стерильная бюрократия ECS. Нас заставили поверить в то, что создание игр — это выбор между анархией и диктатурой.Это ложь. Оба этих пути — ненужные усложнения. Есть прямой и эффективный способ, который мы променяли на модные, но непрактичные примочки. Эта статья — о том, как вернуться к здравому смыслу.Как нам продали «серебряную пулю» ООПЦелые поколения разработчиков учили моделировать мир как иерархию классо…

  • четверг, 14 августа 2025 г. в 00:00:13
habrahabr
Не лезьте туда: 47 лет не оцифровывали, и нормально же работало

Выпуск чугуна из доменной печи. Один из процессов, вокруг которого будем вести диалог.С точки зрения ИТ доменная печь — это огромный «чёрный ящик». Вы кладёте сырьё и топливо, получая на выходе чугун и шлак. Измерить внутри все можно почти ничего нельзя: датчики просто «умирают» от температуры, воздействия шихты и прочих условий. Измерить снаружи тоже сложно (да и нужно ли?): большие печи имеют диаметр порядка 15 метров и высоту 35 метров, — что нам дадут граничные условия для таких размеров?! …

  • четверг, 14 августа 2025 г. в 00:00:11
habrahabr
Как я поймал сетевика на передаче пароля в SSH и чем это закончилось

Есть старое правило: если можно сделать быстро и удобно, кто‑то обязательно сделает это в ущерб безопасности. В инфраструктурных командах это особенно заметно. Сетевики часто решают задачи «с лёту», и это прекрасно. Пока речь не заходит про пароли. Один из таких случаев стал для нас уроком На первый взгляд — мелочь, но последствия могли быть куда серьёзнее.Как всё началосьОбычный рабочий день. Я проверял список процессов на сервере (ps aux) и вдруг вижу:bash sshpass -p 'Qwerty123' ssh a…

  • четверг, 14 августа 2025 г. в 00:00:11
golang
Превращаем legacy CLI в AI-агентов за 5 минут: практическое руководство по MCP и Ophis для Go-разра…

Проблема: AI не умеет в DevOpsПредставьте типичный workflow DevOps-инженера с AI-ассистентом:# Человек копирует в Cursor: $ kubectl get pods -n production NAME READY STATUS RESTARTS AGE api-service-7d4b5c6-x2kl9 1/1 Running 0 5h api-service-7d4b5c6-m3nq2 0/1 Pending 0 2m worker-5f6d7c8-p4rs5 1/1 Running 3 12h # Cursor: "Вижу проблему с подом api-service-7d4b5c6-m3nq2..." # Человек: копирует descr…

  • четверг, 14 августа 2025 г. в 00:00:09
golang
Швейцария в картах Go: путешествие по Swiss Tables

Golang продолжает развиваться. Изначальные проектные решения ставятся под сомнения, а новые вызовы заставляют язык меняться: дженерики, итераторы, новая имплементация мап. Однако, даже нововведения приходят к нам не такими, как в других языках. Вспомните обсуждения сразу после релиза тех же дженериков. На Go, как мне кажется, в большинстве своём пишут люди, пришедшие из прочих языков, у кого Golang не первый ЯП. Они привыкли к другому подходу работы с абстракциями. И им порой не хватает того, ч…

  • четверг, 14 августа 2025 г. в 00:00:08
javascript
Замена YouTube Kids

Что делать, когда твой ребёнок признаёт только это приложение? Вот не хочет пользоваться аналогами, и всё тут! Как убрать недостатки в такой ситуации и добавить достоинств? Об этом и поговорим.Какие недостатки YouTube Kids я хотел бы убрать?Невозможно сделать раздачу исключительно русскоязычной. Это может быть особенно плохо, например, для детей с аутизмом, у которых спец-интерес после просмотра мультиков может проявиться в английском (или любом другом) языке, с нежеланием говорить по-русски.Не…

  • четверг, 14 августа 2025 г. в 00:00:07
javascript
React Custom Hook: useScript

В этой серии статей мы отправимся в путешествие по миру пользовательских хуков React, открывая для себя их огромный потенциал для улучшения ваших проектов разработки. Сегодня мы сосредоточимся на хуке «useScript», одном из многих тщательно разработанных хуков, доступных в коллекции пользовательских хуков React.Github: https://github.com/sergeyleschev/react-custom-hooks import useAsync from "../useAsync/useAsync" export default function useScript(url) { return useAsync(() => { …

  • четверг, 14 августа 2025 г. в 00:00:05
javascript
Для чего нужны enum в TypeScript. Подробно и простым языком

Привет, меня зовут Дмитрий, и я руководитель фронтенд-разработки в компании Интелси. В данной статье я хочу подробно разобрать enum в TypeScript, чтобы было понятно, что это такое, для чего нужно и почему это работает именно так.Давайте создадим простой enum, который в качестве ключа будет содержать название профессии, а в качестве значения то, чем обычно занимается представитель данной профессии (врач лечит, учитель обучает):enum ProfessionAction { doctor = 'treat', teacher = '…

  • четверг, 14 августа 2025 г. в 00:00:04
javascript
JavaScript: массивы от А до Я для тех, кто только начал

Привет! Я — Александр Дудукало, автор базового курса по JavaScript. Кажется, пришло время поговорить о массивах. Не просто поговорить, но еще и разобрать полезные примеры, которые помогут узнать о них больше. В этой статье я доступно расскажу, что такое массивы, какие у них особенности и для чего они вообще нужны. Заваривайте чай, открывайте редактор кода на своем компьютере для экспериментов — начнем разбираться!Что такое массивыЕсли вы начали изучать JavaScript, то наверняка уже знакомы с так…

  • четверг, 14 августа 2025 г. в 00:00:04