Search
Write a publication
Pull to refresh
0
Василь Бєляєв @VXPread⁠-⁠only

C#, C++, Lua

Send message

Три наблюдения о командной строке и путях в файловой системе

Level of difficultyEasy
Reading time5 min
Views8K

Иногда опыт работы оказывается не полезным, а совсем наоборот. Мышление привыкает к шаблонам и впадает в оцепенение, когда реальность перестаёт в эти шаблоны укладываться. Не зря в таких случаях говорят о "разрыве шаблона".

Несмотря на то, что режимы командной строки Windows и Linux в чём-то похожи, нельзя переносить опыт работы в одной из этих систем на другую. О некоторых аспектах указания путей к файлам и каталогам в командной строке Linux и их интерпретации SH-совместимой командной оболочкой пойдёт речь в этой статье.

Читать далее

Стабильный релиз Wine 9.0? Спустя год он всё-таки появился — вместе с 7 000 изменений

Reading time5 min
Views23K

Привет, Хабр! Кажется, мы действительно дождались стабильного релиза Wine 9.0. Спустя год времени и 26 промежуточных версий представлена официальная версия Wine 9.0. Разработчики внесли несколько тысяч изменений, так что здесь есть что обсудить. Основные нововведения — архитектура WoW64 для запуска 32-разрядных программ в 64-разрядном окружении, интеграция архитектуры ARM64, а также добавление драйвера для поддержки Wayland. Конечно, есть и другие новинки. Подробнее о них — под катом.

Читать далее

Разбираем самый маленький PNG в мире

Level of difficultyEasy
Reading time9 min
Views39K

Самый миниатюрный PNG в мире весит 67 байт и представляет собой один чёрный пиксель. Выше вы видите его в 200-кратном увеличении.

Красота, не так ли?

Состоит этот файл из четырёх частей:

  1. Сигнатура PNG, одинаковая во всех файлах этого формата: 8 байт.
  2. Метаданные изображения, включая его размеры: 25 байт.
  3. Данные пикселя: 22 байта.
  4. Маркер «конец изображения»: 12 байт.

Далее я опишу этот файл подробнее и постараюсь объяснить принцип работы формата PNG.

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

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

Reading time18 min
Views31K

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

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

Читать далее

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

Level of difficultyMedium
Reading time12 min
Views20K

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

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

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

Читать далее

Сжимаем текст в изображения PNG

Level of difficultyEasy
Reading time2 min
Views6.1K

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

Текст шекспировской трагедии «Ромео и Джульетта» состоит примерно из 146 тысяч символов. Благодаря английскому алфавиту каждый символ можно описать одним байтом. Так что размер текстового файла в обычном Unicode составляет примерно 142 КБ.

В статье Adventures With Compression её автор JamesG размышляет о соревнованиях по сжатию текста и предлагает интересную мысль...

Читать далее

VSCode+CMake+openocd для программирования и отладки ch32

Level of difficultyMedium
Reading time12 min
Views15K

На хабре немало статей по настройке окружения для разработки под микроконтроллеры stm32 и другие платформы. Кто-то предпочитает использовать спец.пакеты (CubeIDE, Keil), кто-то - расширения для IDE "общего назначения" (PlatformIO, VisualGDB), кто-то, как и автор, "голый" CMake в связке с бесплатным VSCode.

В процессе знакомства с пока еще не слишком популярными RISC-V микроконтроллерами ch32, которые, в целом, способны заменить stm32, захотелось обеспечить себе привычную и уже удобную связку VSCode+CMake для программирования, сборки, прошивки и отладки. И это получилось!

RISCнём (по-китайски)

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

Level of difficultyMedium
Reading time9 min
Views4.1K

Разобран алгоритм, ориентированный главным образом на решение неправильных судоку (9х9), и на примерах показано, как можно их «подправить».
Правильное судоку имеет единственное решение, которое печатается, например, в газетах в виде одной заполненной цифрами таблицы. Но многие генераторы судоку из интернета, да и газеты часто приводят головоломки судоку с одним (но вовсе не единственным) ответом на судоку. Получить нетривиальное правильное судоку непросто. Поэтому уместно, взяв за основу опубликованные неправильные судоку, «подправить» их, дополнив некоторыми условиями, и получить подправленные судоку с одним решением, которое можно представить (и напечатать) в виде одной таблицы как ответ на судоку.

Читать далее

Хабргорода

Level of difficultyMedium
Reading time9 min
Views2.4K

У меня возникла идея сделать список упоминаний названий городов в статьях Хабра за 2023 год и карту по которой можно найти статьи. Публикации, где упоминается конкретный город. С первого взгляда задачка простая, но это как всегда дьявол кроется в деталях!

Для этого нужны данные статей Хабра, названия городов с координатами и поиск этих названий в текстах статей. Задача осложняется великим и могучим языком со склонениями и многозначностью слов. Создание списка статей с Хабра за 2023 год по городам мне чем-то напомнило работу первых поисковых движков в рунете. Теперь я понимаю как кусали себя за локти программисты тех дней!

Читать далее

Как ломать сайты на «1С-Битрикс»

Reading time4 min
Views23K

Привет! Вероятно, тебе когда-нибудь попадались веб-приложения, построенные на «1С-Битрикс: Управление сайтом», и ты задавался вопросом: как это ломать? Вроде бы прошелся по всем известной методичке, но все равно пусто. На прошлой работе я намучился ломать такие сайты, и вследствие выживания в дикой природе «Битрикса» у меня появились свои векторы атак. Я с тобой ими поделюсь — let’s go!

Читать далее

Best free software: какой софт мы использовали 15 лет назад (часть 1)

Reading time10 min
Views12K

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

Тогда компьютерные журналы составляли подборки лучшего ПО на разные случаи жизни. Давайте вспомним, что было популярным лет 15 назад. Осторожно: от скриншотов может свести олдскулы (мы вас предупредили).

Читать далее

Удары по корневой инфраструктуре, медленные атаки и хактивизм: как менялись DDoS-атаки в нулевых

Level of difficultyEasy
Reading time6 min
Views2.7K

Частота и масштаб DDoS-атак увеличиваются ежегодно. Услуги DDoS as a service позволяют всем желающим относительно легко проводить продолжительные атаки, которые трудно нейтрализовать. В CloudMTS мы уделяем пристальное внимание защите инфраструктуры и хотим ближе познакомить вас с истоком проблем распределенных атак.

Первые шаги в истории DDoS не привлекали внимание широкой публики, но со временем методы злоумышленников становились все изощреннее, а результаты их применения — более заметными: под ударом оказался как бизнес, так и корневая инфраструктура интернета. Обсудим, какими были DDoS-атаки в период с 2000-го по 2010-й.

Читать далее

Кручу-верчу, запутать хочу

Level of difficultyEasy
Reading time2 min
Views18K

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

Читать далее

Скрытые возможности элемента <input>

Level of difficultyMedium
Reading time8 min
Views23K

Элемент <input> в HTML самый интересный.

Большинство его собратьев вне зависимости от своих атрибутов ведут себя одинаково. При этом атрибут type элемента <input> может принимать 22 разных значения, которые не только меняют его поведение, но и влияют на внешний вид (зачастую в ущерб стилистике).

Элемент <input> отвечает за всё, начиная с текстового ввода и чекбоксов, заканчивая переключателями и кнопкой для сброса всех полей в форме. В этой статье я опишу не только различные типы <input>, но и сопутствующие атрибуты, о которых вы могли не знать, и которые делают этот элемент более удобным и применимым в различных ситуациях. Приступим!
Читать дальше →

JavaScript однопоточный или многопоточный? Ставим точку

Reading time10 min
Views42K

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

Читать далее

О кастомных HTML-тегах по-человечески и как их использовать

Level of difficultyMedium
Reading time7 min
Views15K

Расскажу вам о том, как использовать чудо-юдо под названием «Кастомные HTML‑теги» понятно, но подробно.

Читать далее

Гайд: проектируем систему цветов. Всё про styles, tokens, variables

Level of difficultyMedium
Reading time10 min
Views22K

В этой статье я расскажу как упорядочить цвета в макетах и в уже готовом продукте; как перейти от стилей к токенам (variables), а также поделюсь рекомендациями для тех, кто только собирается внедрять стили и переменные для цветов.

Читать далее

Разрабатываю игры как хобби, как умею

Level of difficultyEasy
Reading time1 min
Views15K

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

Решил подсчитать, сколько игры такие в итоге принесли. Я не ною и не хвастаюсь. Это сухие цифры.

Эти игры я делал в свободное от работы время. Поэтому это является хобби. А основной источник мой дохода в IT компаниях.

Очень подробно о разработке каждой игры я рассказал в видео на час. Поэтому не буду здесь расписывать полотно текста. Это просто список с цифрами.

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

Читать далее

Зернистые градиенты на CSS и SVG

Level of difficultyEasy
Reading time5 min
Views9.4K

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

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

Читать далее

Сжатие целых чисел

Level of difficultyEasy
Reading time5 min
Views14K

Цель статьи осветить state of the art методы сжатия целых чисел, чтобы сэкономить в будущем время исследования алгоритмов и терминологии. При этом описание части алгоритмов может быть упрощено для понимания. Сравнение алгоритмов тоже находится вне рамках этой статьи. Подробнее можно почитать в ссылках.

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

Читать далее

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity