Обновить
1087.84

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

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

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

Оптимизация кольцевого буфера для повышения пропускной способности

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

В этой статье мы рассмотрим классический конкурентный кольцевой буфер и обсудим, как его можно оптимизировать для повышения производительности. Я покажу вам, как существенно улучшить этот показатель от 5,5 миллионов элементов в секунду до 112 миллионов элементов в секунду — и эти показатели выше, чем в реализациях Boost и Folly. Если вам требуется готовая реализация со всеми этими оптимизациями, посмотрите мою библиотеку SPSCQueue.h.

Кольцевой буфер также называется очередью «один производитель — один потребитель» (SPSC). В ней не бывает ожидания (и, соответственно, не бывает блокировок), это конкурентный примитив. Такая структура данных находит множество вариантов применения, и здесь я рассмотрю передачу сетевых пакетов между сетевым контроллером и драйверами операционной системы. Основная задача, решаемая при этом — выполнение событий ввода/вывода в относительно новом асинхронном API io_uring.

Читать далее

Хитрости для программистов: пять команд Linux, с которыми ваша жизнь не будет прежней

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

Интерфейс командной строки — это альфа и омега для большинства технарей, особенно для разработчиков и сисадминов. Чем бы вы ни занимались — скриптами, конфигурацией серверов или автоматизацией задач, — команды Linux сэкономят вам часы рабочего времени. Но если только вы умеете грамотно с ними обращаться.

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

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

Читать далее

В Испании все программисты сеньоры

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

Моя текущая позиция и аутсорсы последних пяти лет на 90% были в западных gamedev студиях, соответственно и общение было преимущественно с не‑ру коллегами. А когда надолго отрываешься от славянских коллективов разработки, то отличия начинают проявляться очень четко, начиная от модели управления командой и заканчивая культурой разработки. Хотя вот культурой я бы это не назвал, скорее плясками варваров‑полуиндусов на останках штатовской империи софтостроения. Индийцы тут ни при чем, а вот практики и сам процесс написания кода очень попахивает этими жителями полумифической страны Индустана. Есть немало книг по истории развития игровой индустрии и истории успехов и провалов разных студий, в основном западных, оставлю в статье список самых интересных и захватывающих, если решите углубиться в историю (кому интересно, будет под спойлером).

Одна из последних — «Not All Fairy Tales Have Happy Endings» (Ken Williams), мемуары одного из основателей Sierra On‑Line, прочитана была около года назад и понравилась больше других, наверное потому, что читая книгу — я, наконец, понимал большинство решений и причин которые привели к тому или иному результату. Этого понимания точно не было десять лет назад, это сложно объяснить, если не работал непосредственно сам долгое время с людьми с иным образом мыслей, культурным кодом, как сейчас принято говорить. Нынешняя команда на 95% франко‑испано‑английская — австралийцы, немного европейцев и американцы. В студии по‑русски говорят трое, включая меня. До этого в карьере были по большей части все же ру‑студии с привычным менталитетом, пускай и под управлением все тех же американцев, но менеджмент скрадывал все огрехи и брал «разговоры как надо» на себя, а нам доставались только технические задачи, грамоты и иногда премии. Десять лет назад, придя в индустрию создания игр, я не задавался вопросом — чем отличаются мои таски, мой код, мои идеи от тасок, кода и идей Джона из Кемпбеловки под Сан‑Хосе, потому что вокруг были все «свои». Сейчас уже тоже все «свои», но те «свои», от этих «своих» отличаются примерно — всем.

Читать далее

Как проводить сложные исследования в Google Таблицах и Excel? Работаем с формулой QUERY

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

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

Меня зовут Саша, я координатор отдела пользовательских исследований в Selectel. В этой статье я объясню, как и какие формулы использовать в таблицах, чтобы работать с большими объемами данных.
Читать дальше →

о3 теснит программистов? Как OpenAI снова всех удивила

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

Привет, Хабр! Меня зовут Владимир Крылов. Я профессор математики, научный консультант Artezio и автор телеграм-канала Ai4Dev. Наша команда внимательно следит за развитием технологий ИИ и их влиянием на разработку ПО. Последний анонс OpenAI заставил меня написать о новых технологиях по горячим следам. Обычно я предпочитаю дожидаться реальных результатов тестирования. Однако презентация с последнего дня рождественского мероприятия OpenAI сломала все барьеры.

Читать далее

Деление беззнаковых 8-битных чисел

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

Деление — достаточно затратная операция. Например, на CPU Cannon Lake задержки 32-битного деления находятся в интервале 10-15 тактов, а на Zen4 — 9-14 тактов. Задержки 32-битного умножения на обоих CPU составляют 3-4 такта.

Ни в одном из популярных ISA SIMD (SSE, AVX, AVX-512, ARM Neon, ARM SVE) нет целочисленного деления, оно есть только в RISC-V Vector Extension. Однако во всех этих ISA есть деление с плавающей запятой.

В этой статье мы представим два подхода к реализации SIMD-деления 8-битных беззнаковых чисел.

Читать далее

Как мы раскрыли внутреннюю архитектуру Flutter и затащили его на собственную платформу

Время на прочтение13 мин
Охват и читатели5.6K
Если вы разрабатываете мобильные приложения, то почти наверняка сталкивались с Flutter — мегапопулярным открытым фреймворком от Google. Наша команда Mobile SDK and Applications Development, конечно, тоже захотела использовать Flutter при создании приложений для KasperskyOS — собственной микроядерной операционной системы «Лаборатории Касперского» — но был нюанс…



Особенности архитектуры KasperskyOS задают условия, при которых мы не можем пойти проторенными дорожками и свободно интегрировать фреймворк на своей платформе. Подсмотреть решения где-то вовне мы не можем тоже — таких кейсов в индустрии просто не было. А сам Google практически не раскрывает внутреннюю архитектуру Flutter. Так что интеграцию требовалось выстраивать с нуля.

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

Если вы тоже разрабатываете приложения, где требуется разбираться во внутренней архитектуре Flutter, статья точно будет вам полезна — ныряйте под кат!
Читать дальше →

Жизненный цикл потоков ОС в Golang

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

Всем привет! Меня зовут Паша, я занимаюсь коммерческой разработкой уже 10 лет, 8 из них — на Go. Мне довелось разрабатывать приложение, активно использующее как сеть, так и диск. 

Регулярно приходилось решать вопросы производительности. В ходе исследований я использовал все, что было было под рукой: логи, метрики, трейсы, профилировщики и runtime-трейсы. А еще изучал, как по доступным данным расследовать причины проблем производительности постфактум. Тогда мне стало интересно, почему метрика количества потоков сильно отличается от значения GOMAXPROCS и можно ли по этой метрике диагностировать какие-то конкретные проблемы.

Читать далее

Развенчиваем популярные мифы и заблуждения о компиляторах

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

▍ Введение


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

Эта статья станет своего рода продолжением статьи о компиляторных оптимизациях. Я перечислю некоторые заблуждения, с которыми я сталкивался за долгие годы (многие из них были моими), и постараюсь развеять все мифы. Заранее скажу, что эта статья посвящена только крупным популярным компиляторам общего назначения наподобие LLVM, GCC и ICX. Некоторые из сделанных здесь утверждений не относятся, например, к специализированным компиляторам2, а также к мелким и средним компиляторам3.
Читать дальше →

Открытая IDE для российских разработчиков

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

Компания Haulmont совместно с Группой Астра и Axiom JDK создает некоммерческое партнерство для развития открытой российской среды разработки – OpenIDE.

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

Почему это хорошая новость для российских разработчиков? Чем это отличается от самой IntelliJ IDEA CE или уже существующей российской GigaIDE? Какие языки будут поддерживаться? Что со Spring? Когда релиз? Читайте под катом.

Читать далее

PyMyFlySpy: отслеживание полёта по бортовым данным

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

«Где мы, папа», — спросил меня 5-летний сын.

«Мы приземлимся примерно через час», — ответил я.

«Да нет, я имею в виду, где мы? Мы ещё не пролетаем Италию?»

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

Но, к его сожалению, я разработчик PySkyWiFi («абсолютно дурацкого WiFI-инструмента для бесплатного доступа в интернет при длительных перелётах»). Не платить за интернет авиакомпании — это моя личная фишка. Здесь же нам потребуется иная, офлайн-стратегия.
Читать дальше →

Грязный код

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели19K
Эдсгер Дейкстра: «Грязно и быстро — мне это не понравится»

«Чтобы иметь право называть себя профессионалом, вы должны писать чистый код. Нет никаких разумных оправданий тому, чтобы не стремиться к лучшему». Clean Code

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

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

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

Я программирую уже довольно давно и видел разнообразные подходы к обеспечению работоспособности ПО. Кто-то любит объектно-ориентированное программирование (я тоже), другие умные люди его ненавидят. Кому-то нравится выразительность динамических языков, кого-то она бесит. Кто-то успешно выпускает программы, строго следуя концепции Test Driven Development, другие добавляют в конце проекта несколько сквозных тестов, а многие остаются где-то посередине этих крайних точек.

Я был свидетелем проектов, выпускавших и поддерживавших успешное ПО на основе всех этих разнообразных подходов.

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

Как я взломал одну из самых топовых нейросетей (Claude 3.5 Sonnet) для студенческой научной статьи

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

Я — простой студент, который обучается по направлению «Информационная безопасность». Так вышло, что по программе мне нужно было написать научную статью по теме ИБ. Будучи авантюристом я выбрал тему, которая была мне ближе и интереснее... и так получилось, что в пылу энтузиазма я немного перевыполнил свой план. К сожалению, я был ограничен в объеме по написанию научной статьи, и много интересного материала пришлось вырезать или сократить. Поэтому, тут я хотел бы написать полную версию моей статьи, во всяком случаи, какой я бы хотел ее видеть.

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

Читать далее

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

Сколько памяти нужно в 2024 году для выполнения миллиона конкурентных задач?

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

Помните сравнение потребления памяти для асинхронного программирования на популярных языках 2023 года?

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

Давайте снова проведём бенчмарки и изучим результаты!

Читать далее

Синтаксис, синглтон и смертельный ромб в С++: взгляд опытного разработчика на C

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

Давайте знакомиться: меня зовут Анатолий Семятнёв, я и моя команда разрабатываем ПО для опорных сетей 5G в YADRO. В IT-сфере работаю давно, и мой опыт в основном связан с языком С: занимался Board Support Package (BSP) и драйверами, много работал с операционной системой QNX. 

До того, как начал полноценно работать на С++, сталкивался с языком в нулевые, писал на С++98. Тем не менее все это время я краем глаза поглядывал, что происходит в С++, и хотел вернуться к программированию на этом языке. Читал книги, делал пет-проекты, смотрел записи конференций и митапов по С++. А когда пришел в YADRO, стал писать на С++.

Мне с ходу дали большую фичу для имплементации, я писал много кода, и получал комментарии от коллег. В этом материале собрал все, что изучил или вспомнил по итогам код-ревью. Что рассмотрим в статье:

• Ключевые концепции — explicit, final, default, string — и как их использовать.

• Инициализацию мемберов с помощью пустого брейс-листа.

• Синглтон Майерса в корутинах.

• «Смертельный ромб» и все, что связано с виртуальным наследованием.

Читать далее

Закладки, к которым ты никогда не вернёшься

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

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

Закладки в браузере, список статей для прочтения в Pocket, закладки в популярных блогах типа Хабра и прочие списки из разряда "прочитать позже". Если у вас эти списки пусты или регулярно очищаются, вам не понять нашей печали.

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

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

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

Решайся: сегодня или никогда :)

Регулярные выражения простыми словами. Часть 2

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

Разработчики делятся на три типа: те, кто уже понимает регулярные выражения и порой решает сложные задачи одной строкой; те, кто все еще боится их и всячески избегает; и те, кто уже прочитал первую часть этой серии статей и полон оптимизма разобраться с этими магическими письменами. Эта статья специально для третьих, чтобы им было проще стать первыми.
Читать дальше →

MomBoard: E-Ink дисплей для родственника с амнезией

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

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

Мне просто нужен программист

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

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

«Привет, я слышал, ты программист! Это отлично, потому что у меня и моего друга есть одна идея для бизнеса. Со всем важным мы разобрались, и нам просто нужен программист, чтобы соединить всё это вместе».

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

«Сейчас у меня есть несколько других проектов, но я всегда с радостью готов изучить что-то новое и посмотреть, подойдёт ли это мне. Если ты хочешь, чтобы это был просто обмен денег на труд, то чтобы заинтересовать меня, нужно примерно $X в час. С другой стороны, если у тебя нет капитала для стартапа и ты хочешь оплатить работу долей в бизнесе, то я хочу примерно X% от компании (и этот вариант, разумеется, будет зависеть от того, покажется ли мне бизнес жизнеспособным и интересным для моих вложений)».

На самом деле я не ожидал, что его заинтересуют подобные условия, но думал, что он сделает контроффер или, по крайней мере, покажет, что ему больше нравится сумма/доля Y, а не X. Однако его ответ меня немного удивил.
Читать дальше →

Domain-Driven Design: чистая архитектура снизу доверху

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

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

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

Да, мы уже знаем самые популярные практики: KISS, DRY, YAGNI, SOLID, что там ещё... Мы умеем их применять. Но нас не покидает чувство, что все эти практики объединяет общая научная основа. Знаете, это как с Менделеевым, который на основе закономерностей практически по наитию составил периодическую систему, а потом открыли электроны и всё встало на свои места.

У меня для вас хорошие новости: научная основа есть. Это предметно-ориентированное проектирование.

Но есть и плохая новость: тема настолько новая и непростая в изучении, что какая-никакая популярность к ней пришла лет 5 назад, и до сих пор совсем небольшое число разработчиков достаточно хорошо в ней разбирается.

Но есть ещё одна хорошая новость: в статье ниже я постараюсь дать максимально понятный ответ, что же такое предметно-ориентированное проектирование.

Начнём.

Читать далее

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