Как стать автором
Обновить
4
0

Пользователь

Отправить сообщение

Xv6: учебная Unix-подобная ОС. Заключение

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

Книга рассказала об идеях, что лежат в основе операционных систем, на примере xv6. Одна часть кода xv6 выражает основные идеи и каждая строка кода важна - переключение потоков, пространства пользователя и ядра, блокировки и т.д. Другая часть кода воплощает алгоритмы и структуры данных, которые легко заменить на другие - политика планирования процессов, структуры файлов на диске, устройство журнала файловой системы и т.д. Книга полагается на интерфейс системных вызовов Unix, который оказался успешным настолько, что идеи легли в основу и других современных ОС.

Книга на русском языке в формате PDF. Книга в формате HTML, EPUB появится чуть позже.

Читать далее
Всего голосов 4: ↑6 и ↓-2+8
Комментарии0

Дерево отрезков

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

Всем привет. В этой статье я расскажу про дерево отрезков. Очень мощной структуры данных, которая позволяет делать много разных операций над массивом чисел. Я постараюсь по полочкам разложить эту тему и объяснить возможности дерева отрезков. Также я разберу несколько нетривиальных задач на дерево отрезков. Помимо самого дерева отрезков я расскажу и про связанные темы: дерево Фенвика и разреженные таблицы.

Читать далее
Всего голосов 22: ↑26 и ↓-4+30
Комментарии8

35+ бесплатных ресурсов для начинающих разработчиков С++

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

Привет. Предположим, вы захотели начать изучать языĸ программирования C++ или, возможно, тех материалов, что уже изучили, вам недостаточно.

Я — Савва, программирую уже больше 7 лет, работаю менеджером команды наставников в Практикуме на курсе «Разработчик С++», а с недавнего времени — разработчиком в Positive Technologies. В этой статье мы с вместе с Практикумом собрали леĸции, ĸниги, курсы и всяĸое таĸое, чтобы шансов выстрелить себе в ногу самостоятельно было меньше :) По C++ существуют и другие подборĸи, но, ĸ удивлению, на Хабре их всего две.

Читать далее
Всего голосов 25: ↑25.5 и ↓-0.5+26
Комментарии17

Жизнь без линтеров и расчет цены абстракции: материалы для разработчиков на С++

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

В марте мы собирались на митапе по С++ в Санкт-Петербурге. Для всех, кто не смог присоединиться к встрече, подготовили записи докладов и дискуссии с экспертами из YADRO, VK и Kaspersky, а также создателем Sphinx Андреем Аксёновым. Почему стоит сохранить подборку в закладки:

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

• Эксперт из PVS-Studio покажет, почему линтеры не всегда подходят для поиска ошибок и какое решение использовать вместо них, чтобы не навредить безопасности сервиса.

• Инженеры с многолетним опытом работы на С++ поделятся опытом проведения код-ревью — возможно, вы найдете в их практиках что-то полезное или просто посмеетесь вместе с участниками дискуссии.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии4

Последнее издание культовой книги «Искусство схемотехники» стало доступно русскоязычным читателям

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

“Электронщики, как учит нас Парацельс, самозарождаются среди паяльников, радиодеталей, универсальных плат и проводов” (@teap0t)

Возможно, это действительно так, но без хорошей книги - учебника или справочника, которые служат катализатором, этот процесс может так и не завершиться. А лучшей книгой для начинающих разработчиков электронных схем и практически библией электронщиков последние сорок лет, считается "Искусство схемотехники" (англ. - The Art of Electronics) Пауля Хоровица и Уинфилда Хилла.

Читать далее
Всего голосов 64: ↑73 и ↓-9+82
Комментарии133

Полные правила игры DOS

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

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

Читать далее
Всего голосов 6: ↑4 и ↓2+2
Комментарии0

CRTP в C++

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

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

CRTP — это метод в C++, при котором класс наследуется от шаблона класса, используя себя в качестве параметра шаблона. Это выглядит примерно так: класс X наследуется от класса-шаблона Y<X>. Этот паттерн позволяет базовому классу напрямую обращаться к методам производного класса. С помощью CRTP можно можно обогатить интерфейс производного класса, внеся в него дополнительные методы через базовый класс-шаблон.

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

Читать далее
Всего голосов 18: ↑16 и ↓2+14
Комментарии12

В общих чертах про функциональное программирование в Rust

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

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

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

Хоть Rust не является чистым функциональным языком программирования, однако он имеет множество инструментов, позволяющих применять функциональные принципы.

Rust поддерживает рекурсию, хотя и без оптимизации хвостовых вызовов, что является отступлением от некоторых традиционных функциональных языков, таких как Haskell. Тем не менее, язык предоставляет мощные абстракции и паттерны, такие как владение и заимствование.

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

Кроме того, Rust имеет поддержку функций высшего порядка и замыканий.

Читать далее
Всего голосов 18: ↑14 и ↓4+10
Комментарии6

Делаем макросы в Rust

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

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

Rust имеет два основных типа макросов: декларативные и процедурные. Каждый из этих типов служит различным целям и предоставляет различные возможности манипуляции с кодом.

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

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

В этой статье мы как раз и рассмотрим то, как их пишут на Rust.

Начнем с декларативных!

Читать далее
Всего голосов 22: ↑16 и ↓6+10
Комментарии11

Компиляция на этапе выполнения в C++: constexpr, consteval и constinit

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

Сегодня мы поговорим о том, как constexpr, consteval, и constinit позволяют реализовывать компиляцию на этапе выполнения. Компиляция на этапе выполнения позволяет ускорить выполнение кода за счет выполнения расчетов на этапе компиляции, а не в рантайме.

constexpr делает возможным вычисление значений переменных во время компиляции. Функции и переменные, объявленные с этим ключевым словом, могут быть вычислены на этапе компиляции consteval усиливает концепцию constexpr, требуя обязательного вычисления выражений во время компиляции. constinit используется для инициализации статических и глобальных переменных.

А теперь подробней.

Читать далее
Всего голосов 28: ↑17 и ↓11+6
Комментарии31

Как в России в XIX веке компьютер изобрели

Время на прочтение12 мин
Количество просмотров6.9K
Компьютер придумал русский учёный Семён Корсаков в первой половине XIX века. Что? Да! И теоретическое обоснование к изобретению искусственного интеллекта впервые подвёл тоже он. «Как микроскоп и телескоп усилили наши чувства, так и интеллектуальные машины могут усиливать наш разум», — писал изобретатель.

image
Кстати, вот он — Семён Корсаков, человек, опередивший своё время

Интеллектуальные машины, которые создал Корсаков, достаточно простые и недорогие. Базы данных и некий прототип языка программирования Корсаков для них тоже придумал. Машины могли проводить поиск среди множества критериев, учитывая их относительную важность, и обрабатывать большие объёмы информации. Они умели проводить все основные операции с множествами, то есть делать всё, что сейчас делает дискретная математика. Их появление могло физически перевернуть всю науку XIX века и лет на пятьдесят ускорить появление современных компьютеров. Но что-то пошло не так.
Читать дальше →
Всего голосов 34: ↑29 и ↓5+24
Комментарии11

Как работает физика в играх

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

В мире видеоигр игровая физика играет важную роль, определяя реалистичность и взаимодействие игрового мира с игроком. Что же происходит под капотом? Какие алгоритмы и подходы используются в современных движках? И что же значит «застрять в текстурах»? (спойлер: чушь полнейшая)

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

Читать далее
Всего голосов 74: ↑74 и ↓0+74
Комментарии36

Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++

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

Привет, Хабр! Меня зовут Кирилл Колодяжный, я ведущий инженер-программист в YADRO. Помимо основных рабочих задач, включающих исследование проблем производительности СХД, я увлекаюсь машинным обучением. Участвовал в коммерческих проектах, связанных с техническим зрением, 3D-сканерами и обработкой фотографий. В задачах часто использовал С++, хотя машинное обучение традиционно ассоциируется с Python. Этот язык программирования буквально захватил сферу, его используют повсюду — от обучающих курсов до серьезных ML-проектов.

Однако Python — не единственный язык, на котором можно решать задачи машинного обучения. Так, альтернативой может стать С++. Если последний вам ближе, вам будет интересен и полезен этот текст.

Под катом разберемся:

как организовать работу с данными и загрузку обучающего датасета, 

как описать структуру нейронной сети, 

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

как организовать конвейер обучения сети, 

как использовать предобученные глубокие сети для решения задач. 

Читать далее
Всего голосов 22: ↑21 и ↓1+20
Комментарии15

Выявление ошибок в работе с памятью в C и C++: Сравниваем Sanitizers и Valgrind

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

В этой статье вашему вниманию представлено сравнение двух инструментов для поиска ошибок в работе с памятью в программах, написанных на memory-unsafe (небезопасных при работе с памятью) языках — Sanitizers и Valgrind. Эти два инструмента работают совершенно по-разному. Поэтому, хоть Sanitizers (разработанный инженерами Google) имеет ряд преимуществ перед Valgrind, у каждого из них есть свои сильные и слабые стороны. Следует сразу отметить, что проект Sanitizers имеет название во множественном числе, потому что он состоит из нескольких инструментов, которые мы рассмотрим в этой статье в совокупности.

Читать далее
Всего голосов 11: ↑10 и ↓1+9
Комментарии3

Итак, вы унаследовали старую кодовую базу на C++. Что дальше?

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

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

Теперь вы отвечаете за кодовую базу на C++. Она большая, сложная и своеобразная; достаточно слишком долго на неё посмотреть, как она начинает разваливаться разными интересными способами. Иными словами, это легаси.

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

И что делать теперь?

Не волнуйтесь, у меня такое случалось очень много раз и в разных компаниях (кто-то язвительный может спросить: а разве кодовые базы на C++ бывают какими-то другими?), выход есть, он не особо сложен и поможет вам действительно устранять баги, добавлять фичи, а то и когда-нибудь переписать её.

В этой статье я расскажу о том, что оказалось полезным для меня, и о том, чего стоит всячески избегать.
Читать дальше →
Всего голосов 71: ↑70 и ↓1+69
Комментарии26

Корутины C++ для чайников: пишем асинхронный веб-клиент

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

Написать этот материал меня побудило... отсутствие хороших статей по корутинам в C++ в русскоязычном интернете, как бы странно это не звучало. Ну серьезно, C++20 существует уже несколько лет как, но до сих пор почти все статьи про корутины, что встречаются в рунете, относятся к одному из двух типов. Или обзор начинается с самых глубин и мелочей, пересказывая cppreference, а потом автор выдыхается и все сводится к "ну а дальше все понятно, возьмите и примените это в своем коде", что напоминает известную картинку с совой. Либо иногда в статьях рассматривается применение корутин на примере генераторов, и этим все и ограничивается. Но, давайте будем честны, генераторы — это замечательно, но за все время моей многолетней карьеры разработчика я, вероятно, делал что‑то подобное генераторам разве что разок, в то время как асинхронный ввод‑вывод приходится использовать почти в каждом проекте. И поэтому меня гораздо больше интересует реализация асинхронного ввода‑вывода с использованием корутин, а не генераторы. Поэтому пришлось разбираться во всем самому.

Читать далее
Всего голосов 68: ↑66 и ↓2+64
Комментарии34

Высокоточное измерение ЭКГ. Часть 2

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

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

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

Читать далее
Всего голосов 22: ↑21 и ↓1+20
Комментарии5

Сложные проекты для программистов, чтобы учиться новому

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

В основном я учился программированию самостоятельно. Когда у меня появлялась захватывающая идея, я разбирался, что необходимо для решения этой задачи. Например, когда я заинтересовался работой поисковых движков, то начал читать о вычислительной эффективности множеств. Так я обнаружил задачу «как понять, что я уже выполнил краулинг этого URL?», если их уже были тысячи. Чтобы ускорить ответ на этот вопрос, я использовал множество, поиск по которому занимает O(1), а не O(n).

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

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

Я решил составить собственный список проектов, поддерживающих мой интерес к программированию. Это список в стиле серии Challenging projects every programmer should try Остина Хенли.

Читать далее
Всего голосов 20: ↑19 и ↓1+18
Комментарии8

Шпаргалка для алгособеса 2 — графовые и строковые алгоритмы

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

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

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

Самым прямым образом — алгоритмы прокачивают умение системно мыслить, искать нестандартные пути решения; человека, у которого эти скиллы на высоте, вряд ли заменит ИИ. Так что, тратя бесценное время на алгоритмы, вы занимаетесь очень полезным делом, расслабьтесь и получайте удовольствие) В качестве бонуса к прокачиванию серого вещества вы получите сверхспособность пройти любой алгособес в FAANG и удовлетворить любые потребности пирамиды Маслоу — довольно приятно)

В этой статье мы разберём графовые алгоритмы типо DFS, Флойда–Уоршелла и строковые наподобие Ахо-Корасик.

Читать далее
Всего голосов 41: ↑39 и ↓2+37
Комментарии35

Как я автоматизировал однотипную, монотонную работу бесплатно и без навыков программирования

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

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

Я долго мучался над подобной проблемой, был период когда вся моя работа заключалась в сравнении данных в Excel, SAP и ещё парочки источников, но так как я очень ленив, стал искать способ как это дело можно автоматизировать и вот уже два года, я с некой периодичностью создаю новые или редактирую старые программы действий для компьютера (скрипты или сценарии), позволяя ему работать вместо меня, а себе гонять чай в рабочее время посматривая на экран. Я не стал супер экспертом по автоматизированию (RPA разработка если по научному), но работа стала приносить намного меньше стресса.

Читать далее
Всего голосов 22: ↑16 и ↓6+10
Комментарии41
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность