Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

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

Как проверить компанию до собеседования: мой чек-лист из 7 шагов

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

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

В этой статье я собрал свой чек-лист проверки компании перед собеседованием. Он состоит из двух блоков: базовая проверка через открытые интернет-ресурсы и дополнительная — через реестры и базы.

Читать далее

Новости

Песочница для кодинга на образовательной платформе: как безопасно запустить Python и ничего не сломать

Время на прочтение7 мин
Охват и читатели7.3K

Проблема любого онлайн-движка исполнения кода в том, что он должен принять чужой код и выполнить его как есть — а этот код может оказаться вредоносным. Поэтому нужно спроектировать всё так, чтобы при запуске кода мы могли свести к минимуму негативные последствия, которые «враждебный» код может вызвать. Например, если кто-то попытается вызвать команду вроде rm -rf /, то это не удалит нам всю систему.

Читать далее

QML и CSS не нужны. Использование QStyle (QStyleFactory) для изменения дизайна Qt приложения с выбором для пользователя

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели9.5K

В статье рассказывается о функционале, о котором забыли даже разработчики Qt. Дело в том, что этот функционал даёт уникальные возможности стилизации. В отличие от QML и CSS, использование QStyleFactory позволяет предоставить пользователю широкий выбор QStyle-дизайнов виджетов без затрат времени на настройку QML и CSS. Я много раз видел, как программисты тратят много времени на настройку дизайна через QML и CSS, хотя в Qt 5 и Qt 6 есть база уже готовых дизайнов, которую никто не предоставляет пользователю в качестве выбора. Считаю необходимым рассказать об этом очень удобном и даже ленивом способе настройки дизайна.

Читать далее

Уборщик резервов кадров жил по таймеру в 15 минут. Генерация укладывалась в 16

Время на прочтение5 мин
Охват и читатели8.1K

Баг всплыл не из мониторинга, а из жалобы: клиент написал, что AI-карточка сгенерировалась и легла в пикер, а счётчик кадров в пакете при этом не уменьшился — как будто генерация не потрачена. Разбор лога занял вечер 5 сентября, потому что первая гипотеза (двойной клик на кнопке) не подтвердилась: id генерации был один.

Читать далее

Программирование это искусство

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

Программистам нравится писать код, проектировать, продумывать логику, исправлять баги и понимать всю систему целиком. Им нравится сам процесс. И они никогда не отдадут этот процесс ИИ агентам.

Для них программирование это искусство. И никакие аргументы о том, что ИИ помогает в написании кода, не применимы для людей искусства. Им не нужно, чтобы ИИ в чём-то им помогал.

Читать далее

Свои книжные метаданные: Pivot-архитектура, Spring Boot и бесплатный API для Obsidian

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели5.4K

Как я собрал бесплатный сервис метаданных книг на Java и Spring Boot — с EAV/Pivot-схемой БД вместо ALTER TABLE на каждое новое поле, агрегацией нескольких открытых источников. Плюс обновлённый плагин для Obsidian.

Читать далее

Четыре зелёных релиза поверх неверной сущности

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.3K

Постмортем Electron-редактора меню: SceneTree, PDFKit и тесты, которые доказали не то

Я вернул «Объём» в поле, для которого он был задуман.

Текст наполз на цену.

Четыре релиза подряд проходили автоматические тесты. Зелёный статус только подтверждал обходной путь, который модель сама придумала, реализовала и затем закрепила проверками.

Когда визуально все выглядело хорошо, пошла проверка деталей, на этапе которой результаты тестов разошлись с реальностью. Проверил руками и увидел, что объём лежит не там, где должен. Не в Position.volume, а внутри PriceNote. Четыре релиза. Четыре зелёных гейта. Четыре раза процесс сказал «всё правильно» тому, что правильным не было. После этого пришлось разбираться не только с багом, но и с контрактом, который его пропустил.

Читать далее

context.Context в Go. Суть и частые ошибки

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.8K

Привет, Хабр! Сегодня поговорим о контексте: о его тонкостях и ошибках, которые возникают при его использовании.

Читать далее

Ручного курьера приняли за чужого: почему ID оказался плохим признаком происхождения записи

Время на прочтение5 мин
Охват и читатели9.2K

04.09 в 09:06:45 UTC ночной опрос Fleet нашёл одного «нового» курьера. Дальше автоматика отработала без единой ошибки: new_ids: 1, dispatch_alerted: 1, sms_sent: 1. В Google Sheet появилась строка 1248, в служебную группу пришёл алерт, человеку ушла SMS с просьбой подтвердить налоговый статус.

Читать далее

Rust: Макетирование форм для Iced 14

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели11K

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

Некоторое время назад у меня образовалось немного (вернее много) свободного времени, и я между моментами серфинга на известном сайте HH решил посмотреть в сторону освоения Rust. Кроме всего прочего мне очень интересует тема библиотек графических интерфейсов.

В Rust есть несколько подобных библиотек, я решил остановиться на Iced — текущая версия Iced 0.14. Прежде всего понадобилось понять принципы построения библиотеки и архитектурную философию паттерна ELM, которая реализована в библиотеке.

В процессе изучения родился описываемый ниже PET‑проект Iced Forms Pack. Проект представляет собой конструктор форм из базовых элементов Iced.

Читать далее

Плагины в Picodata

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели9.1K

В каждой уважающей себя СУБД должна быть возможность программировать на тьюринг-полном языке программирования. Вот и у нас в Picodata есть возможность написать плагин на Rust, а как это делать — расскажу под катом.

Читать далее

Мутационное тестирование: прекрасная концепция, которой вы редко будете пользоваться на практике

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели8.4K

В новом переводе от команды Spring АйО на простом Java-примере показываем:

– как работает мутационное тестирование с Pitest;  
– почему 100% покрытия недостаточно;  
– откуда берутся выжившие мутанты;  
– почему не стоит прогонять MT по всему проекту;  
– и в каких случаях этот подход действительно окупается.

А ещё как поручить настройку и запуск Pitest AI-агенту с помощью готового skill.

Читать далее

Гонка за исключением или как один except Exception может лишить сна на неделю

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.2K

Сервис зависает, контейнер не отвечает, а в логах — только «обработанные» ошибки. Часто причина таких инцидентов скрывается в слишком широком except Exception, который мешает приложению корректно завершаться. Разберем, как правильно обрабатывать исключения в production‑воркерах и избежать подобных проблем.

Читать разбор

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

Гетерогенный lookup: как одна фича C++ сделала драйвер проще, чище и быстрее, чем на C

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

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

Меня зовут Женя Ерохин, у меня около 15 лет опыта разработки драйверов на C++ под macOS. Сейчас я старший разработчик в Kaspersky Lab, занимаюсь операционной системой KasperskyOS. Много всего создал в ее микроядре, а теперь знакомлю нашу ось со всяким железом на мобильных устройствах.

Под катом я покажу, как мы использовали C++ при разработке драйвера для микроядерной ОС. В том числе разберу гетерогенный lookup — возможность выполнять поиск по разным типам аргументов без лишних преобразований. На практике такая фича хорошо показывает, почему C++ может быть полезен даже там, где обычно ждут C. Я расскажу, почему драйверы на C++ для микроядерной ОС — вполне рабочее инженерное решение. Покажу, где именно плюсы помогают писать более аккуратный и надежный код, как они упрощают работу со структурами данных и почему в нашей задаче такой выбор оказался естественным.

Читать далее

Архитектор, параноик, фантазёр и другие сотрудники IT‑компании будущего

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

За последние пару лет произошло странное: написать работающий код стало почти неприлично легко, а построить хорошую программную систему наоборот - сложнее. Сегодня человек без классического IT-бэкграунда может за вечер собрать интерфейс, API, базу и даже что-то задеплоить. А потом начинается самое интересное: архитектура расползается, зависимости живут своей жизнью, безопасность появляется «во второй версии», а никто уже толком не понимает, почему система вообще работает.

Я написал эту статью после наблюдений за коллегами, студентами и знакомыми, которые всё активнее используют ИИ для разработки. И поймал себя на мысли: ИИ удешевил производство кода, но почти не удешевил понимание того, какой код нужно производить.

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

Представляю мою спорную модель такой компании: умница-аналитик, архитектор-разработчик, супертестировщик, фантазёр, DevOps, параноик по безопасности. Плюс общая память компании, потому что без неё нейросети очень быстро начинают изобретать архитектуру заново.

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

Что ты опять выдумал?

Async void в C#: Его опасности и почему он все еще существует

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5.5K

Разбираем необычную конструкцию async void

В чем отличие от написания async Task? Какие проблемы могут за ней скрываться? Для чего ее ввели в язык? Как ей правильно пользоваться?

Ответы на все эти вопросы далее в статье

Читать далее

Как я навайбкодил первый в России аукцион рекламы на ноутбуке и заработал 600 000 ₽ за день

Время на прочтение4 мин
Охват и читатели5.6K

Позавчера запустил свой сайт с аукционом, хотя от вайбкодинга знал только слово «вайб». Расскажу зачем он нужен, как я его сделал, все цифры, кто уже залетел в него с двух ног и причем тут кофе из Пятерочки. Летс гоу!

Читать далее

Ещё одна айтишно‑заводская задача: отслеживаем историю прокатных валков, чтобы снизить простои

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели9.9K

Приветствую, Хабр! На связи Евгений Сапрыкин, я главный специалист техуправления по прокатным валкам на Западно-Сибирском металлургическом комбинате. 

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

Валки — своего рода колёса для автомобиля, без них стан не «поедет». И, как и колёса, их тоже нужно менять и ремонтировать. Рабочий слой изнашивается от постоянного контакта с горячим металлом, а от циклического нагрева и охлаждения водой на поверхности появляются термические трещины. При сбоях и авариях возникают вмятины и задиры — они потом отпечатываются на металле или вообще разрушают валки.

Есть регламенты по плановому ремонту валков. Но хорошо бы обслуживать их не просто по графику, а по мере реальной необходимости. И быстрее настраивать прокатный стан на отремонтированных валках с изменённой геометрией. Всё это позволит нам не допускать брака и аварийных ситуаций.

Эту статью я написал вместе с коллегами из команд IT и разработки бизнес-системы: Евгением Никитиным, Владимиром Рыжковым, Ольгой Чегодаевой, Диной Сизиковой, Ильёй Нечкасовым. Расскажем, как мы наладили систему для обмена информацией о валках между специалистами из эксплуатации и ремонта — и какие задачи это помогло решить.

Читать далее

Анатомия граблей

Время на прочтение10 мин
Охват и читатели17K

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

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

Читать далее

Я хотел просто навести порядок в Obsidian. В итоге написал два индекса, semantic search и RAG

Уровень сложностиСредний
Время на прочтение22 мин
Охват и читатели17K

Я начинал с простого AI-аудита заметок, а в итоге Vault Audit AI вырос в систему с двумя индексами, поиском по смыслу, Similar Notes, semantic duplicates и RAG по собственному хранилищу. В статье разбираю, как всё это устроено, что ломалось по дороге и почему почти 700 тестов всё равно не спасли от сюрпризов в реальном Obsidian.

Читать далее