Все потоки
Поиск
Написать публикацию
Обновить
1031.71

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

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

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

Математика бэкдора в Dual EC DRBG

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров2.9K

Dual EC DRBG - нашумевшая схема генератора псевдослучайных чисел, который был стандартизован, несмотря на потенциальный бэкдор. Математическая часть данного бэкдора интересна и сама по себе, но особенно - как важная веха в истории современной криптографии. Статья посвящена математической части бэкдора и в деталях объясняет то, почему он работает. Для понимания потребуется хотя бы минимальное знакомство с основными понятиями алгебры и криптографии.

Читать далее

InterpolatedStringHandler: избавляемся от лишних аллокаций в логах

Время на прочтение4 мин
Количество просмотров2.2K

Классический ILogger.LogInformation($"User {userId}") выглядит безобидно, но на деле компилятор: формирует итоговую строку через string.Format‑like логику, боксит userId, DateTime, struct‑ы и прочее добро, а так же линкует все в object[] ради структурированных логов.

Аллокационная цена вопроса — порядка 80 Б на сообщение (плюс трансферы в LOH, если вы особо многословны).

В.NET 8 Microsoft даже вынесла отдельный раздел «high‑performance logging» и честно сказала: «Да, обычные extension‑методы логов боксят и аллоцируют»

С выходом C# 10 компилятор научился разбирать $"строка" не напрямую в string, а в handler: структуру, которая получает куски литералов и плейсхолдеры. Базовый — DefaultInterpolatedStringHandler.

Читать далее

Telegram AI Companion: веселый проект на Rust, Telegram и локальном ИИ

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.7K

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

Недавно я собрал небольшой, но бодрый pet-проект — Telegram AI Companion. Это Telegram-бот, который умеет болтать с вами, используя локальную языковую модель через LocalAI. Без OpenAI, без облаков — всё на своём железе.

Цель проекта — не революция в AI, а именно учебное и увлекательное погружение в Rust, асинхронность, Telegram API и локальные LLM-модели. Такой себе “бот-компаньон”, но больше для разработчика, чем пользователя :)

Если вам интересно:

Читать далее

Андрей Карпатый: Swift? Не слышал! Как я iOS-приложение на чистом «пожалуйста» написал

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

Что если создать мобильное приложение, не зная ни строчки кода на Swift? Добро пожаловать в мир вайбкодинга — нового стиля программирования «по настроению», где естественный язык и LLM заменяют синтаксис и компиляторы.

Во второй части выступления Андрея Карпатого мы также поговорим о новом типе «пользователей» — LLM‑агентах («духах людей») и о том, как адаптировать нашу инфраструктуру (документацию, API, сайты) для их удобства с помощью... llms.txt. Готовы ли вы кодить «в потоке» и строить для нечеловеческих интеллектов?

Читать далее

Развертывание микросервисов: проблемы, решения, стратегии, антипаттерны, практические рекомендации

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров7.4K

Микросервисы перевернули игру в разработке приложений. Они сулят гибкость, отличную масштабируемость, командам — больше независимости. Но вот переход на них принес с собой и новые головные боли. Особенно когда дело доходит до развертывания. Управлять кучей мелких, отдельно выкатываемых кусочков — задачка та еще. Старые приемы тут часто пасуют. Нужны свежие идеи, другие инструменты, а главное — по‑другому смотреть на вещи.

Читать далее

Андрей Карпатый: «ПО снова меняется (и опять радикально)»

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

Представьте карту всего кода в мире: GitHub, Hugging Face... Но что, если я скажу, что самая захватывающая часть этой карты сейчас даже не код, а промпты? Программное обеспечение снова меняется радикально, и на этот раз естественный язык становится новым языком программирования.

В этой статье, записанной по выступлению Андрея Карпатого на конференции AI Startup School, мы разберём, как радикально меняются парадигмы разработки, почему LLM — это не просто «новое электричество», а сложные экосистемы и как концепция «частичной автономии» определяет будущее приложений. Будущее ПО уже здесь, и оно говорит на вашем языке.

Читать далее

История Java: развитие, изучение Марса, битва с Microsoft, Spring, Gradle и Maven, IntelliJ IDEA и Eclipse

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров4.1K

От появления до покорения Красной планеты. В этой статье — история языка Java: от первых шагов и битвы с Microsoft до инструментов, без которых не обходится ни один Java разработчик. И да, вы узнаете, при чём здесь дуб, кофе и остров.

Читать далее

Как Cursor устроен изнутри. Часть 1

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров34K

Вторая часть статьи здесь

Всего за год нагрузка на Cursor выросла в 100 раз: более 1 млн запросов в секунду и миллиарды автодополнений кода каждый день. Подробный разбор архитектуры — вместе с сооснователем Суалехом Асифом.

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

Стартап, стоящий за Cursor — Anysphere, был основан в 2022 году, а в марте 2023 года запустил Cursor. Недавно Anysphere сообщила, что привлекла $900 млн, при оценке компании в $9.9B. Годовой доход (автор имеет в виду годовой повторяющийся доход, Annual Recurring Revenue, ARR. Прим. пер.) уже превысил $500M. Ни одна другая компания в сфере инструментов для разработчиков, которую я знаю, не достигала этого рубежа в течение первых 2 лет после запуска первого продукта. Поспособствовало этому и то, что Cursor используется более чем половиной из 500 крупнейших технологических компаний из списка Fortune 500.

Я встретился с сооснователем Cursor, Суалехом Асифом, чтобы узнать, как работает Cursor и как команда этот инструмент создает. Обсудили следующие темы:

Технологический стек. TypeScript, Rust и куча облачных провайдеров — Turbopuffer, Datadog, PagerDuty и другие.

Как работает автодополнение. Устройство low-latency движка для передачи зашифрованного контекста на сервер для инференса.

Читать далее

Как написать микробенчмарк

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

Команда Spring АйО перевела статью, в которой приведено несколько правил, которые следует учитывать при написании микробенчмарков для HotSpot JVM.

Читать далее

Технический дизайн

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров815

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

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

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

Читать далее

Не одним MacBook единым: ноутбук для айтишника

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

В этой статье я хочу поделиться своим опытом использования не‑яблочного ноутбука в мире, где каждый второй айтишник считает своим долгом выложить фотографию своего рабочего места с MacBook и кружкой с лавандовым рафом. Это не попытка доказать, что «макбук плох» или, тем более, что стоит брать HP Victus (не стоит), а мой личный путь с железом, которое сопровождало меня в пути от обычного студента до уже смешарика и винтика в корпоративной машинерии. Можно сказать, история жизни и страданий с HP Victus.

Читать далее

Почему C++ считает мой класс копируемым, если его нельзя скопировать?

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров6.5K

Рассмотрим следующий сценарий:

template<typename T>
struct Base
{
// Есть конструктор по умолчанию
Base() = default;

// Некопируемый
Base(Base const &) = delete;
};

template<typename T>
struct Derived : Base<T>
{
Derived() = default;
Derived(Derived const& d) : Base<T>(d) {}
};
// Это assertion выполняется?
static_assert(
std::is_copy_constructible_v<Derived<int>>);

Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int>. И в самом деле, если попробовать скопировать его, то мы получим ошибку.

Читать далее

Зажигаем миллиард цветов миллионом строк

Уровень сложностиСредний
Время на прочтение127 мин
Количество просмотров13K

Надругательство над C#, C++ и HLSL, игрища с булками и буферами, тройная полиглотность, SIMD, пепекторы, DirectX, экономия 800 Тб ОЗУ, новая парадигма программирования, многопроцессностьбыстрая степень и многое другое.

В этой части я расскажу, как делал софт на собственном фреймворке, который управляет ядерной подсветкой и механической видеостеной.

Осторожно, трафик!

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

Найм в IT всё-таки мёртв

Время на прочтение3 мин
Количество просмотров73K

Или почему найти работу в 2025 году стало практически невозможно.

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

Но сейчас всё по-другому

Читать далее

Как это было: соревнования по спортивному программированию на Кубке России

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

Всех хабровцев с началом лета! С вами Иван Клюев, я занимаюсь организацией и продвижением соревнований по программированию в России. Сегодняшний пост — репортаж о том, как сборные команды регионов боролись за Кубок России от Федерации Спортивного Программирования. Члены команд, занявших первые 3 места в своих дисциплинах, получили звания КМС (Кандидатов в Мастера спорта России).

Читать далее

Очередной эмулятор Nes. Продолжаем

Уровень сложностиСредний
Время на прочтение42 мин
Количество просмотров4.1K
image

Всем привет! С вами на связи снова Сергей, и я продолжаю творить «чудо».

В прошлой статье я немного задел тему эмуляции процессора. Советую почитать, кто не читал (ну, опять же, на ваше усмотрение — если решили сделать эмулятор сами, то лучше прочитать). Кстати, я обновил ту статью и немного пробежался по прерываниям. В этой статье, видимо, будет ещё больше технической информации — по правильной реализации памяти и работе с ней. И, наконец, доберёмся до видеоадаптера (PPU).
Читать дальше →

КАША в голове, КАША в коде — первые шаги к порядку

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

7 советов для начинающих программистов

Заметил? Многие, кто только начал изучать программирование, сразу ныряют в сложные штуки и пытаются прыгнуть выше головы.

Я через это проходил.

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

А если хочешь те же советы, но с мемами, щепоткой иронии и айтишной тоской - загляни в видео.

Читать далее

Сайт с роутингом за вечер без единой строки кода на Next.js с помощью Vercel AI

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

В этой статье я расскажу, как всего за один вечер создал полноценный адаптивный SPA-сайт на Next.js без единой строчки кода — используя только AI и текстовые промпты.

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

Если вы думаете, что для создания SPA обязательно нужна кастомная разработка — эта история покажет, как современные AI-инструменты могут значительно упростить и ускорить процесс.

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

Читать далее

Найм в IT мертв. Или нет?

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров38K

Всем привет!

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

Читать далее

Как привинтить Python к Go

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров4.7K

Здравствуйте,

Меня зовут Александр Певзнер, и я программирую на Си и Go. Go обычно ассоциируется с бакендом, микросервисами и вот этим вот всем. Но я использую его необычным образом: я пишу на нём системное ПО.

Почему я это делаю именно на Go? Этот язык привлекает меня своей простотой, лаконичностью, ясной семантикой, прекрасной документацией и великолепной стандартной библиотекой.

Одна из моих программ, ipp-usb, написанная на Go, входит во все дистрибутивы Linux и *BSD и делает возможным использование принтеров и сканеров, которые подключаются к USB и поддерживают IPP over USB протокол - т.е., примерно всех современных.

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

Это всё начиналось для меня, как хобби, но сейчас это - часть моей оплачиваемой работы.

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

Об одной из таких штук и пойдёт речь в этой статье.

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

Размышляя о том, на каком языке программа должна скриптоваться, в выбирал между JS, Lua и Python.

Однако, JS и Lua - слишком нишевые языки. JS ассоциируется у всех с вебом а Lua - с разработкой игр. Таким образом, выбор естественным образом пал на Python. Этот язык знают все, а я испытываю некоторую надежду, что скрипты для моей программы буду писать не только я. Хотя сам я, должен признаться, Python не знаю и не люблю :)

Таким образом, осталось только придумать, как встроить интерпретатор Python-а в программу на Go.

Об этом и пойдёт речь в этой публикации

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