Обновить
137.09

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Период
Уровень сложности

RGB Invaders для 10K Apart

Время на прочтение1 мин
Охват и читатели945
RGB InvadersПродолжая эстафету, начатую whoozle и dima117, хочу представить свою работу для конкурса 10K Apart.
Когда я узнал о конкурсе, я сразу решил — нужно писать вариацию на тему Space Invaders. Добро пожаловать под кат, чтобы узнать что у меня получилось :)
Читать дальше →

Ода хейта C++

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

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

Я работаю в геймдеве, где С++ все еще популярен и ценится за все эти качества. Так же я много работал с C#, Lua, Python, немного JS и PHP. В общем, есть с чем сравнить.

Однако, у меня есть изрядная доля ненависти к С++. Я вижу в нем кучу проблем, которые не решаются годами. Я вижу как другие страдают от этих проблем.

В этой статье я хочу излить душу, за что я ненавижу С++. Мне от этого станет легче, возможно кому-то еще. Не стесняйтесь писать свой хейт (или защиту), устроим групповой сеанс терапии (или холивар)

Дисклеймер: Не стоит относиться слишком серьезно к этому тексту. Он наполнен душевной болью, и направлен лишь на релаксацию и сброс напряжения

Читать далее

Массивы, указатели и другие квантовые явления вокруг нас

Время на прочтение6 мин
Охват и читатели31K
Не хочу говорить, что мы все живем в матрице, но для имитации соседей подозрительно используется один и тот же звук катающегося шара.



Этот пост полностью соответсвует своему названию. Для начала в нем будет показано, что вопреки утверждению стандарта, а также классиков языка Си Кернигана и Ритчи, использование индексов массивов соверешенно не равнозначно использованию соответствующих указателей, а выбор эпиграфа будет понятен в самом конце. И да – середина поста тоже не пустая.
Читать дальше →

Архив Рекурсивный.7z: какой-то файл и архив Рекурсивный.7z

Время на прочтение8 мин
Охват и читатели35K
Формат архивов 7-Zip довольно гибкий и позволяет, например, включать весь архив как один из файлов внутри самого архива, лишь немного считерив. Разберём формат на примере: создадим почти вручную архив с именем «Рекурсивный.7z», содержащий два файла: «Какой-то файл.txt» с содержимым «Hello, Habrahabr!» и «Рекурсивный.7z», копию самого себя.

Краткая документация по формату входит в LZMA SDK. Архив начинается со следующей структуры размером 32 байта. Все позиции внутри архива кодируются как смещения относительно конца этой структуры.
сигнатура, 6 байт: { '7', 'z', 0xBC, 0xAF, 0x27, 0x1C };
версия формата, два байта { Major, Minor }, 7-Zip 9.20 пишет сюда { 0, 3 };
CRC следующих трёх полей, 4 байта;
смещение основного заголовка относительно конца этой структуры, 8 байт;
размер основного заголовка, 8 байт;
CRC основного заголовка, 4 байта.

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

Основной заголовок может быть сам по себе упакован (а также зашифрован). Поскольку он содержит структурированные данные (типа имён файлов), коэффициент сжатия достаточно неплохой. Именно для возможности подобного сжатия вся информация о файлах в 7z собрана в одном заголовке и полностью отделена от сжатых данных файлов. Признак упакованности — первый байт основного заголовка: он должен быть равен 1 у неупакованного заголовка и 0x17 у упакованного. Для создания архива вручную мы не будем ничего сжимать.

Читать дальше →

Играем в Portal на калькуляторах TI-83 и TI-84

Время на прочтение1 мин
Охват и читатели51K


Если у кого из представителей хабрасообщества есть калькуляторы от Texas Instruments (модели TI-83 и TI-84), вы можете разнообразить свой досуг, играя в Portal. Правда, не в ту красочную версию, которую мы видели на прочих, более мощных, платформах, но игра вполне себе достойная. Демонстрация игрушки — в продолжении.

Читать дальше →

Vanilla JS — очень мощный javascript-фреймворк

Время на прочтение4 мин
Охват и читатели203K
Как ни странно, на Хабре упоминание этого мощнейшего фреймворка нашлось лишь в одном комментарии от апреля 2012 года.

Вступление


Для меня эта тема особенно актуальна, ведь последнее время на Хабре упоминается огромное количество js-фреймворков. Какие-то из них авторы различных проектов находят в Сети, какие-то — пишут сами, не очень понимая зачем. Кто-то просто пишет свои велосипеды.

Моё же мнение — надо стремиться к отсутствию избыточного кода, к максимальному минимализму, простите за тавтологию.
Если на весь сайт вам нужно только выбирать html-элементы по их id — глупо подключать jQuery.

Если вам на Node.js проекте надо собрать пачку js-файлов и сжать их — глупо писать или подключать тяжёлые фреймворки с кучей настроек, параметров, дополнений и методов, ведь простейший скрипт, склеивающий файлы и прогоняющий их через Кроукфордский jsmin будет намного быстрее, надёжнее и проще.

Чем больше кода — тем больше ошибок. Чем больше стороннего кода — тем сложнее поддерживать проект. Ведь когда вы берёте чужой код, вы берёте на себя и ответственность за его поддержку. Нельзя будет сказать «этот баг не мой, а вон из той библиотеки».

Vanilla JS


Итак, начнём обзор этого мощнейшего и самого популярного в мире JS-фреймворка.

Секреты Тима Фоллина, бипер, Спектрум и QChan

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели4.6K

Сегодня — экстремальный geek out: максимально узкоспециальная тема с запутанным кодом на ассемблере Z80. Раскроем секреты Тима Фоллина в «биперной» музыке на Sinclair ZX Spectrum 48K, попытаемся повторить, а может быть и превзойти его достижения. Некогда объяснять, разберёмся по ходу кода!
Читать дальше →

Мой опыт с резиновым мужиком. Github Copilot

Время на прочтение15 мин
Охват и читатели31K

Первая моя ассоциация с Github Copilot - это резиновый мужик-автопилот из фильма "Аэроплан". Помню, в детстве я увидел этот фильм и потом реально думал, что так автопилоты и выглядят: какая-то смешная резиновая кукла надувается и начинает управлять самолётом. И вот, через столько лет меня не покидает ощущение, что передо мной надувается какая-то кукла и пытается писать за меня код.

Короче, нежданно-негаданно мне пришёл инвайт в GitHub copilot. Я и забыл про то, что когда-то запрашивал доступ - ажиотаж давно уже спал, вроде мир не захвачен машинами, а значит, не такой уж он и крутой, да? С другой стороны, недавно к нам на позицию senior python постучал чел и сказал, что большую часть нашего тестового задания он запилил при помощи copilot, так что определённо кто-то "пилотом" пользуется. В общем, непонятно: хорошо оно или плохо? Стану ли я теперь более продуктивным? Есть только один способ проверить: в бою.

Поехали

У цветового треугольника не два, а один угол

Время на прочтение16 мин
Охват и читатели43K
Как увидеть цвет, которого в природе не бывает?

image


Четыре года назад на Хабре был пост с интересным и полезным видео «Как устроен цвет». Лектор — Дмитрий Николаев, заведующий сектором зрительных систем ИППИ РАН.

Я сделал расшифровку (в меру своего понимания материала), потому что считаю и тему важной и подачу — отличнейшей. Пока набирал текст, чуть не поменял своё φ(λ). Слово спикеру:


Поговорим о математике и геометрии цвета, о том, какие абстрактные структуры заложены в этом слове.

Что такое «цвет» не знает никто.

Цвет — это что-то, о чем говорит человек, наблюдающий и познающий мир с помощью глаза.

Глаз регистрирует какие-то свойства электромагнитного излучения, называемого светом, попадающего в глаз, преломляющегося на хрусталике, проецируемого на сетчатку. «Колбочки» регистрируют какие-то мощностные свойства. И дальше внезапно человек говорит о каком-то «цвете».

В физике нет цвета, а есть спектральные свойства излучения.

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

Совершенно точно, «цвет» — психологический феномен. Цвет — это ощущение, к объективной физике не имеющий отношения.

Мы можем говорить о цвете вещей — красная рубашка — «краснота» рубашки напрямую никак не связана с тем, какое излучение придет от этой рубашки в глаз.

Интро Newton Protocol: что можно уместить в 4 килобайта

Время на прочтение8 мин
Охват и читатели21K
image

Недавно я участвовал соревнованиях демосцены Revision 2019 в категории «PC 4k intro», и моё интро выиграло первое место. Я занимался кодингом и графикой, а dixan сочинял музыку. Основное правило соревнования — необходимо создать исполняемый файл или веб-сайт, имеющий размер всего 4096 байта. Это означает, что всё приходится генерировать с помощью математики и алгоритмов; никаким другим способом не получится ужать изображения, видео и аудио в такой крошечный объём памяти. В этой статье я расскажу о конвейере рендеринга своего интро Newton Protocol. Ниже можно посмотреть готовый результат, или нажать сюда, чтобы посмотреть как оно выглядело вживую на Revision, или зайти на pouet, чтобы прокомментировать и скачать участвовавшее в конкурсе интро. О работах конкурентов и об исправлениях можно прочитать здесь.

Планирование спидрана Morrowind с помощью имитации отжига

Время на прочтение19 мин
Охват и читатели37K
image

Ну ты и соня, тебя даже вчерашний шторм не разбудил. Говорят, мы уже приплыли в Морровинд. Нас выпустят и позволят нам сделать спидран, это точно!

Введение


Существует знаменитый спидран основного квеста Morrowind, в котором, по сути, игрок перемещается к месту конца игры, использует несколько свитков и заклинаний, а затем убивает босса.

Однако не существует категории спидранов Morrowind, в которой игрок стремится стать главой всех фракций. Несмотря на любовь критиков и отличный сюжет, большинство квестов Morrowind заключаются в заданиях «принеси вещь» или «убей этого типа», а квестов, в которых требуется что-то ещё, не так много. Но планирование такого маршрута спидрана всё равно может быть чрезвычайно интересным по следующим причинам:
Читать дальше →

VNC через GIF

Время на прочтение1 мин
Охват и читатели29K
Полгода назад на Хабре излагалась идея GIF-сокетов — коммуникаций в реальном времени, используя анимированный GIF в качестве транспорта.

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

Сегодня на гитхабе опубликована программка vnc-over-gif, которая элегантно использует этот принцип. Программа снимает скриншоты экрана и транслирует их через анимированный gif.
Читать дальше →

Программирование на калькуляторе

Время на прочтение5 мин
Охват и читатели94K
Здравствуйте, хабражители. Думаю, многие из вас слышали о программируемых калькуляторах (а некоторые даже использовали их). Как ни странно, здесь я не нашел ни одной статьи, рассказывающей о такой интересной вещи, и поэтому решил восполнить этот пробел и рассказать об основах программирования на калькуляторах.

Некоторое время назад я нашел у себя в кладовке старый «Электроника МК-61», принадлежавший моему папе. Естественно, я не мог упустить такой шанс освоить не совсем «стандартное» программирование на калькуляторе. (В случае, если у вас нет программируемого калькулятора, вы можете скачать эмулятор здесь)
Читать дальше →

Ближайшие события

Маленькие программки на С — победители конкурса IOCCC

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


Международный конкурс запутанного кода на С (IOCCC) — известное соревнование по программированию, которое проводилось до 2020 года.

В отличие от традиционных чемпионатов по спортивному программированию, здесь не нужно решать задачи на скорость. У участников сколько угодно времени, но размер программы ограничен 1536 байтами (не считая пробелы, табы и прочие служебные символы), в сумме обычно получается не более 2 кб.

Но программки делают реально сложные вещи: например, победитель 2004 года — это операционная система, исходный код 166 строк.

Посмотрим на шедевры разных лет и откуда вообще взялся этот конкурс.
Читать дальше →

tuple в CPython – мутабельный! И другие шокирующие детали из C-шной реализации

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели5.1K

Привет! Меня зовут Никита Соболев, я core-разработчик языка программирования CPython, а так же автор серии видео про его устройство.

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

Под катом будет про: мутабельность кортежей (и планы по отмене такого поведения), дичь с ctypes, переиспользование памяти и другие оптимизации.

Ну и конечно – мое полное видео на полтора часа, где будет множество дополнительной информации о деталях работы VM.

Если вам такое интересно или целиком незнакомо – добро пожаловать!

Читать далее

Пишем самую тупую на свете сортировку

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

И это не пузырьковая, а нечто гораздо более тупое.

Как-то после обеда, стоя за чашечкой кофе, мне пришла в голову мысль. Что ведь для того чтобы убедиться что массив отсортирован, надо сделать `n-1` сравнение. Например для массива длины 4 таких сравнения будет 3:

Дальше тупее

Рисуем генеративные грибы на javascript

Время на прочтение8 мин
Охват и читатели18K

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

Читать далее

Грязные трюки разработчиков видеоигр

Время на прочтение12 мин
Охват и читатели78K

Предыдущие части: раз, два, три.

Благодарим за игру!


В первой части Wing Commander при выходе из игры мы получали от нашего менеджера памяти EMM386 исключение. Экран очищался и на него выводилась единственная строка, что-то типа «Ошибка менеджера памяти EMM386. Бла-бла-бла».

Нам нужно было выпустить игру как можно быстрее, поэтому я отредактировал ошибку менеджера памяти в hex-редакторе, чтобы она выглядела как «Благодарим за то, что играли в Wing Commander».

— Кен Демарест

Читать дальше →

Проект «Морровинд»

Время на прочтение24 мин
Охват и читатели51K
image

Вам нужно сыграть в Morrowind.

(Предупреждение: ниже идут несколько абзацев похвал Морровинду, так что вы можете спокойно пропустить их и переходить к самой сути поста.)

В начале Morrowind вы обычный обалдуй, только что сошедший с тюремного корабля с 87 золотыми в кармане (в этом мире одна буханка хлеба стоит 1 золотой, то есть это примерно 35 фунтов — именно столько вам придётся заплатить за 87 упаковок нарезанного белого хлеба в Tesco). Вашим первым заданием будет получение посылки от человека в другом городе, и вы можете или проехаться на силт страйдере (огромном насекомом с длинными ногами, которым, вероятно, управляет вечно пьяный жуткий водитель — почти как в лондонских автобусах) или прогуляться туда пешком по дикой местности, сражаясь с ордами хищных птиц-переростков железным кинжалом, который вы стянули из бюро переписей. Только ваш кинжал всегда промахивается, потому что, видите ли, создатели боевой системы Morrowind вдохновлялись настольными ролевыми играми, а аниматорам платили не так много, поэтому даже если ваше оружие очевидно вонзается в мясистое тело того, в кого вы, игрок, целитесь, нет никаких гарантий, что вы на самом деле попали.

Посему, сломав пару мышей из-за тысяч яростных кликов, вы решаете бросить Morrowind и тратить свою жизнь на что-то более интересное.

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

Как мы читаем код

Время на прочтение2 мин
Охват и читатели48K
В рамках исследований движений глаза Майк Хансен и Эрик Холк провели любопытный эксперимент. Используя айтрекер Tobii TX300 частотой 300 Гц, они сравнили поведение глаз опытного и начинающей программистов при чтении кода программы Python, вывод которой являлся вопросом поставленной задачи.

В результате съемки данных для «новичка» было получено следующее видео.

Читать дальше →

Вклад авторов