Полгода назад мне посчастливилось решать интересную и нетипичную задачу по затаскиванию Symfony в Yii2 монолит. В данном материале я подробно и пошагово распишу весь процесс решения этой задачи с пояснениями, почему были выбраны именно такие решения и как это работает.
Программирование *
Искусство создания компьютерных программ
Новости
Программист за $4000 против ChatGPT за $20: кто победит в 2025?
Можно ли уже сейчас заменить команду разработчиков на нейросеть и шесть промпт-инженеров? Почему крупные компании до сих пор платят программистам по $4000, когда есть ChatGPT за $20? На дискуссии, которая прошла на Youtube-канале Ai4Dev менеджеры российских IT-компаний неожиданно разошлись во мнениях о будущем индустрии. Пока одни утверждают, что LLM способны писать код лучше людей, другие приводят неочевидные причины, почему полная автоматизация разработки невозможна. Но главный вопрос – действительно ли программисты сознательно тормозят внедрение ИИ, чтобы сохранить свои рабочие места, или есть объективные причины, по которым даже Google использует нейросети только для генерации 25% кода? Разбираемся вместе с экспертами, что на самом деле происходит на передовой борьбы человека и машины в IT.
Lombok в Java: избавляемся от бойлерплейта
Привет, Хабр!
Если вы писали на Java хоть раз, то знаете этот ужас — бесконечные геттеры, сеттеры, конструкторы, да ещё toString()
и equals()
на закуску. Одной только стандартной обвязки в классах моделей больше, чем самого кода.
Lombok — это библиотека, которая берёт всё это бойлерплейтное безумие оставляет только чистую суть.
Проводим идеальное собеседование разработчика. Советы от практика с тысячей собеседований за спиной
Собеседование — это ключевой этап, определяющий, насколько кандидат подходит компании. Важно создать процесс, который не только выявит технические знания, но и покажет, насколько человек соответствует корпоративной культуре, стрессоустойчив ли он и способен ли работать в условиях реальной нагрузки.
Тестовое задание
Перед собеседованием можно добавить этап выполнения тестового задания. Хорошее тестовое задание должно быть максимально приближено к реальным задачам. Чтобы оценить навыки, можно предложить что-то объёмное, например, разработку небольшого, но полнофункционального сервиса. Важно, чтобы кандидат сделал всё самостоятельно и в кратчайшие сроки — это покажет, насколько он заинтересован в позиции. Если человек отказывается от тестового задания, это говорит о недостаточной вовлечённости.
Собеседование
Сколько человек должно проводить собеседование? Оптимально 3-5. Один интервьюер может что-то упустить, а вот группа сможет задать вопросы с разных точек зрения.
Истории
Гармония железа и кода: ускоряем Go, проектируя приложение с учетом архитектуры процессора
Представьте, что ваш код работает на 30% быстрее, при этом вы почти его не меняли. Звучит как магия? На самом деле это может стать реальностью, если учитывать архитектуру процессора при проектировании приложения и данных.
Привет! Я Александр Шакмаев — технический лидер в Cloud.ru. В статье предлагаю разобраться, как небольшие изменения, основанные на знании архитектуры процессора, могут привести к значительному ускорению Go. Готовы раскрыть потенциал вашего кода? Тогда переходите под кат.
Миграция на строгий TypeScript: наш путь и собственное решение
Наш проект имеет долгую историю. И за это время подходы к разработке фронтенда успели несколько раз измениться. В какой-то период в проекте можно было встретить код на JavaScript, CoffeeScript и TypeScript. Плюс сам TypeScript успел обновиться несколько раз за время существования проекта со второй до пятой версии.
Сейчас TypeScript практически вытеснил весь остальной код, но процесс по переписыванию с других языков занял много времени. И чтобы была возможность переиспользовать уже написанный код в TS-модулях, было принято решение отказаться от строгих проверок. Из-за выключенных проверок в коде накопилось большое количество использований any, а также отсутствующих проверок на null. Это, наверное, основные две проблемы, которые не позволяют единовременно пройтись по всей кодовой базе и за раз исправить все ошибки, возникающие при включении строгих проверок.
В общем, если вам знакома эта ситуация, то статья для вас. Меня зовут Максим Овчарик, я ведущий фронтенд-разработчик в Selectel. Под катом расскажу, как мы строили процесс миграции кода на строгий режим TypeScript.
Model Context Protocol (MCP): Стандартизация взаимодействия AI-приложений
Где-то летом 2024 года в некоторых OpenAI сервисах появилась возможность использовать "инструменты".
Инструмент — это функция, которая выполняется на сервере и возвращает некий результат. Например, в ChatGPT можно было использовать инструменты для поиска информации в интернете, для генерации изображений и т.д.
Это был закрытый API, который использовался внутри OpenAI, и как и что там происходило было довольно туманно.
Anthropic
(создатель Claude
) совершил мини-революцию в AI инструментарии, создав открытый протокол Model Context Protocol (MCP) с расширенными возможностями для создания подобных инструментов и даже больше.
Уже сейчас можно подключать MCP серверы к IDE, например, Cursor AI или Cline, и значительно расширить их возможности. Так же это может рассматриваться как, как минимум, частичная замена RAG
и fine-tuning
.
И если раньше ваше приложение заискивая пыталось выклянчить у чатбота подходящий результат, то теперь доминанта бизнес-логики снова вернулась к нему, а LLM работает простым сервисом.
Алгоритмы из теории графов: решаем сложную задачу из курса по Яндекс Практикума
Привет! Меня зовут Евгений, и сегодня я представляю курс «Алгоритмы и структуры данных» Яндекс Практикума. В этой статье хочу вам рассказать про задачу, которая долгое время была проблемой для многих наших студентов. В том числе расскажу про несколько вариантов решения и о том, как их можно доработать.
Также я дам решение с помощью теории графов, основная сложность которого заключается в чтении входных данных.
Range-v3 в C++
Привет, Хабр!
В этой статье рассмотрим Range-v3 — библиотеку, которая изменила подход к обработке последовательностей в C++ и стала основой для std::ranges
в C++20.
Range-v3
— это библиотека, расширяющая стандартную библиотеку C++ возможностью работать с диапазонами вместо begin()
/end()
. В основе идеи лежат три концепции.
Параллельный A на Rust и Rayon: ищем путь для воробушка*
Привет, Хабр! Сегодня у нас задачка из мира природы: представьте, что маленький воробушек потерялся в городе. Ему нужно срочно найти путь домой, а дороги кишат кошками, людьми и прочими препятствиями. Разумеется, вручную искать маршрут — не вариант. Нам нужен алгоритм, а лучше параллельный, чтобы воробушек не ждал вечность.
Какой алгоритм взять? Конечно же A*. Он и кратчайший путь найдёт, и с умом его построит. Но в одиночку он справляется медленно. Поэтому подключаем Rayon — библиотеку для многопоточных вычислений в Rust.
Spring Security: разберём по полочкам токены, фильтры и авторизацию (с диаграммами!)
Команда Spring АйО перевела статью, в которой подробно рассматривается процесс регистрации и аутентификации пользователей с использованием Spring Security.
Как обойти гору: эффективные приёмы обработки пользовательских данных
Умный в гору не пойдёт, умный гору обойдёт. А если это гора пользовательских данных? Тогда тоже обойдёт — но не в смысле «вокруг», а буквально заглянет под каждый камень, чтобы ничего не упустить. Разберём в статье, как быстро и эффективно обойти данные, если требуется, к примеру, перенести их в новое хранилище или сделать анализ содержимого.
Меня зовут Андрей Баталов, я старший программист в VK Музыке. Расскажу об эффективных приёмах, которые помогают нам в переобходах аудиообъектов и других данных всех пользователей ВКонтакте.
Суть Go: Time
Как не утонуть в параллельных вызовах и держать время под контролем? В статье разберём throttle и backpressure, научимся использовать таймеры, тикеры и таймауты без лишних задержек и зависаний — всё на простых примерах.
Ближайшие события
Клон ChatGPT в 3000 байтах на C, основанный на GPT-2
Эта программа представляет собой свободную от зависимостей реализацию GPT-2. Она загружает матрицу весов и файл BPE из оригинальных файлов TensorFlow, токенизирует вывод при помощи простого энкодера, работающего по принципу частотного кодирования, реализует базовый пакет для линейной алгебры, в котором заключены математические операции над матрицами, определяет архитектуру трансформера, выполняет инференс трансформера, а затем очищает вывод от токенов при помощи BPE-декодера. Всё это — примерно в 3000 байт на C.
Код достаточно эффективно оптимизирован — настолько, что малый GPT-2 на любой современной машине выдаёт отклик всего за несколько секунд. Чтобы этого добиться, я реализовал KV-кэширование и применил эффективный алгоритм перемножения матриц, а также добавил опциональный OMP-параллелизм.
Взяв это за основу, можно создать некий аналог Chat GPT — при условии, что вас не слишком волнует качество вывода (объективно говоря, вывод получается просто ужасный… но решение работает). Здесь есть некоторые глюки (особенно с обработкой символов в кодировке UTF-8), а для эксплуатации модели размером XL с широким контекстным окном может потребоваться ~100 ГБ оперативной памяти. Но, если вы просто набираете текст в кодировке ASCII при помощи малого GPT2, то такая модель должна нормально работать примерно везде.
Я выложил весь код на GitHub, поэтому можете свободно брать его там и экспериментировать с ним.
Windsurf vs Cursor IDE: кто лучший AI-редактор кода?
Две популярные IDE (среды разработки) с поддержкой искусственного интеллекта: Windsurf и Cursor. Оба инструмента заявляют, что ускорят процесс написания кода, но какой из них лучше подойдет именно вам? Я тщательно изучил обе, и ниже расскажу к каким выводам пришел.
Наверное вы слышали про Composer в Cursor (функциональность типа агента, ему можно формулировать задание в чате на естественном языке, он пишет и запускает скрипты в командной строке, при этом он может сам разобраться что ему нужно для понимания контекста). Если вы как и я фанат Composer, то стоит сказать спасибо Windsurf, они первыми придумали такое в их Cascade.
Еще раз о забытом. Roslyn Source Generators
Каждый разработчик часто сталкивается с написанием большого объема рутинного и повторяющегося кода, который имеет один и тот же смысл. Начиная с C# версии 9 появилась возможность генерации кода, которая интегрирована напрямую с компилятором. Такой подход позволяет избавиться от множества строк шаблонного кода. О нём сегодня и поговорим.
Гид по IT-сообществам: форматы, особенности и очень много ссылок
Привет! Меня зовут Юля. Я разработчик интерфейсов и ментор на курсах по фронтенду, в том числе на курсе «React-разработчик» в Практикуме. Последний год я активно занимаюсь организацией профессионального сообщества Tbilisi JS в Тбилиси: мы делаем митапы и конференции для разработчиков.
Тема сообществ и чем они могут быть полезны меня бесконечно занимает. Об этом и будет мой лонгрид: я хочу рассказать, как много пользы и фана может принести участие в сообществе и почему это классная идея сама по себе. Впереди море примеров и ссылок на чаты, митапы, стажировки и много чего ещё :-)
Обработка ошибок REST API: лучшие практики
Привет, Хабр! Меня зовут Екатерина Саяпина, я Product Owner платформы МТС Exolve. Коды ошибок — последнее, что хочет видеть разработчик в ответе API. И означают они одно из двух: либо есть проблема в запросе, либо что-то сломалось на стороне API.
В любом случае трафик останавливается: нужно найти причины и решения. И коды ошибок в этом случае — полезный диагностический элемент. Сегодня я расскажу про подходы к их обработке и дам пример распространенной классификации.
Ускорение LLM: универсальные методы для популярных архитектур
ML‑модели применяются в сервисах Яндекса уже много лет, мы накопили большой опыт в их обучении. Статьи об этом коллеги регулярно публикуют, в том числе на Хабре. Но сегодня хочу обсудить другую не менее важную задачу — ускорение инференса (процесса работы на конечном устройстве) моделей. Скорость зависит от разных условий, главным образом от архитектуры и железа, но есть множество интересных способов повлиять на неё. Особенно актуальна проблема тяжёлого инференса при использовании больших языковых моделей (LLM) — на то они и large!
Для команды YandexGPT, в которой я и тружусь вместе со своими коллегами, тема инференса LLM находится в разряде вечных вопросов. С предыдущей статьи прошёл уже почти год, опыта у нас стало больше — получилось протестировать новые подходы, которыми и хочется поделиться сегодня.
Создание файлового сервера на c++ и Boost
В этой статье я описал процесс создания файлового сервера — инструмента для организации доступа к файлам по сети. В статье представлен пример реализации файлового сервера на C++ с использованием библиотеки Boost.Beast и Boost.Filesystem. Сервер позволяет просматривать содержимое указанной директории и поддиректорий, скачивать файлы.
Вклад авторов
alizar 4446.2ru_vds 4064.4olegchir 3450.6haqreu 2943.0tangro 2672.2nmivan 2585.0kesn 2578.0badcasedaily1 2536.0MaxRokatansky 2448.8DmitrySpb79 2296.0