Всем привет. В этой статье я расскажу про дерево отрезков. Очень мощной структуры данных, которая позволяет делать много разных операций над массивом чисел. Я постараюсь по полочкам разложить эту тему и объяснить возможности дерева отрезков. Также я разберу несколько нетривиальных задач на дерево отрезков. Помимо самого дерева отрезков я расскажу и про связанные темы: дерево Фенвика и разреженные таблицы.
Embedded system engineer
Числа и байты: как работает память в Linux?
❯ Часть первая: физическая память
При создании операционных систем всегда уделяется внимание работе с памятью. Память — это компонент компьютера, где хранятся программы и данные, и без нее современные компьютеры не могли бы функционировать. Важной единицей хранения данных в памяти является бит, который может принимать два значения: 0 или 1. Память состоит из ячеек, каждая из которых имеет свой адрес. Ячейки могут содержать различное количество битов, и количество адресуемых ячеек зависит от количества бит в адресе.
Также память включает в себя оперативное запоминающее устройство (ОЗУ) или RAM, где можно записывать и считывать информацию. Существует статическая ОЗУ (SRAM) и динамическая ОЗУ (DRAM), различающиеся в том, как хранится информация. В SRAM информация сохраняется до выключения питания, в то время как в DRAM используются транзисторы и конденсаторы, что позволяет хранить данные, но требует их периодического обновления. Разные типы ОЗУ имеют свои преимущества и недостатки, и выбор зависит от конкретных потребностей.
Понимание работы с памятью в компьютере важно для всех, кто работает с техникой и программным обеспечением. Важно знать, как устроена память, какие ее типы существуют и как эти типы могут влиять на производительность и функционирование компьютера.
Но что такое физическая память, как она работает в Linux? Что такое сегментация, утечки памяти и некие «страницы»?
Все, что вы хотели знать, но боялись спросить о памяти пингвина — читайте здесь и сейчас!
Корутины C++ для чайников: пишем асинхронный веб-клиент
Написать этот материал меня побудило... отсутствие хороших статей по корутинам в C++ в русскоязычном интернете, как бы странно это не звучало. Ну серьезно, C++20 существует уже несколько лет как, но до сих пор почти все статьи про корутины, что встречаются в рунете, относятся к одному из двух типов. Или обзор начинается с самых глубин и мелочей, пересказывая cppreference, а потом автор выдыхается и все сводится к "ну а дальше все понятно, возьмите и примените это в своем коде", что напоминает известную картинку с совой. Либо иногда в статьях рассматривается применение корутин на примере генераторов, и этим все и ограничивается. Но, давайте будем честны, генераторы — это замечательно, но за все время моей многолетней карьеры разработчика я, вероятно, делал что‑то подобное генераторам разве что разок, в то время как асинхронный ввод‑вывод приходится использовать почти в каждом проекте. И поэтому меня гораздо больше интересует реализация асинхронного ввода‑вывода с использованием корутин, а не генераторы. Поэтому пришлось разбираться во всем самому.
Нарушаем ограничения файловых систем *NIX
Все началось с того, что друг показал удивительный артефакт: на флешке в одном каталоге было два файла с идентичным названием. Разгадка, конечно, простая: во всем виноват фотоаппарат, у которого, возможно, меньше проверок в момент записи кадра.
Этот прецедент побудил поискать ответы на несколько вопросов. Можно ли обмануть операционную систему компьютера и нарушить запреты файловых систем? И если это получится, то как отреагирует ОС?
Под катом вас ждет небольшой экскурс в особенности работы файловых систем и набор экспериментов.
Создаём виртуальную сеть, как это делает Docker
Как известно, Docker умеет создавать виртуальные сети для безопасного и удобного сетевого взаимодействия внутри контейнеров. В этой статье мы рассмотрим, как именно он это делает на примере базовых манипуляций с сетью в рамках одного хоста с операционной системой Linux.
Устройство GPIO-драйверов в Linux
Рассмотрим, как устроены GPIO-драйверы в Linux, и почему это сделано именно так. Поймем, почему для простого мигания светодиодом в этой операционной системе надо пройти через N слоев абстракции.
Компилятор за выходные: лексер и парсер
Продолжаем разговор. На прошлой неделе я пообещал за выходные написать компилятор из простенького мной придуманного языка в ассемблер. В назначенное время уложился, и компилятор даже вроде работает, см. заглавную картинку. Теперь дело за малым, потихоньку причесать и стройно изложить. В прошлый раз я рассказал про синтаксические деревья и показал простейший транслятор в питон (по факту, обычный pretty print дерева). Но если в предыдущей статье я синтаксическое дерево строил вручную, то сегодня всё же будем автоматизировать процесс.
Сегодня я публикую две статьи разом, поскольку по дороге меня довольно круто занесло, и получился небольшой спин-офф. Очень рекомендую к прочтению :)
Ну а тема этой статьи - автоматическое построение синтаксического дерева aka лексер и парсер.
Мой опыт подготовки к экзамену по английскому CPE (Certificate of Proficiency in English) на уровень С2 и его сдачи
Are you suggesting coconuts migrate?
MPHG
В IT важно держать руку на пульсе, поэтому в прошлом году, поглядывая краем глаза очередные курсы, я начал присматриваться к целой онлайн-программе и, к своему невероятному удивлению, узнал, что от меня требуют сертификат английского. Тем временем, давным-давно уже все мои бумажки превратились в филькины грамоты, да разложились на плесень и липовый мёд.
«Непорядок», — подумал я. Так и родилась идея сдавать экзамен по английскому, но почему именно CPE? А не, скажем, CAE (Cambridge C1) или там TOEFL (американский общий тест на знание английского), IELTS (версия этого же экзамена, но от Cambridge).
О том, зачем это всё — и что вообще из всего этого вышло — здесь и пойдет речь. Заодно расскажу, как готовился, что помогло, а что — пустая трата денег и времени. Бонусом — пара рекомендаций фильмов, сериалов, художественной литературы и учебных материалов.
ОСТОРОЖНО — ТРАФИК, да‑да, под катом будет много картинок, личного мнения автора и его же несмешного юмора (придется потерпеть) — ответ на вопрос в КПДВ тоже там!
Книги, о которых редко говорят
Дал ему подборку книг, он приходит месяца через два, и с порога такой сразу:
— Я с друзьями не могу разговаривать.
— Ну да есть такой, недостаточек.
интервью Жака Фреско
Малоизвестные и интересные особенности C и C++
В C и C++ есть особенности, о которых вас вряд ли спросят на собеседовании (вернее, не спросили бы до этого момента). Почему не спросят? Потому что такие аспекты имеют мало практического значения в повседневной работе или попросту малоизвестны.
Целью статьи является не освещение какой-то конкретной особенности языка или подготовка к собеседованиям, и уж тем более нет цели рассказать все потайные смыслы языка, т. к. для этого не хватит одной статьи и даже книги. Напротив, статья нужна для того, чтобы показать малоизвестные и странные решения, принятые в языках C и C++. Своего рода солянка из фактов. Вопрос “что делать с этими знаниями?” я оставляю читателю.
Если вы, как и я, любите и интересуетесь C/C++, и эти языки являются неотъемлемой частью вашей жизни, в том числе и его углубленного изучения, то эта статья для вас. По большей части я надеюсь, что эта статья сможет развлечь и заставить поработать головой. И если получится, рассказать что-то, чего вы, возможно, еще не знали.
Загрузка драйверов в ядре Linux
Почти все знают, как написать простой драйвер под Linux. На эту тему много материалов в сети. Очень мало информации о том, что находится "под капотом" у процедуры загрузки драйверов.
Эльфы и пингвины: что такое ELF и как он работает в Linux?
Всем привет! С вами как всегда я, Аргентум. Сегодня я расскажу и поведаю вам древние тайны, которые хранят горные старцы-сисадмины — тайны об эльфах, и как они взаимодействуют с древним народцем пингвинов. Дамы и господа, встречайте — статья о работе ELF и двоичных файлов в Linux!
Что такое ELF? Чем он отличается от PE в Windows? И многие другие ответы на ваши вопросы.
Перед тем как погрузиться в технические детали, будет нелишним объяснить, почему понимание формата ELF полезно. Это позволяет изучить внутреннюю работу операционной системы. Когда что-то пошло не так, эти знания помогут лучше понять, что именно случилось, и по какой причине. Также возможность изучения ELF-файлов может быть ценна для поиска дыр в безопасности и обнаружения подозрительных файлов. И наконец, для лучшего понимания процесса разработки. Даже если вы программируете на высокоуровневом языке типа Go или Rust, вы всё равно будет лучше знать, что происходит за сценой.
Итак, зачем изучать ELF?
- Для общего понимания работы операционной системы
- Для разработки ПО
- Цифровая криминалистика и реагирование на инциденты (DFIR)
- Исследование вредоносных программ (анализ бинарных файлов)
Выделение памяти для DMA в Linux
Это перевод Поста Allocating Memory for DMA in Linux
В этом посте мы рассмотрим распределение памяти в Linux с использованием очень больших страниц с тем, чтобы совместно использовать эту память с устройствами PCIe, использующими DMA.
Эволюция технологий виртуализации сети в Linux
Виртуализация оборудования — одна из важнейших и фундаментальных технологий в области облачных вычислений. Без нее не смогло бы работать ни одно «устройство» внутри виртуальных машин: ни сетевая карта, ни диск, ни клавиатура, ни мышь и т. п. В статье мы проследим развитие технологий виртуализации оборудования в Linux.
Что для вас Linux? Или как устроен запуск процессов
Как бы вы ответили на вопрос, что такое операционная система?
Скорее всего, вы легко сможете ответить на этот вопрос человеку далекому от IT, но подобный вопрос вам может задать, например, HR - в попытке переманить вас в какой-нибудь Facebook или Google. С одной стороны, ответить на этот вопрос очень легко и в интернете можно найти много определений, но относится ли, например, конфигурация DNS и файл /etc/resolv.conf
к ОС ? Или в какой области памяти работает ОС - в памяти с безграничными возможностями для кода, называемой kernel space, или все же в лимитированной user space?
На эти вопросы даже в этой статье вы не найдете однозначного ответа, и только вам решать, что для вас ОС, а что пользовательские приложения. Но в конце статьи я все же приведу свои аргументы, почему важно знать, как это работает, даже если вы сеньор программист/админ/девопс, проживший без этих знаний 35 лет и весьма успешно запустивший множество проектов.
Что такое трейдинг, и как начать торговать в плюс в 2023? Да, опять про трейдинг. Но…
Очередная статья про трейдинг. Все по-честному. И максимально простым языком. С мемами. С объяснением почему твой брокер «кухня». С домашним заданием и описанием всего, что нужно на старт.
А ещё здесь ссылки… Много ссылок. На книги. На те, книги, которые в отличие от твоего знакомого «Гуру-трейдинга на крипте в позиционке» реально раскидывают по полочкам. Как торговать. Где торговать. Чем торговать. И почему тебе вообще лучше не торговать.
Много терминов. Много мемов. Немного сумбурная структура. Но, а как вы хотели? Если в одной статье есть и волновой анализ Элиота, и пару слов о превышении ликвидности криптовалют, да все это ещё и приправлено помесью Мартингейла, теории игр, мат-ожидания, Фиксированных фракций, и куче других непонятных слов.
В общем, если ты всегда хотел, чтобы кто-то без рекламы «трейдер х, иди к нам и получи приветственный бездепозитный» рассказал тебе, как оно работает на самом деле, да ещё и комплексно (а не отрывочно по секретным методикам, которые сегодня работают, завтра нет). Тебе сюда!
Бесит, что err != nil: главные инсайты из опроса Go-разработчиков
Месяц назад мы вместе с Хабром спросили у Go‑разработчиков, чем они живут, над какими задачами работают и где черпают полезную информацию о Go. В этом посте расскажем об основных инсайтах, а также узнаем, почему многие Go‑разработчики знают Python и мечтают выучить Rust.
Пишем драйвер ядра Linux для неизвестного USB-устройства
В этой статье объяснен весь процесс, на выходе которого получается рабочий драйвер ядра Linux для недокументированного USB-устройства. Выполнив обратную разработку коммуникационного протокола USB, я покажу архитектуру драйвера ядра для USB. Кроме драйвера ядра в этой статье будет рассказано о простом инструменте для пользовательского пространства; при помощи этого инструмента можно управлять таким устройством. Конечно, придется углубиться в подробности, касающиеся конкретного прибора, но не сомневайтесь – описанный процесс с тем же успехом применим и к другим USB-устройствам.
Как самому за один вечер собрать минимальную ОС Linux из исходного кода
В современном мире нас окружает огромное количество электронных устройств различной степени сложности. Если устройство более или менее сложное, например, телевизор, маршрутизатор, смартфон, то с большой долей вероятности оно работает под управлением операционной системы Linuх, и эта мысль не даёт мне покоя.
Ещё больше не даёт покоя мне тот факт, что все ядра операционной системы Linux, которые работают на различных устройствах и серверах, собраны из исходного кода, находящегося в репозитории на сайте kernel.org.
Такие разные устройства, а операционная система, работающая на них, собрана из одного и того же исходного кода! Это утверждение, конечно, верно лишь отчасти, так как фактически ядро обычно расширено и модифицировано разработчиками конкретных дистрибутивов Linux, а также разработчиками конкретных устройств, но общего исходного кода достаточно много.
Мне всегда хотелось собрать операционную систему Linux самому из исходного кода, но процесс этот всегда казался сложным и запутанным, да и многого я не понимал. Но всё-таки в определённый момент времени я накопил достаточное количество знаний, чтобы осуществить свою мечту. В этой статье я хочу рассказать вам, как собрать минимальную Linux из исходного кода и запустить её у себя на компьютере.
Полезные ресурсы для погружения в Go: выбор сотрудников Selectel
Попросили коллег порекомендовать ресурсы — подкасты, ютуб-каналы, книги, блоги и GitHub-репозитории — для изучения языка программирования Go. Сохраняйте подборку в закладки: пригодится и начинающим, и опытным специалистам. А также делитесь своими вариантами в комментариях.
Information
- Rating
- Does not participate
- Location
- Новосибирск, Новосибирская обл., Россия
- Date of birth
- Registered
- Activity