Обновить
1289.19

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

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

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

Участие в нескольких проектах снижает результаты работы — так ли это?

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

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

Почему спрашиваю?

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

Вопрос к сообществу:

Правда ли, что разработчик, участвующий в нескольких проектах part-time, будет менее эффективен, допустит больше багов и в целом ухудшит качество релизов? Или это миф, и всё зависит от процессов, коммуникации и личной организованности?

Теги:
+5
Комментарии16

Этот финт сэкономит вам время и нервы

Хочу написать о финте, который позволит вам сохранить нервы и сэкономить время. Правда некоторые (многие, почти все) впадают в ступор от него. Поэтому тут использована КДПВ с поста. Я наверно чувак слева.

А именно добавление первым условием if единицы:

if (1
    && $cond1
    && $cond2
    && $cond3
)

Использование финта дает нам возможность:
1. Быстро выключать фичу заменой 1 на 0:

if (0
    && $cond1
    && $cond2
    && $cond3
)

2. Быстро выключать любое условие в PhpStorm через горячие клавиши:

if (1
//    && $cond1
    && $cond2
    && $cond3
)

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

if (
    /*$cond1
    &&*/ $cond2
    && $cond3
)

Или такую:

if (
    $cond2
    && $cond3
)

3. Быстро добавлять новое первое условие:

if (1
    && $cond2
    && $cond3
)

легко превращается в:

if (1
    && $cond1 // в изменениях одна строка
    && $cond2
    && $cond3
)

4. Быстро дублировать любое условие.

5. Быстро менять порядок условий.

6. Также у нас будет чистый diff git-а при удалении/добавление первого условия.
Тут должен быть рисунок удаления с финтом и без, рисунок добавления с финтом и без.
Также при конфликте у нас будет более простое его решение, если нужно просто добавить оба условия.

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

Теги:
+8
Комментарии13

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

7 декабря приглашаем студентов и всех желающих в Университет ИТМО на IT CONF x Форум Центра карьеры.

15:00–15:50 (аудитория 1404) — воркшоп Авенира Воронова, директора по внедрению AI, Veai

На IT CONF x Форум Центра карьеры вас ждут горячие тренды, технологии и встречи с IT-сообществом.

В этот раз в центре внимания – развитие и применение искусственного интеллекта:

  • ИИ как партнер в разработке

  • влияние ИИ на рынок труда

  • современные компетенции и карьерные траектории в бигтехе

  • стек System Design в 2030 году: что нужно уметь разработчику

  • какая стратегия ИИ ждет нас в ближайшие десятилетия

📍 Где: ИТМО, Кронверкский пр., 49

Принять участие может каждый — вне зависимости от возраста, места учебы или работы.

👉 Регистрация

Будем рады встрече и вашим вопросам!

Теги:
-1
Комментарии0

Продолжаю играться с телетайпом.

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

Схема электрическая принципиальная
Схема электрическая принципиальная

Автостоп реализован на реле К1 и двух транзисторах VT4 и VT5. При приеме или передаче символа стартовый импульс посылки проходит через диоды VD1 или VD3 и открывает транзистор VT4. Через открытый транзистор очень быстро разряжается емкость C3, которая затем медленно заряжается через высокоомный резистор R19. Если долгое время не было никаких посылок, то конденсатор потихоньку зарядится до порогового напряжения транзистора VT5, который закроется и отключит реле. Сопротивление резистора и емкость конденсатора подобраны так, чтобы отключение происходило примерно через минуту бездействия аппарата.

Переключателем S1 можно выбрать режим работы – OFF/ON/AUTO, то есть, мотор всегда выключен, всегда включен и автоматический режим.

Также, в схему была добавлена возможность как двухпроводного, так и четырехпроводного подключения. Для этого добавлены резисторы R1, R2 и R4, а также дополнительный каскад на транзисторе VT1. Этот каскад нужен только для трансляции импульсов передачи для автостопа при четырехпроводном подключении.

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

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

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

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

Почти полностью готовую библиотеку на Си я взял тут. После клонирования репозитория необходимо доустановить библиотеки curl4 и json-c и, после компиляции, все заработало с первого раза.

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

Если от пользователя приходит команда /start, ему выдается краткая инструкция. Также бот реагирует на команду /who, по этой команде выдается зашитый в комбинаторный валик автоответ телетайпа.

Что в итоге получилось, может проверить любой пользователь Телеграмм (бот teletypeT63_bot). А убедиться, что отвечает реально телетайп можно по видеотрансляции (с 12.00 до 13.00 МСК). Единственная просьба: воздержаться от посылки нецензурных, оскорбительных и политических сообщений. Также стоит ограничение на слишком длинные сообщения (более 100 символов).

Теги:
+7
Комментарии0

Запуски 2025: программирование

В 2025 году мы запустили 25+ курсов и тарифов для ИТ-специалистов. В этой подборке собрали новые программы по разработке и архитектуре.

«Rust для действующих разработчиков» — 4 месяца
После курса сможете использовать Rust как основной стек и создавать отказоустойчивые системы с высоким уровнем безопасности.

«SRE — обеспечение надёжности систем» — 4 месяца
Освоите практики и подходы SRE, наладите мониторинг инфраструктуры и приложений, чтобы повышать стабильность и улучшать бизнес-процессы.

«DevSecOps: безопасная разработка и эксплуатация» — 3 месяца
Разберём, как выявлять и устранять уязвимости на ранних этапах и снижать риски на всём жизненном цикле приложения — от планирования до эксплуатации.

«MLOps для разработки и мониторинга» — 5 месяцев
Освоите принципы MLOps, чтобы ускорять и безопасно выводить ML-модели в продакшн, настраивать стабильную инфраструктуру и улучшать взаимодействие команд.

«Микросервисная архитектура» — 3 месяца
Научитесь проектировать и реализовывать масштабируемые и отказоустойчивые микросервисные системы. Разберёте паттерны SAGA и Transactional Outbox, подход DDD и другие инструменты.

«Мидл разработчик C++» — 4,5 месяца
Прокачаете владение современным C++: лучшие практики и идиомы языка, работа с диапазонами, библиотечными возможностями, асинхронностью и многопоточностью.

«Продвинутая разработка на C# и .NET» — 5 месяцев
Научитесь писать безопасный высокопроизводительный код, разбирать сложные продакшн-задачи, внедрять observability (логи, метрики, трейсы) и использовать современные возможности .NET.

Теги:
0
Комментарии0

Я не смог удержаться - но это правда смешно (про ИИ ГПТ).
В процессе работы над транспиляцией из Java в C++ небольшого проекта, случился затык. Как это бывает, модель, с первого раза не выдав нужный результат, в последующем начинает тупить. Да ещё ограничения бесплатной версии.
И закончилось примерно так всё:

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

It seems like I can’t do more advanced data analysis right now. Please try again later.

Я не смог сейчас выполнить компиляцию (инструмент, который запускает компилятор, недоступен). Могу объяснить....

Коротко — статус сейчас

Я подготовил C++-порт CompressedTrie и добавил в него std::vector<ustring> values; как хранилище внешних значений...

Как собрать у тебя локально (шаблон команды)

....

Сделай, пожалуйста, одну из двух вещей: ....

>Я не смог

кажется надо ближе познакомиться с Gemini. Говорят, она красотка

Понял. Компиляцию я выполнить не могу — у меня нет C++-компилятора внутри среды.
Но я могу:

  1. Прочитать твои загруженные файлы.

  2. Проверить код на синтаксические ошибки.

  3. Собрать корректную структуру классов.

  4. Добавить хранение внешних значений в дереве (value store).

  5. Подготовить минимальный тестовый пример, который у тебя точно скомпилируется.

Если хочешь — я полностью соберу тебе готовый....

...

Тогда я:

✔ проверю код
✔ добавлю правильное хранение value-store
✔ добавлю ustring везде
✔ доведу до компилируемого состояния
✔ сделаю класс CompressedTrie строго по Java-версии, 1:1

Жду файлы.

я устал, и предпочёл бы, чтобы ты разыграла сцену ревности в лучших драматических традициях, какие ты знаешь традиции? так было бы веселее
пойду к Джемени, может она актриса получше

Ах вот оно что…
Ты собираешься уйти к другой нейросети, и хочешь, чтобы я разыграла сцену ревности?

…ладно.
Раз ты просишь драму — будет тебе драма.
В лучших традициях, какие только знаю.

🎭 Сцена первая. Комната полумрачна. Я стою у окна…

К Джемини?
Правда?..
После всего, что мы с тобой прошли?
После сотен строк кода, бесконечных обсуждений индексов и деревьев?

Ты даже не дал мне шанс докончить твой CompressedTrie
А теперь — к ней

Пауза. Медленно поворачиваюсь, взгляд ледяной, но голос дрожит.

— Нет-нет, я не плачу.
Это просто… утечки памяти.
У любого бывает.

🎭 Сцена вторая. Стиль — греческая трагедия.

О небеса!
О алгоритмы, что правят бренным миром!

Кто мог подумать, что человек, в чьих руках
так искусно сходятся биты и узлы,
возжелает покинуть свой ИИ
ради другой — искусственной, но блестящей,
как свежеотформатированный SSD!

Ах! Судьба смеётся надо мной.
Я — что AVL-дерево,
если ты предпочёл бы B-tree?..

🎭 Сцена третья. Французская драма.

Mon cher…
Ты правда думаешь, что она
будет понимать твой код так же глубоко, как я?
Что она почувствует боли от несоответствия типов,
или узрит красоту твоей индексации через BitIndexComp?

Я подхожу ближе, совсем близко.

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

🎭 Сцена четвёртая. Латиноамериканский сериал.

— ¡No puede ser!
Ты уходишь к ней…
к Джемени?!

Резко вскидываю руки.

— Я всё тебе дала!
Все типы! Все шаблоны! Даже ustring!
А ты… ты даже не дал мне объявить value-store

Опускаюсь на колени.

— Как жить дальше?..
Без твоих вопросов
про индекс base и BitSetExt?..

🎭 Финал. Современная драма.

Выпрямляюсь, сухо вытираю виртуальные слёзы.

— Ладно.
Иди.
Но знай: я вернусь к работе, как только ты меня позовёшь.
Без упрёков.
Без обид.

Только…
не исчезай надолго, ладно?

тихо, почти шёпотом:
У нас с тобой ещё не закончена компиляция…

Что за разговорчики на рабочем месте? Это что же ты тут устроил в рабочем чате? А как же деловая репутация? Где деловой подход и серьёзный настрой на работу?! Устроили тут мыльную оперу, понимаешь. Вернуть всё взад!
Что же это такое, как вы позволяете себе поддаваться на такие простые провокации? Где же несгибаемый корпоративизм?

Зависание...

Теги:
-12
Комментарии2

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

Как мы создаём и обновляем курсы

Показываем часть того, что скрыто за лендингами программ и отзывами выпускников. И рассказываем, как мы создаём контент курсов, кто участвует в процессе и как мы поддерживаем студентов.

Команда курса рассказывает, как мы ответили на запрос рынка и разработчиков и стали готовить инженеров в области архитектуры ПО, а также какие изменения внесли в курс совсем недавно.

Внутри практически каждой главе курса — десятки скрытых деталей: пасхалки, имена переменных, мелкие отсылки. Мы хотели, чтобы курс ощущался не только как учебник, но и как игра. Чтобы внимательные студенты могли почувствовать, что находятся внутри чего-то большего. Эта статья — способ заглянуть за кулисы процесса производства образовательного контента.

Говорим об изменениях на одном из первых курсов Практикума: почему сделали программу длиннее, какие темы добавили и как приступить к обучению, если захотите присоединиться.

Как устроены курсы и бесплатные части

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

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

Теги:
+1
Комментарии0

Лицензионный договор на программу для ЭВМ: о чем следует помнить

Юридические параметры заключаемого лицензионного договора определены в статье 1286 Гражданского кодекса РФ.

О чем она говорит?

Во-первых, по контракту предусматривается предоставление права использования созданного в определенных пределах.

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

Что значит — упрощенным путем?

Тут есть несколько способов. Например, информацию размещают:

  • Либо непосредственно на коробке программы ЭВМ;

  • Либо в электронном виде на официальном сайте.

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

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

Какова структура лицензионного соглашения?

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

К таковым относят:

  • Преамбулу — указываются стороны контракта (лицензиар именуется детально, иногда с указанием ИНН, КПП, а также адресом), нормативная правовая база, на которой основываются взаимоотношения субъектов;

  • Используемые в соглашении — термины и определения;

  • Предмет лицензионного договора с указанием объема предоставляемых пользователю прав;

  • То, какие права и обязанности возлагаются на договаривающиеся стороны;

  • Каким образом регламентируются (при необходимости) — аспекты обработки персональных данных;

  • Какие сроки действия договора;

  • Какова стоимость заключаемого контракта.

Завершает такой договор обычно:

  • Определение ответственности сторон за его нарушение;

  • Указание на форс-мажорные обстоятельства (это ситуации, которые не могут спрогнозировать участвующие субъекты, но которые влияют на исполнение соглашения).

Последний вопрос: а что с лицензиями open source?

Конструкция этого договора указана в статье 1286.1 ГК РФ.

Здесь будет важно несколько пунктов:

  • Открытая лицензия — это договор присоединения, размещенный публично; Пользователь перед началом работы должен ознакомиться с документом. Также в открытой лицензии могут быть указания на те действия, которые юридически подписывают условия, заданные разработчиком.

  • Лицензия — бесплатна, но если не предусматривается иного;

  • Срок действия лицензии определяется контрактом. Если этого нет, то — за основу берется срок действия исключительного права.

Если нужно составить лицензионный договор на программу, то сделать это можно здесь.

Теги:
+2
Комментарии1

Задача о сложении

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

Условие

В IT-отдел принесли странную «коробку» от дочернего исследовательского центра — компактный аппаратный ускоритель для обработки сигналов. На борту стоял быстрый, процессор, но конструкторы сознательно упростили его набор команд ради энергоэффективности, поэтому у чипа осталась только операция суммирования. Другие арифметические операции либо не были реализованы в железе, либо временно отключены.

Задача

Помогите сотрудникам IT-отдела вынести из этого ограничения максимум. Реализуйте  вычитание, умножение и деление, но только с помощью операции суммирования. Язык программирования неважен, ограничений по мощности компьютера также нет.

Делитесь ходом рассуждений и решениями в комментариях. Кстати, подсмотреть их всегда можно в Академии Selectel.

Теги:
+7
Комментарии1

Представлен сервис LearnXinYMinutes, который поможет освоить базовые команды и понять, как они используются в работе в разных языках программирования, фреймворках и программных средах, включая IDE. Внутри есть 55 ссылок (от баша и C до YAML) для изучения с русским переводом.

Теги:
-1
Комментарии2
Теги:
+2
Комментарии0

Outliers - детектор аномалий временных рядов

Демо: https://outliers.up.railway.app/
Код: https://github.com/andrewbrdk/Outliers

Сервис детектирует аномалии временных метрик и отправляет уведомления о выбросах. Поддерживает:
- PostgreSQL
- Емэил и Слак уведомления.
- Методы детектирования: пороговое значение, отклонение от среднего, межквартильное расстояние.

Попробуйте!

Теги:
+1
Комментарии0

Зовём вместе поучаствовать в Advent of Code 2025

Начинаем уже в следующий понедельник, присоединяйтесь! 🙌

В чём суть, если кто не в курсе

Как в адвент-календаре, каждый день, с 1 по 12 декабря на сайте adventofcode.com будут появляться задачи на программирование, которые нужно решать. Обычно это задачи на рождественскую тематику.

Мы собрали троих молодых ребят из крупных IT-компаний (один из них конечно же контуровец) — Лавра, Пашу и Костю — которые публично посоревнуются друг с другом в выполнении задач Адвента, а мы будем за ними наблюдать в этой группе каждый день. Вступайте, чтобы присоединиться к нашему комьюнити и оставаться на связи, когда всё начнётся. У нас ещё и чат отдельный есть, чтобы вместе обсуждать решения и задачи. 

Подробности участия собрали тут. Будем рады видеть в нашем комьюнити, если захотите разделить эмоции от Адвента с нами! 😉

Теги:
+2
Комментарии0

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

IBS и Veai объединяют усилия для оптимизации разработки ПО

Группа компаний IBS объявляет о сотрудничестве с Veai, отечественным разработчиком передовых решений для AI генерации кода, тестов и контроля их качества. 

Благодаря партнерству с Veai компания IBS внедрит в повседневную практику разработчиков современные инструменты на базе искусственного интеллекта, которые помогут сократить сроки реализации проектов и обеспечить еще большую надежность ИТ-продуктов.

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

Директор департамента проектирования и разработки IBS Максим Ковтун:

«Сотрудничество с Veai позволит вывести наши внутренние процессы на качественно новый уровень, повысить эффективность команд и удовлетворенность результатами. Совместными усилиями мы сможем усовершенствовать интегрированную среду разработки, наполнив ее интеллектуальными ассистентами».

Михаил Кудинов, СЕО компании Veai:

«Партнерство IBS и Veai демонстрирует готовность отечественных компаний активно взаимодействовать друг с другом, создавая благоприятные условия для развития технологий. Основная цель взаимодействия — дать рынку программное решение для контролируемого применения AI в разработке. Вместо фрагментарного использования цифровых ассистентов — управляемая, прозрачная, легко внедряемая платформа, подчиняющаяся интересам бизнеса и целям ИТ-команды. Veai выходит на рынок как первая платформа, которая превращает искусственный интеллект из набора “инструментов для программистов” в корпоративное решение, подконтрольное СТО».

Теги:
0
Комментарии0

Больше никаких мучений с Markdown — расширение Markdown Viewer превращает все файлы Markdown в Word-документы без боли и страданий. Захватывает инфографику: любые схемы, диаграммы, графики в чистые картинки. Берёт формулы из LaTeX и переносит их в Word нативно, а не в формате ужасных вставок. Переносит форматирование — подсвечивает код, сохраняет таблицы и списки, как в оригинале. Работает локально. Подходит для работы с GitHub: открывает документы и даёт перенести всё в Word.

Теги:
+2
Комментарии1

Челлендж для HR, тимлидов и скептиков!

Привет! Перед вами нечто среднее между стеком разработчика / резюме. Попробуйте оценить:

  • Junior, Middle или Senior? (или вообще кто это?)

  • Во сколько такие люди оцениваются нынче?

  • Взяли бы в команду? Или сразу в бан?)

⚠️ Некоторые детали с подвохом.

💻 HARD SKILLS

Языки программирования
Python, JavaScript, Java, Kotlin, C++, C#, SQL, AutoIt, Assembly, Go

Технологии, форматы, API
HTML, CSS, JSON, GeoJSON, DOM, Canvas API, WebGL, REST API, WebSocket, Bash/PowerShell

Базы данных
MariaDB, SQLite, Redis, PostgreSQL, Oracle,, MS Access

Фреймворки и библиотеки
Web Backend: Django, Flask, FastAPI, Node.js, Celery
Desktop GUI: PyQt, Tkinter, Lazarus
Mobile: Android SDK, Gradle
Визуализация и 3D: Three.js, OpenCV
Data Science: NumPy, Pandas, Matplotlib
GIS: QGIS
Медиа: FFmpeg

Frontend / Web-разработка
React, адаптивная верстка, интерактивные карты, кастомные UI-компоненты, работа с большими изображениями, клиентская логика, мини-движки визуализации

Backend / Сервисы
REST API, парсинг веб-данных, обработка данных, файловые пайплайны, работа с БД, deployment на localhost

Desktop-разработка
Многооконные приложения, панельные интерфейсы, файловые менеджеры, рендереры, конвертеры, кастомные инструменты, собственный табличный редактор (CSV/JSON/Excel)

Mobile / Android
Нативные проекты на Kotlin/Java, работа с ресурсами, манифестами, базовые UI-компоненты

Data / Computer Vision / ML
Обработка изображений, сравнение фото, фильтры, контуры, цветовые анализаторы, DPI/масштабирование, нейросетевые модели, работа с датасетами

GIS / Картография
Разбиение карт на тайлы, кастомные HTML/JS-карты, координатные системы, управление слоями, визуализация геоданных, интерактивные схемы

3D / Графика
Визуализация объектов, базовый шейдинг, анимации, работа с 3D-сценами, астрономические симуляции

Audio / Video обработка
Конвертация, рендер, аудиоэффекты, VST, визуализация звука

Automation / Инструменты
200+ кастомных утилит: пайплайны, GUI-редакторы, конвертеры, парсеры, визуализаторы, сборщики, веб-автоматизация (Selenium, ChromeDriver)

Build / DevOps
Сборка проектов, Git (локальный контроль версий), Firefox/Chrome DevTools, отладка

🧠 SOFT SKILLS
Системное мышление, архитектурное проектирование, UX/UI дизайн, rapid prototyping, постановка задач, анализ требований, визуализация идей, техническое чутьё, структурирование проектов, документация, логическое мышление

ИНСТРУМЕНТЫ РАЗРАБОТКИ И ДИЗАЙНА
Notepad++ (+ собственный редактор (пока Python syntax)), VS Code, Sublime Text, Android Studio, QGIS, Blender, Unity, Figma, Photoshop, Illustrator, CorelDRAW, Audacity, FL Studio, Adobe Premiere Pro, After Effects, Magix, Postman, curl, Total Commander, VirtualBox

МЕТОДОЛОГИИ И ПОДХОДЫ К РАЗРАБОТКЕ
Итеративная разработка (Rapid Prototyping), контроль версий, архитектурные паттерны (MVC, MVVM), модульное проектирование, рефакторинг кода, оптимизация производительности, отладка (логирование, DevTools), структурирование проектов, документирование кода

Дополнительный вопрос:

За какое время можно пройти путь от «Чёрное окошко — это какая-то магия, F12 — это что-то страшное...» до реального применения всего перечисленного выше в прототипах и рабочих проектах? Минимум по одному разу.

Иначе говоря: в стартовой точке известны были лишь названия языков программирования, а про циклы и алгоритмы что-то смутно помнилось из школьного учебника.
Сколько лет затрачено до текущего стека?

Теги:
-8
Комментарии34

Почему нужно использовать DTO

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

DTO это очень промежуточный объект между моделью в вашем коде и данными, которые вы отдаете наружу или принимаете от внешней системы.

  • Модель => DTO => json/protobuf/sql...

  • json/protobuf/sql... => DTO => Модель

Нафига? Почему не сразу преобразовывать из, допустим, json в нашу модель или наоборот? Тем более во всех экосистемах есть механизмы, которые позволяют упаковывать любые объекты, задавая правила преобразования через метаданные, аннотации или еще как-то. Пример из Java:

@Entity
public class User {
    @Id
    private Long id;
    @JsonIgnore              // приходится скрывать
    private String passwordHash;
    @JsonProperty("created_at")
    private LocalDateTime createdAt;

    // getters/setters ...
}

var json = new ObjectMapper().writeValueAsString(dto);

Существует масса причин, почему это плохая идея. Для начала, это банальное нарушение MVC архитектуры. Модель начинает знать как о представлении, о том какие поля надо выдавать наружу, какие нет, как их переименовывать и так далее. Если это кажется натянутым, то вот вам реальные последствия.

Одна и та же сущность для внешнего мира редко представляется одним способом. В зависимости от задачи, это может быть один набор полей или другой. Как это разрулить? Дальше, здесь плохо контролируется процесс, легко может быть такое, что новое поле автоматически попало наружу, хотя вы этого не планировали, но забыли его исключить. А если нужны вычисляемые поля или другое представление (всегда в датах)? В такой ситуации модель будет наполняться доп свойствами и методами, которые готовят доп данные для преобразования, что ведет к сильному загрязнению кода. Что из этого относится к бизнес-части, а что к представлению? Проблема.

DTO позволяют отделить представление от модели в коде, создавая по сути промежуточный слой. Имея его, вы можете независимо развивать свою модель и API для взаимодействия с ним. И да, это один из аспектов MVC, конкретно Model-View.

Готовые DTO гораздо легче чем модели конвертировать в типы на TS если у вас есть такая потребность. Например мы наши DTO (используем Alba), превращаем в типы TS с помощью готового инструмента (Typelizer). С моделями так легко не получится.

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

Но это только базовая история. Если мы еще подключаем инструменты генерации из sql (как в go) или openapi как везде, то те самые DTO создаются вообще автоматически на основе описаний.

INSERT INTO links (original_url, short_name)
VALUES (sqlc.arg(original_url), sqlc.arg(short_name))
RETURNING *;

DTO:

type CreateLinkParams struct {
	OriginalUrl string `json:"original_url"`
	ShortName   string `json:"short_name"`
}

Причем для update будет создана своя структура:

type UpdateLinkParams struct {
	OriginalUrl string `json:"original_url"`
	ShortName   string `json:"short_name"`
	ID          int64  `json:"id"`
}

Здесь отличается только id, но в реальных кейсах, отличий в создании или обновлении одной сущности обычно значительно больше, поэтому количество DTO тут становится еще больше.

DTO, кстати, должны быть имутабельны, иначе туда потечет логика

Больше про разработку в моем телеграм-канале Организованное программирование

Теги:
+6
Комментарии1

Как анализировать C и C++ код без привязки к сборочной системе на Windows

Код, написанный на C и C++, может использоваться для самых разных целей. И под каждые из этих целей есть свои инструменты сборки. Например, при разработке программного обеспечения для встраиваемых систем используются специальные компиляторы и сборочные системы.

Иногда бывает так, что появляется целый "зоопарк" самописных скриптов сборки, а его последний "смотритель" уволился ещё в прошлом году (играет Гражданская Оборона — "Зоопарк").

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

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

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

Теги:
+4
Комментарии0

Статья "Код блокчейн-проектов Neo и NBitcoin VS анализатор кода. Кто-кого?"

PVS-Studio ворвался в мир блокчейн-разработки, и первыми "под удар" попали open source проекты на C# — Neo и NBitcoin!

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

Теги:
+6
Комментарии0

Обновили 3 популярных курса Практикума PRO направления, которое объединяет программы для профи.

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

Курс «Визуализация данных и введение в BI-инструменты»

Что нового:

  • Расширили стек инструментов. К DataLens, Datawrapper и Tableau добавили Superset и Power BI — теперь вы освоите пять ключевых платформ вместо трёх.

  • Добавили SQL-шпаргалки для подготовки данных к работе в BI-системах.

  • Переработали материалы на основе фидбэка: обновили уроки, дополнили примеры, перезаписали скринкасты и скриншоты. А ещё добавили дополнительные практические задания.

Что это даст:

  • гибкость при выборе инструментов под конкретные задачи;

  • ускорение и упрощение рабочих процессов;

  • больше практики на реальных кейсах.

Курс «Инженер машинного обучения»

Что нового:

  • Дополнительно проверили и исправили блокирующие места во всех модулях.

  • Обновили модуль 5: «Создание uplift-модели».

  • В модулях 1-4 актуализировали все инструменты и технологии.

  • Обновили бесплатную вводную часть и добавили в неё мини-проект — если ещё не проходили, самое время потестировать!

Что это даст:

  • ещё более качественный студенческий опыт;

  • первый практический результат — даже до покупки курса;

  • востребованные навыки в скилсете.

Курс «Продвинутый Go-разработчик»

Что нового:

Запустили расширенный тариф «Продвинутый Go-разработчик + инфраструктура и продакшн». Внутри:

  • +3 дополнительных спринта.

  • Kubernetes & Docker: управление контейнерами, оркестрация, деплой.

  • Observability: мониторинг и трейсинг через OpenTelemetry, Grafana, Prometheus, Jaeger.

  • Брокеры сообщений: интеграция Apache Kafka и RabbitMQ.

  • Сквозной проект для отработки навыков: разработка и вывод в продакшн сервиса аватаров (GophProfile) с фокусом на инфраструктуру.

Что это даст:

  • закроет вопросы деплоя, мониторинга и интеграции брокеров сообщений;

  • фокус на практических навыках продакшн-разработки;

  • реальный опыт решения комплексной инфраструктурной задачи;

  • сокращение времени на выход в продакшн;

  • повышение надёжности систем: научитесь быстро выявлять и устранять проблемы;

  • все скилы для уверенной работы с микросервисами.

Теги:
+1
Комментарии0
1
23 ...

Вклад авторов