Как стать автором
Обновить
9
0
Игорь @igorzakhar

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

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

Про́клятый огонь, или магия препроцессора C

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

Задавались ли вы когда-нибудь вопросом, можно ли полноценно программировать при помощи директивы #define в языке C? Полнота по Тьюрингу шаблонов C++ известна весьма широко, например, люди пишут трассировщики лучей, делающие все вычисления во время компиляции (вместо времени исполнения). А как обстоят дела с препроцессором C? Вопрос оказался сильно нетривиальнее, и эта история является, на мой вкус, отличным анекдотом для курса лекций по теории компиляторов, что я готовлю в данный момент. В частности, для лучшего понимания происходящего здесь, рекомендую ознакомиться со второй статьёй, которую я опубликовал параллельно этой: лексер и парсер.

Чтобы не было обманутых впечатлений, предупрежу сразу, что рейтрейсера не будет, но про́клятый код будет очень даже! Итак, поехали. Для начала, почему я вообще задался этим вопросом? Если обычный код компьютерной графики вам скучен, следующий раздел можно пропустить, перематывайте до последней картинки.

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

Компилятор за выходные: лексер и парсер

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

Продолжаем разговор. На прошлой неделе я пообещал за выходные написать компилятор из простенького мной придуманного языка в ассемблер. В назначенное время уложился, и компилятор даже вроде работает, см. заглавную картинку. Теперь дело за малым, потихоньку причесать и стройно изложить. В прошлый раз я рассказал про синтаксические деревья и показал простейший транслятор в питон (по факту, обычный pretty print дерева). Но если в предыдущей статье я синтаксическое дерево строил вручную, то сегодня всё же будем автоматизировать процесс.

Сегодня я публикую две статьи разом, поскольку по дороге меня довольно круто занесло, и получился небольшой спин-офф. Очень рекомендую к прочтению :)

Ну а тема этой статьи - автоматическое построение синтаксического дерева aka лексер и парсер.

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

Python и чистая архитектура…

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

Всем привет! Сегодня я хочу поделиться своими опытом разработки на различных языках программирования и размышлениями касаемо проектирования серверных приложений. Речь пойдет про много обсуждаемую в последнее время чистую архитектуру в рамках языка python. Казалось бы, по заветам Роберта Мартина мы не должны зависеть от инструмента(зачастую под этим понимают фреймворк или библиотеку), однако это порождает множество ошибок и просто небольших неточностей в проектировании сервисов и даже выборе языка программирования.

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

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

Как содержать пароли. Мой сетап

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

Я долго собирал информацию о том, как организовать свои аккаунты. Как сделать доступ к ним достаточно надёжным и стойким к утере девайсов. 

Меня интересовало, как я могу залогиниться туда, где многофакторная авторизация через телефон, в случае потери телефона. 

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

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

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

Устанавливаем владельцев сайтов методами OSINT

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

Всем привет! В этой обзорной статье мы расскажем как установить владельца сайта с помощью OSINT. Материал рассчитан на неспециалистов. Так что начнeм с самых элементарных вещей, а затем пройдeмся и по неочевидным методам, которые позволят нам узнать, кто владеет тем или иным веб-ресурсом. За подробностями добро пожаловать под кат!

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

Как сделать NeoVim самым удобным текстовым редактором: туториал по настройке

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

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

Почему именно NeoVim? Всё просто: этот текстовый редактор сохраняет совместимость с Vim, но также предлагает дополнительные возможности и улучшенный интерфейс. Он позволяет более эффективно работать с кодом, а главное — настраивать редактор под свои нужды.

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

Книги, о которых редко говорят

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

Дал ему подборку книг, он приходит месяца через два, и с порога такой сразу:
— Я с друзьями не могу разговаривать.
— Ну да есть такой, недостаточек.
интервью Жака Фреско

Читать далее
Всего голосов 74: ↑72 и ↓2+87
Комментарии26

Курс «PostgreSQL для начинающих»: #3 — Сложные SELECT

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

Продолжаю публикацию расширенных транскриптов лекционного курса "PostgreSQL для начинающих", подготовленного мной в рамках "Школы backend-разработчика" в "Тензоре".

В этой лекции углубимся в расширенные возможности команды SELECT : как можно "сложить" и "вычесть" выборки (UNION/INTERSECT/EXCEPT), или запомнить и использовать в рекурсивных запросах (CTE), что дают оконные функции (WINDOW) и соединения (JOIN).

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

Читать далее
Всего голосов 32: ↑31 и ↓1+34
Комментарии7

Как работает протокол X11 на самом нижнем уровне

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

X11 это тот механизм на чем работает весь графический интерфейс Unix подобных ОС.


Но мало кто знает как он работает на самом деле. Потому что с годами он оброс слоями и слоями библиотек, которые стремятся скрыть саму сущность протокола.


А протокол в своей сути прекрасен. Он лаконичен и почти совершенен.


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


А все книги и статьи по использованию X11 описывают это через библиотеки прокладки типа XLib и XCB, и даже, что хуже, GTK или Qt.


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


Как бы то ни было, если кому-то интересно как все работает на самом деле, пожалуйста под кат.

Читать дальше →
Всего голосов 160: ↑158 и ↓2+197
Комментарии182

Как я с 0 поднял свой уровень английского до B2 и подтвердил этот уровень на экзамене IELTS Academic

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

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

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

Начнем с бекграунда и причин.

Я – инженер машиностроитель (мой профиль – торцевые уплотнения вращающихся валов). Я начал работать в своей отрасли сразу после бакалавра, параллельно заканчивая магистратуру, и как только я начал работать, я стал стараться впитать как можно больше теоретических знаний по моей специальности из академических источников. Достаточно бысто я понял, что последняя серьезная книга по моей специальности на русском языке была написана в 1978 году. И спустя больше чем 40 лет технологии сильно поменялись, а вот их описание на русском языке отсутствовает. Зато я нашел на reddit людей работающих в штатах в моей же отрасли. Они мне насоветовали кучу классной литературы. Разумееется, она вся на английском, и русского перевода не имеет.

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

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

Читать далее
Всего голосов 150: ↑146 и ↓4+165
Комментарии220

Гений 21 века. Чем сейчас занимается Фабрис Беллар

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров55K
Некоторые программисты настолько хорошо известны, что не нуждаются в особом представлении. Наверное, Фабрис Беллар — самая яркая звезда современности. Автор мультимедийного комбайна FFmpeg, эмулятора QEMU и десятков других полезных программ — абсолютный гений и пример программиста 100х, который в одиночку принёс больше пользы миру, чем многие корпорации с сотнями разработчиков. В общем, все знают Фабриса — про него ещё была статья на Хабре двенадцать лет назад…

… Но по просьбам молодых читателей мы решили вернуться к этой теме. Оно и к лучшему, ведь Фабрис многое сделал за это десятилетие, особенно в области нейросетей.
Читать дальше →
Всего голосов 156: ↑153 и ↓3+197
Комментарии49

Как запускается сервер: UEFI

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

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

Первая версия того, что сейчас известно как Unified Extensive Firmware Interface (UEFI), разрабатывалась в 90-е годы прошлого тысячелетия специально под системы на Intel® Itanium® и называлась Intel Boot Initiative, а позже — EFI.

Желание «обновить» процесс загрузки было ожидаемо. PC-BIOS, именуемый ныне Legacy, предлагает работать в 16-битном real mode, адресует всего 1 МБ оперативной памяти, а загрузчик вместе с таблицей разделов должен размещаться в первых 512 байтах накопителя. Более того, PC-BIOS передает управление первому найденному загрузчику без возможности возврата назад. При этом обработку случаев с несколькими операционными системами возлагают на плечи загрузчика.
Читать дальше →
Всего голосов 57: ↑57 и ↓0+57
Комментарии16

Почему B-деревья быстрые?

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

B-дерево — это структура, помогающая выполнять поиск в больших объёмах данных. Она была изобретена более сорока лет назад, однако по-прежнему используется в большинстве современных баз данных. Хотя существуют и более новые структуры индексов, например, LSM-деревья, B-дерево пока никто не победил в обработке большинства запросов баз данных.

После прочтения этого поста вы будете знать, как B-дерево упорядочивает данные и выполняет поисковые запросы.

Читать далее
Всего голосов 151: ↑150 и ↓1+183
Комментарии13

Пингвин расставил сети: работа сети в Linux

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

Всем привет! С вами снова я, Аргентум! Сегодня я продолжу нашу серию статей об ядре Linux.

В этой статье мы будем изучать способ организации сети в мире серверов и то, как она эволюционировала от использования традиционного сетевого стека ядра Linux к виртуализации сети с использованием OVS и к обработке нагрузки телекоммуникационных компаний с использованием NFV и SR-IOV.

Читать далее
Всего голосов 12: ↑10 и ↓2+13
Комментарии5

БагБаунти с АстраЛинус или то, что нужно знать о защищённости защищённой ОС

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

Хочу поделиться своим опытом участия в программе баг-хантинга ГК Астра (да, да - именно той, которая недавно совершила каминг‑аут IPO) на платформе BI.ZONE Bug Bounty.

Читать далее
Всего голосов 106: ↑104 и ↓2+127
Комментарии151

Встраивание в ядро Linux: перехват функций

Время на прочтение9 мин
Количество просмотров17K
Перехват функций ядра является базовым методом, позволяющим переопределять/дополнять различные его механизмы. Исходя из того, что ядро Linux почти полностью написано на языке C, за исключением небольших архитектурно-зависимых частей, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра достаточно иметь возможность перехвата соответствующих функций.

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

Читать дальше →
Всего голосов 31: ↑26 и ↓5+21
Комментарии37

Как заниматься английским языком самостоятельно: гайд по самостоятельному изучению грамматики для начинающих

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

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

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

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

Читать далее
Всего голосов 6: ↑5 и ↓1+7
Комментарии9

Сколько строк на C нужно, чтобы выполнить a + b в Python?

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

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

В этой статье мы опустимся на один уровень ниже и посмотрим, что же происходит внутри среды исполнения Python для выполнения простого действия a + b. Иными словами, мы узнаем о подробностях реализации типов, операторов и динамической диспетчеризации в CPython.

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

Читать далее
Всего голосов 39: ↑36 и ↓3+52
Комментарии64

Тайны пингвина: как работают исключения и прерывания в Linux?

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

image


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


Что это, как они работают в ОС и Linux? Давайте разберемся вместе!

Читать дальше →
Всего голосов 31: ↑25 и ↓6+29
Комментарии8

Как оптимизировать код на С для x86-процессоров: подсистема кэша и памяти, инструкции AVX-512

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

Меня зовут Андрей Бакшаев, я ведущий инженер-программист в YADRO. Моя команда занимается разработкой и оптимизацией математических библиотек под архитектуру x86. До этого я 15 лет работал в Intel. Значительная часть моих задач заключалась в том, чтобы реализовывать некоторые алгоритмы обработки изображений и сигналов в довольно известной математической библиотеке IPP, максимально эффективно используя возможности процессоров. Я также исследовал производительность этих алгоритмов в процессорах на ранней стадии проектирования. 

В статье я поделюсь своим опытом оптимизации низкоуровневого кода на языке C. Рассмотрим подсистему кэша и памяти процессоров и новые инструкции AVX-512. Разберем пример ускорения копирования байтового массива данных и посмотрим, как векторизованный код позволяет сократить время работы широко используемого алгоритма замены байтов по таблице с 619 до 34 мс, то есть примерно в 18 раз. 

Читать далее
Всего голосов 42: ↑39 и ↓3+48
Комментарии23

Информация

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