Как стать автором
Обновить
117
0
Сергей Дегтярев @degs

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

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

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

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

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

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

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

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

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

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

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

Итак, чтобы самому разобраться в теме, я собираюсь написать транслятор с эзотерического языка программирования wend (сокращение от week-end), который я только что сам придумал, в обычный ассемблер. Задача уложиться в несколько сотен строк питоновского кода. Основной репозиторий живёт на гитхабе (не забудьте заглянуть в мой профиль и посмотреть другие tiny* репозитории).

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

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

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

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


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


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


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


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


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


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

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

OpenConnect: недетектируемый VPN, который вам понравится

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

Я уже написал здесь много статей на тему прокси-протоколов и прокси-клиентов, которые очень сложно детектировать и заблокировать, и которые используют пользователи в Китае, Иране, Ираке, Туркменистане, и теперь вот в России (мы здесь в отличной компании, правда?). Но довольно часто мне в комментариях писали, мол, это все отлично, но мне нужен именно VPN для целей именно VPN - доступа в частные локальные сети, либо для соединения клиентов между собой, и желательно так, чтобы его не заблокировали обезьяны с гранатой. Поэтому сегодня мы поговорим именно о VPN.

Классические OpenVPN, Wireguard и IPSec отметаем сразу - их уже давно умеют блокировать и блокировали не раз. Модифицированный Wireguard от проекта Amnezia под названием AmneziaWG — отличная задумка, но есть одно но...

Читать далее
Всего голосов 325: ↑324 и ↓1+323
Комментарии342

Решаем проблемы с RAII у std::thread: cancellation_token как альтернатива pthread_cancel и boost::thread::interrupt

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

Статья рассматривает проблемы в std::thread, попутно разрешая древний спор на тему "что использовать: pthread_cancel, булев флаг или boost::thread::interrupt?"


Проблема


У класса std::thread, который добавили в C++11, есть одна неприятная особенность — он не соответствует идиоме RAII (Resource Acquisition Is Initialization). Выдержка из стандарта:


30.3.1.3 thread destructor
~thread();
If joinable() then terminate(), otherwise no effects.

Чем нам грозит такой деструктор? Программист должен быть очень аккуратен, когда речь идёт об разрушении объекта std::thread:


void dangerous_thread()
{
  std::thread t([] { do_something(); });
  do_another_thing(); // may throw - can cause termination!
  t.join();
}

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

SectorC: компилятор Си в пределах 512 байт

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

SectorC (github) – это компилятор Си, написанный на ассемблере x86-16 и умещающийся в загрузочный сектор 512 байт машины x86. Он поддерживает достаточно обширную функциональность Си для создания реальных и интересных программ, являясь при этом, пожалуй, самым миниатюрным компилятором Си из когда-либо написанных.
Читать дальше →
Всего голосов 152: ↑150 и ↓2+148
Комментарии45

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

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

Сегодня речь пойдёт о треугольниках, о пространствах, о треугольных координатах, о симметрии и совсем немножко о мере на множестве. Основной же темой рассказа будет факторизация множеств и пространств. Мы построим и исследуем пространство треугольников. Оно очень простое, но последовательно изучить его, полезно, поскольку если кто‑либо из ребят выберет себе путь в жизни, связанный с математикой или физикой, то ему придётся иметь дело с пространствами куда более сложными и трудно представимыми. Так что хорошо бы приобрести кое‑какую интуицию, оперируя чем‑нибудь простым.

Читать далее
Всего голосов 66: ↑65 и ↓1+64
Комментарии26

Раскрываем секреты загрузочных ISO-образов

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


В этой статье я хочу поговорить об ISO-файлах, на которых, как известно, распространяются дистрибутивы операционных систем. Начиная писать статью, я немного сомневался в её актуальности, так как я ассоциировал ISO-образы с оптическими дисками, которые, ввиду ряда причин, уходят в прошлое. У меня было стойкое понимание, что ISO-файлы в основном нужны только для хранения образов оптических дисков, которые содержат установщик операционной системы. Но, как оказалось, всё гораздо сложнее и интереснее, особенно применительно к современному железу.
Читать дальше →
Всего голосов 193: ↑193 и ↓0+193
Комментарии73

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

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

Я люблю давать простые задачки студентам на лекции. Во-первых, понятно, скольких мы потеряли, во-вторых, это переключение из режима потребления информации в режим выдачи результатов, в третьих — возможность проявить себя для шустрых. Сплошные плюсы!

Одна из простых задач звучит так: «При переводе картинки из цветового пространства RGB в YUV мы выполняем прореживание, то есть выкидываем каждый четный столбец и каждую четную строку в компонентах U и V (все компоненты пикселя по 1 байту). Вопрос: во сколько раз меньше данных у нас стало?» Эта операция называется chroma subsampling и широко используется при сжатии видео, например.

Забавно, что когда-то давно, когда винчестеры были меньше, а дискеты больше, студенты реально отвечали на этот вопрос быстро. А в последние годы регулярно народ в ступор впадает. Приходится разбирать по частям: «Если выкинуть каждую четную строку и каждый четный столбец, во сколько раз меньше данных будет у компоненты?» Почти хором: «В четыре». Начинаю подкалывать: «Отлично! У нас было 3 яблока, первое осталось как есть, а от второго и третьего осталось по четвертинке. Во сколько раз меньше яблок у нас стало?» Народ ржет, но, наконец-то, дает правильный ответ (заметим, не все). 

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

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

Кому интересно как теряют мозг студенты масштабы бедствия и что с этим делать — добро пожаловать под кат!

Читать далее
Всего голосов 411: ↑395 и ↓16+379
Комментарии795

Наглядное руководство по SSH-туннелям

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

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

Туннели SSH — это зашифрованные TCP-соединения между клиентами и серверами SSH. Трафик входит с одной стороны туннеля и прозрачно выходит с другой. Изначально этот термин относился к туннелям на виртуальных сетевых интерфейсах TUN/TAP, однако сейчас так обычно называют проброс портов SSH.

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

Привлекательные структуры данных

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

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

Помните: если что-то не компилируется, это псевдокод. 

Привлечься!
Всего голосов 78: ↑78 и ↓0+78
Комментарии16

Гайд: работающие способы вывести деньги за рубеж / завести в Россию

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

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

Читать далее
Всего голосов 116: ↑103 и ↓13+90
Комментарии173

Бесплатные сервисы для разработчиков — огромный список

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

Бесплатное хранилище артефактов PackageCloud

Удивительно, но в интернете сотни сервисов, которыми разработчик может пользоваться совершенно бесплатно. «Бесконечное» время (пока компания не обанкротится или не изменит условия), без рекламы, пробного периода и других подводных камней.

Недавно мы обсуждали эту тему в статье «Боль разработчика: “Никогда не давайте пользователям бесплатный тариф”». Речь шла о том, что на самом деле бесплатный план вовсе не бесплатен — приходится тратить массу времени и усилий на поддержку этих тарифов.

Но для некоторых бесплатный тариф — единственный способ завлечь новых клиентов. Это просто замечательно с точки зрения самих пользователей. Ведь перед нами десятки бесплатных хостингов, API, CMS, CDN, сервисов обработки данных, поисковых движков, репозиториев, инструментов проверки кода и других. Бесплатный тариф идеален для опенсорс-разработчиков, любительских и некоммерческих проектов, маленьких стартапов. Ни за что не надо платить.
Читать дальше →
Всего голосов 83: ↑77 и ↓6+71
Комментарии15

Домашний DPI, или как бороться с провайдером его же методами

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

Долгое время я терпел ограничения РосКомНадзора и соответствующие действия провайдеров по различным ограничениям доступа к сайтам - но с определённого момента устал, и начал думать как бы сделать так, чтобы было и удобно, и быстро, и при этом с минимумом заморочек после настройки... Хочу оговориться, что цель анонимизации не ставилась.

Вообще, эта проблема имеет несколько решений... Но я решил бороться с провайдером их же методом.

...При помощи NGINX!
Всего голосов 246: ↑245 и ↓1+244
Комментарии187

Доступ к элементам std::tuple во время исполнения программы

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

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

Мне в голову пришла идея: а что если получать доступ к элементам по индексу, не известному на этапе компиляции?

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

Кунг-фу стиля Linux: разбираемся с последовательными портами

Время на прочтение8 мин
Количество просмотров21K
Раньше последовательные порты были буквально повсюду. И они, в каком-то смысле, никуда и не делись, так как многое, что подключается к компьютеру по USB, на самом деле, выглядит для системы как последовательный порт. Проблема тут заключается в том, что в наши дни всё в мире завязано на компьютерные сети. Конечно, можно купить терминальный сервер, который преобразует последовательный порт в интерфейс Ethernet. Но это совсем не интересно. Здесь я хочу рассказать о том, как пробрасывать последовательные порты по сети с использованием существующих Linux-инструментов. Решение это не идеальное, оно оказывается работоспособным далеко не всегда, но если оно работает, то работает оно хорошо.


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

Как мы раскрыли 24-летний баг в ядре Linux

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

Захватывающий детективный рассказ о поиске и исправлении трудноуловимого и при этом весьма странного бага, который неведомым образом ускользал от обнаружения на протяжении долгих лет взросления системы Linux. В начале описывается предыстория и технологическая база компании, в которой этот баг постигло разоблачение, после чего автор подробно демонстрирует все предпринятые для его раскрытия шаги.
Читать дальше →
Всего голосов 163: ↑156 и ↓7+149
Комментарии38

Что почитать (НаучПоп / Научная Фантастика)

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

Некоторые время назад сильно увлёкся потреблением информации с научно-популярным уклоном. Но как не заблудиться в миллионах книг? Ресурс то ограничен. А значит придётся выбирать.

Удалось собрать библиотеку по 4 разделам:


Раздел 1. Законы науки и мышление
(Математика, Рациональность, Научный метод, Когнитивные искажения, Нейрофизиология, Ошибки мышления, Доказательная медицина)

Раздел 2. Законы природы
(Физика, Математика, Теория относительности, Квантовая механика, Астрофизика, Астрономия, Изобретения и открытия)

Раздел 3. Законы жизни
(Абиогенез, Теория эволюции, Молекулярная биология, Биоинформатика, Биология клетки, Антропогенез)

Раздел 4. Художественный научпоп / Научная фантастика

Обменяться рекомендациями
Всего голосов 44: ↑41 и ↓3+38
Комментарии253

Неравенства Белла — физика и математика

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

Эта статья - очередная попытка популярно изложить суть неравенства Белла и парадокса Эйнштейна-Подольского-Розена. Статьи, которые мне попадались ранее, либо сходу начинали с физических формул. и содержали кучу бра-кетов, тензорных произведений и прочих эрмитовых операторов. Что не способствовало пониманию среди широкой аудитории (вроде меня). Либо содержали довольно простые математические рассуждения, но непонятно как соотносящиеся с реальными физическими экспериментами. Либо были недостаточно подробными (в стиле «видите 2 линии на графике? Что и требовалось доказать»). Либо вообще неверными! Когда автор берет три независимых квантовых параметра и из-за ошибки в рассуждениях приходит к выводу, что это будет чем-то принципиально отличаться от трёх самых обычных случайных величин-«монеток».

Последнюю статью я сам считал неплохой иллюстрацией ЭПР-парадокса, пока до меня не дошло что в ней ошибка. После чего я решил наконец разобраться с «парадоксом» раз и навсегда.

Разбираться будем вместе под катом
Всего голосов 25: ↑24 и ↓1+23
Комментарии43

Как удалить «неудаляемые» приложения со смартфона

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


Чтобы увеличить привлекательность смартфонов, производители ставят на них как можно больше разных программ. Это понятно. Просто берём и удаляем ненужное… Стоп.

Оказывается, некоторые программы невозможно удалить. Например, на отдельных моделях Samsung невозможно удалить Facebook (есть только опция 'disable'). Говорят, на Samsung S9 вдобавок предустановлены «неудаляемые» приложения Microsoft.

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

Всё это надо зачистить.
Читать дальше →
Всего голосов 190: ↑179 и ↓11+168
Комментарии203
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Зарегистрирован
Активность