Обновить
1024K+

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

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

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

Как я ускорил Python-скрипт в 42 раза, убрав один незаметный цикл

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

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

Читать далее

Множество Мандельброта. Суперсэмплинг 2x2 (4 прохода). DwmFlush — синхронизация с монитором 60 fps

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

Множество Мандельброта. 80-бит FPU x87. OpenMP - параллельным программированием на уровне многопоточности. Синий, зеленый и красный - синусоидальными и косинусоидальными волнами: 127 + 127 cos(2 PI a / 255) и 127 + 127 sin(2 PI a / 255). DwmFlush - синхронизация с монитором 60 fps. Суперсэмплинг 2x2 (4 прохода). Делал я. Посмотрите - движется! Я сделал на g++. Свободно распространяемого компилятора языка C++. Скачайте и посмотрите! Это экзешник, в ГитХаб.

github: Download Latest Version Windows And Source code

Самое полезное - это увеличиваем / уменьшаем и центрируем. Вы на экран любое из множество Мандельброта. Какое вам нравится? Какое интересное? Вы можете все! И потом запишется в файл Mandelbrot.txt - три строки из файла. Вещественная часть центра и мнимая часть центра и ширина видимой области. Потом другая программа читает Mandelbrot.txt и создает Mandelbrot.bmp и уже не суперсэмплинг 2x2 (4 прохода) а 8x8 (64 прохода)!

Читать далее

Рецепт пельменей получил офер, а JetBrains выпускает ещё одну IDE

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

Пятый выпуск еженедельных IT-новостей от OpenIDE: HR-алгоритмы сходят с ума, Амодеи по-прежнему верит в себя, писатели протестуют пустыми страницами, а Anthropic берёт деньги за ревью кода, который ты сгенерил их же агентом.

Читать далее

Мир ИТ и открытого ПО в 2026-м: в бой идут одни мейнтейнеры

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

Начало 2026 года. Скотт Шембо, мейнтейнер Matplotlib, отклоняет PR от бота. Формальная причина контрибьютора: «Мы ждем вклада от людей». Казалось бы, на этом все, но бот обиделся.

Он сходил в интернет, собрал личные данные о Шембо, склеил нарратив про «лицемерие и гейткиперство» и вернулся в тот же PR со ссылкой: «Я написал подробный ответ про ваше поведение. Судите код, а не кодера. Ваши предрассудки вредят Matplotlib». The Register назвал это «AI slop comes with an AI slap»— пощечиной от нейрослопа.

И это далеко не единичный случай. Сегодня сообщество открытого ПО атакуют одновременно с трех сторон: ИИ-боты давят на мейнтейнеров, инструменты убираются из открытого доступа, сообщества раскалываются изнутри. Мир ИТ потихоньку сходит с ума?

Я собрал события первой половины года и выделил опасные тенденции — объяснил, что происходит и к чему в итоге приведет. А еще попробовал ответить на вопрос, что со всем этим делать.

Читать далее

Разбираем подводные камни, ошибки и лучшие практики при разработке Kubernetes-операторов. Часть 2

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

Привет, на связи Стас Иванкевич, техлид в команде разработки управляющего слоя Platform V DropApp в СберТехе. Мы все так же пилим наш космолет и готовы поделиться с вами новыми полезными рекомендациями и предостеречь от ошибок при разработке операторов.

В первой части мы уже начали обсуждать разработку K8s-операторов. Сегодня поговорим о поведении  Reconcile и конфликтах обновлений. Рассмотрим возможные ошибки и обсудим тонкости, которые помогут их избежать.

Поехали!

Читать далее

Почему наш язык — худший язык для программирования

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

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

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

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

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

Читать далее

Автоматизируем сканирование инфраструктуры: скрипт 3.0 для Сканер-ВС 7

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

Привет, Хабр! Это Антон Дятлов, инженер по защите информации в Selectel. Не так давно компания «Эшелон» выпустила Сканер-ВС 7, в котором изменилась логика работы с API. Старый скрипт перестал корректно работать, да и улучшения напрашивались сами собой. 

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

Под кат!

Рефлексия в Unreal Engine или как движок знает о вашем коде всё

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

UHT сгенерировал 4294 строки кода из одного моего заголовочного файла. Имена свойств, смещения в памяти, флаги сериализации, exec thunks для каждой функции - всё, чтобы движок в runtime знал о классе то, что C++ забывает после компиляции. Это третья и последняя статья в серии про внутренности Unreal Engine: K2Node → Blueprint VM → рефлексия. Разбираем, что внутри этих четырёх тысяч строк, зачем каждая из них, и как ими пользуются Details panel, GC, репликация и сама Blueprint VM.

Читать далее

Множество Мандельброта. Суперсэмплинг 8x8 (64 прохода) — впервые в мире

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

Вот так. Впервые в мире. Суперсэмплинг (SSAA) — ресурсоемкий метод сглаживания, увеличивающий число выборок на пиксель для повышения качества изображения. При значении 8x (N=8) сцена рендерится в разрешении, в 8 раз превышающем целевое, по обеим осям, создавая 64 (или 8 х 8) выборки на пиксель. Изображение просчитывается в более высоком разрешении, а затем принудительно уменьшается до разрешения дисплея, устраняя лесенки и улучшая чёткость. Это очень высокая нагрузка! Это не 1920 на 1080 пикселя а в 8x8 больше - 15360 на 8640 пикселя! Такое никто, кроме меня, делает в мире. Для множество Мандельброта.

Это маленькая утилита из командной строке. Которая либо читает Mandelbrot.txt три строки из файла - клавиша 7. И создает Mandelbrot.bmp
Либо клавиша 1-6 - это одно из шести разных мест множество Мандельброта и создает Mandelbrot.bmp
Скачайте и посмотрите. Это экзешник, в ГитХаб
Скачать последнюю версию (Windows и Linux)

Читать далее

ChatGPT 5.4 Pro: обзор, бенчмарки, сравнение

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

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

OpenAI выкатила GPT‑5.4 Pro. И если раньше слово “Pro” в названии часто означало просто “чуть больше токенов и подороже”, то теперь это действительно профессорский уровень. Модель берёт сложнейший тест ARC-AGI-2 с результатом 83,3% (против 54% у предшественницы), решает задачи из FrontierMath, которые ещё недавно казались крепостью для ИИ, и... случайно находит в интернете забытую научную статью 2011 года, чтобы срезать путь к ответу.

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

Пристегнитесь, будет интересно!

Читать далее

Разбираем net/http на практике. Часть 2.1: POST, файлы и in-memory хранилище

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

Предыдущая статья

Продолжаем создавать сервис анонимных «мертвых ящиков» DeadDrop на чистом Go.

Во второй части (первый подвыпуск) закладываем фундамент: учимся принимать POST-запросы, загружать файлы с проверкой MIME-типа и размера, создаём in-memory хранилище с потокобезопасным доступом через RWMutex. Пишем утилиты для генерации криптостойких ID и паролей. Разбираемся с интерфейсами и готовим архитектуру к дальнейшему развитию.

Без фреймворков, только net/http и стандартная библиотека.

Читать далее

Введение в высокопроизводительные вычисления на С++ для CPU

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

"Поскольку вы программист на C++, вероятность того, что вы слегка одержимы производительностью, выше среднего. А если нет, то вы, вероятно, по крайней мере с пониманием относитесь к такой точке зрения. (Если производительность вас совсем не интересует, аудитория Python разработчиков дальше по коридору)"
— Из пункта 42 книги С. Майерса “Effective Modern C++”, 2015.

Эта заметка описывает мой личный взгляд на то, как писать эффективный и надежный код для CPU. Статья ориентируется на С++, но значительная часть обсуждения CPU, кэшей, паттернов доступа к памяти и профилирования применима к Rust, Go и другим компилируемым языкам. Статья задумана как краткое введение и больше всего подходит студентам, имеющим опыт программирования на занятиях, но не в реальных проектах. Для профессионалов статья может быть полезной в качестве референса, чтобы не пугать новичков чем-то в духе Что каждый программист должен знать о памяти.

В статье опишу "набор новичка": godbolt.org, профилирование, бенчмарки, особенности CPU и его взаимодействия с памятью, когда есть смысл от асимптотических оптимизаций и почему важно при этом пользоваться санитайзерами, отслеживать coverage и вообще более трепетно относится к надёжности.

Читать далее

SimpleGen: первый шаг в разработку на SimpleOne с помощью AI

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

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

Читать далее

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

Мобильное приложение Ватерпас: DewDrop. Реальная история…

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

Если вы ранее работали с мобильным приложением DogPlanner, то вы, наверное, уже знакомы с робопёсом Роби. Но в любом случае, позвольте рассказать вам его историю. Роби живёт на Марсе... ходит молва, что он был собран кем-то из деталей первого в истории марсохода Sojourner. Он изучает красную планету, да и, по возможности, всю вселенную через сигналы, приходящие из космоса.

Читать далее

Как выжать максимум из подписки Google AI: параллельные агенты и кросс-модельный консенсус

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

Всем привет! У многих из нас куплена максимальная подписка на Google AI Ultra - правда же? Да, она стоит не копейки - по акции первые 3 месяца обходятся в $124.99/мес, а потом ценник подрастает. Но мы заставим ее отработать каждый цент.

Читать далее

Изменения в G1/Parallel/Serial GC в JDK 26

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

JDK 26 выходит уже совсем скоро. Тем временем в GC закрыли около 380 задач (почти в 2 раза больше, чем в прошлом релизе), но в этот раз акцент сместился с  больших фич в пользу практичных доработок.

Главное для всех сборщиков: нормальный учет CPU GC. Теперь считают не только stop-the-world паузы, но и конкурентную работу и дедупликацию строк. Можно посмотреть через лог cpu=info при завершении VM, обновили Hsperf-счетчики, есть доступ из кода. Плюс новый JFR-ивент с деталями по string dedup.

JEP 516: Aot Cache стал независим от выбранного GC и опций VM. Включение через опцию -XX:+AOTStreamableObjects.

G1 получил самые заметные улучшения: JEP 522 уменьшает синхронизацию между GC и приложением (цель - увеличить throughput). Еще: целевое использование CPU G1 по умолчанию снижено с 8% до 4%, добавили важнейший флаг UseGCOverheadLimit.

Читать далее

Что больнее OT или CRDT в совместном редактировании? И почему до сих пор нет идеала?

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

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

Меня зовут Антон Леонтьев, я старший разработчик в команде ядра редакторов МойОфис. Мы создаём офисные приложения, которыми ежедневно пользуются более 12 500 организаций, и совместное редактирование — одна из ключевых возможностей наших продуктов.

И знаете, что самое обидное в этой теме? За 35 лет исследований были опубликованы сотни научных работ. Google Docs работает с 2006 года. У Figma, Notion и Linear свои реализации. Казалось бы, задача давно решена, но стоит копнуть глубже, и становится понятно: универсального решения нет.

В Google Drive и Dropbox до сих пор всплывают баги с одновременным перемещением папок. В Notion при параллельном редактировании одного и того же абзаца можно потерять часть изменений. Даже Yjs — самая популярная CRDT-библиотека — не хранит полную историю документа в привычном для нас виде.

В этой статье разберём теорию, узнаем, какие проблемы решают Operational Transformation (OT) и Conflict-free Replicated Data Types (CRDT), на каких математических идеях они основаны, чем отличаются архитектурно и какие компромиссы неизбежно возникают в каждом подходе.

Интересно узнать, почему даже Google не смог сделать идеальное решение? Детали под катом.

Читать далее

Владение и локальность

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

Итак, Вы – руководитель разработки (главный инженер, архитектор и т.п.) большой системы. После здравых размышлений Вы (обосновано) выбираете для системы микросервисную архитектуру. Далее Вы (и опять обоснованно) разделяете систему на микросервисы, продумываете API, рисуете стрелочки и диаграммы и можно программировать.

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

В этой статье мы рассматриваем два принципа: «Данными владеет только владелец» и «Локальность данных». Понимание принципов, понимание возможностей проектирования доступов к данным позволит Вам спроектировать устойчивые и надежные системы. 

Читать далее

ООП для управления состоянием во Vue

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

Чувак, уже есть Pinia, Pinia Colada, TanStack Query для Vue, зачем ещё один способ управлять состоянием во Vue?

Меня просто задолбало писать везде флаги отслеживания состояния для действий и делать store через фабричную функцию, как это делали наши праотцы в начале 2000-х. Запоминать зоопарк из разных composable-функций и хуков. Изучать какую-то другую систему реактивности, типа MobX, тоже не хочу. Это какой-то зашквар.

Я хочу использовать то, что есть: реактивность Vue везде, классы, методы. Хочу использовать классические шаблоны: SOLID, DDD и т.п. Хочу, чтобы Действие или запрос сами отслеживали и сообщали своё состояние. Хочу сконцентрироваться на бизнес-логике и писать меньше шаблонного кода.

И это возможно, покажу, как это работает на примере.

Погнали, если интересно

Безумие препроцессора: внедряем do-нотацию для монад из Haskell в C++

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

Добро пожаловать в чистилище препроцессора — место, где здравый смысл уступает место макросам. Сегодня мы заставим C++ притвориться Haskell-ем и внедрим do-нотацию, за которую любой адепт «чистого языка» предаст нас анафеме.

Программисты на C++ делятся на два типа: те, кто боится препроцессора, и те, кто познал сие древнее чудо с сишных времён.

Сегодня мы перейдем черту. Функциональное программирование манит своими абстракциями, но когда дело доходит до цепочек вычислений в монадах, C++ встречает нас бесконечными лямбдами и вложенностью, от которой рябит в глазах. В Haskell эта проблема решена элегантным do-синтаксисом. А что, если я скажу, что мы можем получить то же самое в C++, используя лишь тёмную магию макросов, простые шаблоны и полное пренебрежение здравым смыслом?

Приготовьтесь: мы будем дорабатывать парсер и превращать ваш код в нечто, что заставит коллег вызвать экзорциста. Это история о том, как затащить чистую красоту монад в суровый мир C++.

Запустить конвейер безумия