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

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

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

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

Лаконичный макрос defer для C++17

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

Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное занятие. Создание достойных RAII-врапперов для каждого используемого сишного API не всегда практично, а использование подходов с goto cleanup или множеством вложенных if (success) вредит читаемости кода.

Макрос defer как никогда кстати! Отложенная лямбда будет выполнена при выходе из области видимости, независимо от того, будет ли выполнен return, брошено исключение, или даже выполнен goto наружу. Данный макрос по-настоящему zero-cost и не зависит от рантайма C или стандартной библиотеки, поэтому его можно использовать даже в разработке под ядро ОС.

Читать далее

Заметки о портировании UNIX Classic с помощью Cosmopolitan

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

Недавно я опубликовал версию 3.0 Status Line, проекта, который позволяет играть в Zork на Pico-8, на трёх основных операционных системах. После успешного развёртывания (есть ли эмодзи «тьфу‑тьфу‑тьфу»?) я занялся портированием исходного кода оригинальной UNIX z‑machine от Infocom с помощью Cosmopolitan. Примерно за шесть часов свободного воскресенья я портировал его на шесть основных ОС, включая Windows.

Вот история о том, как и почему я решил заняться этим проектом, и чему я научился в процессе.

Читать далее

Создание контрола Avalonia/WPF для двухцветных векторных Bootstrap Icons

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

В мире разработки приложений, будь то веб или десктоп, использование иконок является неотъемлемой частью пользовательского интерфейса. Векторные иконки предпочтительнее растровых, так как они масштабируются без потери качества. Одной из популярных коллекций векторных иконок является Bootstrap Icons, содержащая более 2000 готовых иконок. Хотя коллекция Bootstrap Icons доступна как npm-пакет bootstrap-icons и ориентирована на веб-разработку, её можно эффективно использовать в десктопных приложениях.

Создадим с нуля контрол BootstrapIcon для удобного использования двухцветных векторных иконок в приложениях на Avalonia/WPF. Сами изображения, в основном берем из SVG-файлов библиотеки bootstrap-icons, отсюда и название нашего контрола.

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

🔗 Полученные контролы BootstrapIcon для Avalonia и WPF с примерами использования размещены на GitHub.

👉 Продолжение следует...
Планируется публикация ещё пары туториалов, в которых будет пошаговое руководство для создания главного меню приложения и аналога ToolBar с использованием BootstrapIcon.

Читать далее

AI в помощь системному аналитику: от скепсиса к практике

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

Друзья, привет! Меня зовут Ларионов Александр. Я работаю системным аналитиком. Совместно с Лабораторией инноваций Московской биржи мы изучали вопрос применения AI в системном анализе.

Когда я впервые столкнулся с задачей внедрения AI-ассистентов в процессы работы системного аналитика, то отреагировал скептически. Поводов было немало: большинство материалов на эту тему представляли собой восторженные отзывы вроде «AI автоматизирует рутину» или «machine learning улучшает принятие решений». Однако, при ближайшем рассмотрении, эти фразы распадались на абстрактные утверждения. Попытки уточнить у авторов конкретные кейсы или сценарии применения их инструментов для системного анализа сводились к общим фразам: «Обучите модель на ваших данных — и она всё поймёт».

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

Как же убедиться, что AI полезен для нашей профессии, когда в поиске реальных кейсов находишь информационный вакуум? Я решил переосмыслить подход и начать экспериментировать самостоятельно. За основу я взял самые распространённые задачи, с которыми сталкиваются системные аналитики, в том числе и мы в Лаборатории инноваций Московской биржи.

Читать далее

Детальный обзор полей Галуа

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

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

Этими словами заканчивалось письмо Эвариста Галуа, написанное для своего друга Огюста Шевалье за два дня до его смерти от полученных на дуэли ран на 21 году жизни. Ни Якоби, ни Гаусс в его теоремах не разобрались, зато спустя 15 лет разобрался Жозеф Лиувилль и опубликовал работы Галуа, ставшие впоследствии фундаментом современной алгебры, известные сейчас как теория Галуа. В статье расскажу про одну из частей этой теории - поля Галуа, получившая настолько повсеместное применение в криптографии и избыточном кодировании, что Intel и AMD выпустили набор процессорных расширений для эффективной реализации операций над этими полями.

Заметка! Если вам довелось использовать/реализовывать поля Галуа, то большая часть статьи для вас скорее всего будет не интересна, но возможно в последних разделах будет что-то для вас новое.

Читать далее

Что будет, если заинлайнить всё

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

Усаживайтесь поудобнее, ребята! Сегодня мы с вами разберём следующий увлекательный вопрос: что будет, если заинлайнить вообще всё?

Если вы пока не знакомы с техникой встраивания (inlining) то примите к сведению, что в сообществе специалистов по разработке компиляторов многие, в том числе очень авторитетные фигуры (например, Чендлер Каррут) считают этот приём наиважнейшим при оптимизации компиляторов. Подробнее о том, как устроено встраивание, рассказано здесь — мы беззастенчиво хвалимся той презентацией, с которой выступили перед участниками конференции LLVM Developers' Meeting по межпроцедурной оптимизации. Я рассказывал о встраивании и очень рекомендую вам посмотреть хотя бы первые 6 минут. В этом видео я рассказываю, почему встраивание — очень простое преобразование, а вот тут вашему вниманию предлагается реализация встраивания, предложенная великим Крисом Латтнером уже около 20 лет назад — в ней всего около 200 строк кода. К сожалению, сегодня даже само преобразование пропорционально выросло: в качестве примера взгляните хотя бы на InlineFunction.cpp.

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

Читать далее

Netbeans 26 C++ (clang/clangd) + build system

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

Всем привет. Стал нужен IDE минимальный, и я вспомнил, что есть Нетбинс. Скачал мне он очень понравился - удобный, но чего-то не хватает.

Как сделать рабочим Нетбинс 26(с++, clangd), когда какой-то модуль, который раньше в плагинах работал теперь не работает. Давайте рассмотрим этот нюанс.

Читать далее

От идеи до платформы: полгода разработки собственного AI радио

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

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

Читать далее

Коротко объясняем, что такое поток, буфер, дуплекс и канал

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

Поток — это последовательность элементов данных, предоставляемых за некоторое время. Концепция потока (stream) позволяет обрабатывать или передавать данные поэлементно, а не как одно целое. Потоки особенно полезны в сценариях, когда приходится работать с большими множествами данных, непрерывными данными или данными реального времени.

Читать далее

Не пузырьком единым. Поговорим об алгоритмах сортировки

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

Если спросить любого, хоть немного знакомого с ИТ человека, какие алгоритмы сортировки он знает, то самым популярным ответом будет, конечно, сортировка методом пузырька. Однако в реальности это, конечно, не единственный способ сортировки. В этой статье мы поговорим о том, какие алгоритмы сортировки бывают и как их можно реализовать на Python.

Читать далее

WAF (гав-гав): гибкая настройка пользовательских правил PT AF PRO

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

Разберёмся, как грамотно (хотелось бы так) настраивать пользовательские правила в Positive Technologies Application Firewall, чтобы при виде атаки ваша защита не превратилась в уязвимую "истеричку". Расскажем про ключевые директивы, покажем примеры из реальной практики и обоснуем каждый шаг.

Читать далее

Краткая история JavaScript

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



В этом году JavaScript исполняется 30 лет.


За три десятилетия он прошел путь от забавного и непритязательного скриптового языка, созданного за 10 дней, до самого популярного языка программирования в мире. Ниже — ключевые моменты истории JavaScript, которые помогут понять, как он менялся и куда идет.

Читать дальше →

Шардирование баз данных: проблемы, альтернативы, практические рекомендации

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

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

Читать далее

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

От конфигурации к динамике. Новый API по созданию бинов в Spring

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

В Spring Framework 7 появился новый API — BeanRegistry, который упрощает и расширяет возможности по динамической регистрации бинов. Это особенно актуально, когда невозможно заранее предсказать, сколько компонентов потребуется, как в случае со Spring Data. В новой статье от эксперта сообщества Spring АйОМихаила Поливахи, вы узнаете:

– Как Spring Data справлялась с динамической регистрацией раньше;

– Какие подходы регистрации существовали до BeanRegistrar, как они работали;

– Как новый API связан со Spring AOT.

Читать далее

Плоские контейнеры в C++23

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

Новый стандарт C++, C++23, впервые с C++11 расширил всем привычную линейку контейнеров: помимо знакомых array, vector, (unordered_)set, (unordered_)map и прочим в нее теперь входят непонятные flat_set, flat_map, flat_multiset и flat_multimap. Ответим на вопросы, что это за контейнеры, когда они могут быть полезны, сравним дизайн стандартизированных «плоских» контейнеров с дизайном плоских контейнеров из Boost и ETL и, конечно, произведём замеры и сравним производительность flat_ и не flat_ контейнеров.

Читать далее

Absolute Zero Reasoner: ИИ научился программированию без входных данных — и это может поменять всё

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

Возможно я был недостаточно внимателен, но мне попалось на Хабре буквально одно, очень краткое упоминание крайне интересного исследования от команды из Университета Цинхуа и партнерских институтов нескольких стран: Absolute Zero Reasoner (AZR) — новую систему машинного обучения, которая развивает принципы self-play и способна обучаться без каких-либо внешних данных. В отличие от традиционных подходов, требующих тысячи размеченных примеров, AZR использует принцип самообучения через создание и решение собственных задач программирования. Система играет две роли одновременно: составителя задач (Proposer) и решателя (Solver), используя исполнитель кода как объективного судью для получения обратной связи. AZR продемонстрировал state-of-the-art результаты в программировании и математических рассуждениях, превзошедший модели, обученные на десятках тысяч человеческих примеров, при этом показав впечатляющий кросс-доменный перенос знаний между различными областями знаний.

Читать далее

Подбираем лучший механизм аппаратной конкурентности для машинного обучения на ЦП

Время на прочтение7 мин
Количество просмотров643

В среде выполнения задач ИИ для Firefox можно задействовать сразу множество потоков в выделенном процессе логического вывода, чтобы ускорить выполнение таких операций на ЦП. В среде WASM/JS можно создать SharedArrayBuffer и обрабатывать содержимое этого буфера сразу несколькими потоками. Такая рабочая нагрузка поддаётся конкурентному распределению на несколько ядер ЦП.
Читать дальше →

Java Digest #25

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

Всем привет! 👋

Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

Читать свежий выпуск

Как собрать ДНК с помощью кода: симуляция молекулярных операций на Python

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

Синтез ДНК кажется чем-то сугубо биологическим — с пробирками, центрифугами и белыми халатами. Но что, если попробовать собрать ДНК в коде? Не просто сгенерировать последовательность, а симулировать реальные процессы: лигирование, гибридизацию, ПЦР, ошибочные вставки, ферментативные сдвиги и многое другое. В этой статье — практическая попытка воссоздать молекулярную биологию средствами Python, без библиотек типа Biopython, с нуля. Много кода, немного шуток и один вопрос — можно ли построить in silico ДНК-лабораторию?

Слова “биоинформатика” и “программирование” обычно встречаются в одном предложении, когда речь идёт о парсинге геномов, анализе экспрессии генов или машинном обучении для диагностики. Но однажды захотелось большего. Хотелось не просто читать гены, а играть с ними. Моделировать их, собирать руками. Вернее, клавиатурой.

Идея: построить в коде лабораторную скамью, где можно будет “сшивать” фрагменты ДНК, копировать их, проверять на ошибки. Причём без привычных библиотек вроде Biopython — просто Python, NumPy и желание воссоздать реальный молекулярный процесс в виртуальной среде. Можно ли собрать виртуальную ДНК-плазмиду и отдать её синтетической биологии?

Да. Но сначала немного теории.

Читать далее

Агентная экономика. Дайджест за неделю

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

Для тех, кто следит за трендами Умной Автоматизации (ИИ-агенты, Мультиагентные системы, Ко-пилоты), чтобы понимать тему глубже и принимать верные решения.

Дайджест по материалам McKinsey, Research IBM, PWC и Wired.

Читать далее

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