Обновить
181.71

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

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

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

Bad Apple на телефоне Siemens CX75

Время на прочтение5 мин
Охват и читатели23K
Увидел я, значит, пост про Bad Apple на MSX и подумал — а чем я хуже? Телефоны Siemens одно время были достаточно популярны на территории бывшего СССР, особенно среди моего поколения. А их прошивки были достаточно хакабельными. Патчи были всякие разные: от замены графики до добавления новой функциональности. И самый апогей патчестроения: т.н. эльфпак или эльфлоадер, он же загрузчик нативных приложений в формате ELF, превращающий обычный кнопочный телефон в, по сути, смартфон.

В этом посте я расскажу о том, как я в 2022 году смог написать и скомпилировать эльф на macOS на М1, и покажу, что из этого получилось.

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

«Сапёр» на движке Doom

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

В этой заметке я расскажу как создать игру «Сапёр» на движке первых частей Doom (id Tech 1), а точнее — на модифицированной для порта GZDoom версии движка.

Читать далее

Новогодний детектив: странный хайзенбаг в «питоньих» часах

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


Давненько я не писал на Хабр, да и тема интересная появилась, так что пора поправить это постыдное упущение.


Далее собственно детектив как оно есть, "расследование" которого ещё не окончено, можно присоединиться кстати… Пост будет обновляться, по окончанию (я надеюсь что баг таки найдётся) пост изменит название получив префикс "[SOLVED]"...
Продолжение и надеюсь окончание истории см. в этом посте.


Постучался тут человечек на GH, с ошибкой типа "Fail2ban ведет себя как-будто он временами в будущем". Первой мыслью было — что опять! ну снова кто-то во временных зонах потерялся.
Но нет, всё оказалось несколько хуже — иногда, редко, Fail2ban пишет в логи дату из 2023-го года.
И не только пишет, а по всей видимости действительно начинает считать что он где-то в 2023-м, со всеми вытекающими — снятием бана для блокированных адресов по истечению срока действия и т.д. и т.п.
Причем делает это для всех потоков, а чуть позже возвращается в 2021-й, чтобы позднее снова на короткое время прыгнуть в 2023-й и так снова и снова.

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

Волшебный чемодан

Время на прочтение12 мин
Охват и читатели48K
История о закрытии гештальта.


В старшие школьные годы, в библиотеке мне попалась книга «Простейшая микро-ЭВМ», где для школьников подробно объяснялось, как спаять свою вычислительную машину на микропроцессоре КР580ИК80А. Помню, что книгу зачитал просто до дыр, и в целом она определила мою судьбу в области электроники и программирования. Но тогда я понимал, что у меня не хватит пороха и возможностей сделать эту вычислительную машину, так как не было ни средств, ни опыта, ни подходящего наставника. Книгу я вернул обратно в библиотеку, отксерив некоторые листы.

В конце этого года spiritus_sancti обмолвился, что у него есть лишний УМК — Учебный Микропроцессорный Комплект. И тут я понял, вот она — мечта моего детства, она есть в железе и она реальна! И тут же начал просить мне его прислать. И с этого момента начинаются увлекательные предновогодние приключения.
Читать дальше →

Заговор против IE6

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

У невероятного роста Youtube есть одно последствие, радостное и грустное одновременно - множество историй потеряются под слоями новой краски. Именно поэтому я хочу рассказать одну из них - историю того, как 10 лет назад маленькая команда веб-разработчиков задумала убить IE6 с помощью Youtube и даже не получила за это по шапке.

Я не могу вспомнить то конкретное событие, из-за которого наша команда разработки начала строить планы убийства браузера за обедом в столовой Youtube. Возможно, в тот раз я случайно отправил в релиз CSS-стиль, где был указан селектор атрибута на нестандартном HTML-элементе. Любой здравомыслящий веб-разработчик предположил бы, что если браузер не может распознать элемент - он молча пропустит данное описание. Но со старыми версиями IE дело обстояло не так. В определенных условиях это приводило либо к внутренней рекурсии и падению браузера (если повезет), или даже к синему экрану смерти (если не повезет).

А может быть, в сотый раз кто-то из наших разработчиков использовал тег <img> без указания атрибута src. От новичков никто не требовал быть в курсе, что в старых версиях IE вместо пустого аттрибута src подставляется корневой путь ("/"). Это внезапно превращает тег <img> в <iframe>, загружая главную страницу и все связанные с ней ресурсы, что может привести к бесконечной рекурсии. Когда пустой тег <img> случайно просачивался на главную страницу - вся команда в экстренном режиме искала его, пока сервера не расплавились под нагрузкой.

В общем, не вдаваясь в подробности - это была настоящая жесть, и она была связана с IE6. Этот браузер сильно отравлял жизнь всей нашей команде разработки. По меньшей мере 1-2 недели из каждого мажорного релиза отводились на то, чтобы заставить новый UI работать под IE6. Несмотря на всю эту боль, нас заставляли поддерживать его ради пользователей, которые не могут обновиться или работают в компаниях, где обновление запрещено политиками безопасности. Пользователи IE6 на тот момент составляли примерно 18% от общего числа. Все понимали, что просто так прекратить его поддержку нельзя, но когда мы сидели в той столовой после нескольких бессонных ночей, на сопереживание тем несчастным пользователям просто не оставалось сил. Мы начали коллективно фантазировать о том, как отомстить IE6. Одна идея сразу привлекла всеобщее внимание: а что, если мы просто пригрозим прекратить поддержку? Как отреагируют пользователи? Они поднимут бунт против Youtube, начнут присылать нам письма с угрозами расправы (как это уже случалось раньше)? Или вдруг станут апологетами новых браузеров? Мы мечтали о том, как офисные работники по всему миру внезапно начнут придумывать причины, по которым обновление браузеров жизненно необходимо для бизнеса, а бабушки и дедушки возьмут своих технически прошаренных внуков в заложники, чтобы те "починили им ютубы". То, что началось как сеанс групповой психотерапии, стало превращаться в конкретный план действий, для реализации которого у нас были уникальные условия.

Читать далее

Компьютер на логических микросхемах: исполнение инструкций

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

Вторая статья про самодельный компьютер. Сегодня я расскажу вам про кодирование и исполнение инструкций, а также немного про программирование.

Читать далее

Как хранить данные в png, не привлекая внимания санитаров

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

Всё началось с мема, который вы видите выше.

Сначала я посмеялся. А потом задумался: может ли быть так, что скриншот базы равноценен её снэпшоту?

Для этого у нас должно быть такое графическое представление базы, которое 1 к 1 отображает данные и структуру. Если сделать скриншот такого представления, из него можно восстановить базу.

Или... графическое представление и должно быть базой!

Это как?

Intel 4004 — процессор, изменивший мир

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

50 лет назад, 15 ноября 1971 года компания Intel представила процессор 4004. Трудно переоценить значимость этого события, именно с этой даты началась эра архитектуры x86, которую мы знаем и сегодня.

Поздравляю компанию Intel с этой знаменательной датой!

Далее будет немного истории, много теории, ещё больше практики и оригинальных фот.

Вперёд и с песней..

Живое видео и цифровой звук на 8-битной игровой приставке

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

В 2016 году американский музыкант Sergio Elisondo опубликовал музыкальный альбом инструментальных кавер-версий A Winner Is You (отсылка к древнему мему, происходящему из классической игры Pro Wrestling), в котором он в одиночку исполнял музыку из популярных игр для восьмибитной приставки NES на настоящих музыкальных инструментах. Необычным дополнением к этому релизу стала его версия в виде картриджа для игровой приставки NES, запускаемая на ней и воспроизводящая музыку из альбома в виде полноценного аудио, а не типичного для этой приставки довольно примитивного синтезированного звука. Я занимался разработкой программной части этого не вполне обычного проекта.

Дальше больше

Шарим (в) консоль

Время на прочтение5 мин
Охват и читатели20K
Мы уже все привыкли, что конференции проводятся виртуально. Мы все работаем через зумы, скайпы, миты и тимзы. Удобно, конечно, но у нас есть одна занудная проблема. Когда нам, программистам надо расшарить экран, мы тяжело вздыхаем и нажимаем кнопку Share Screen. Всё это не без проблем.


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

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

Минимизация файла ELF – попробуем в 2021?

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

Экспериментальный проект по максимальному уменьшению ELF-файла с программой Hello, World! под целевую систему Linux x64 с помощью NASM. В предыдущем опыте начала 2000-х удалось добиться размера рабочего файла в 45 байтов, но с тех пор ядро сильно изменилось. Каков же будет минимальный жизнеспособный ELF в 2021?
Читать дальше →

Разгадываем ребус вторичных часов «Воронеж»

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

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

Трясём стариной — или как вспомнить Ассемблер, если ты его учил 20 лет назад

Время на прочтение11 мин
Охват и читатели25K
Это — тёплая, ламповая статья об Ассемблере и разработке ПО. Здесь мы не будем пытаться писать убийцу Майкрософта или Андроида. Мы будем писать убийцу 2048. Здесь не будет докера и терраформа с кубером. Зато здесь вы сможете найти большое количество материалов по Ассемблеру, которые помогут вам вновь погрузиться в мир трёхбуквенных инструкций. Доставайте пивко, и поехали. (Саундтреком к этой статье можно считать IBM 1401 a system manual)

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

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

Как написать FizzBuzz на собеседовании

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

Здравствуй, Хабр.


Недавно я проходил собеседование в одну солидную айтишную контору. Когда мы разобрались с формальностями, начался технический этап, на котором мне поручили написать fizzbuzz. По не вполне понятным мне причинам обсуждение решения этой задачи растянулось на довольно большой срок, после которого время на интервью уже вышло. Мы расстались на хорошей ноте, и мне пообещали перезвонить. Пока я жду оффер, я решил поделиться своим опытом прохождения интервью с широкой публикой, равно как и своим решением, ибо они показались мне заслуживающим внимания.

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

Я нашел 18K+ игр в NVIDIA GeForce NOW

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

Я, как и многие пользователи NVIDIA GeForce NOW, жду пока там добавят те игры, в которые действительно хотелось бы поиграть. Но бывало и наоборот, игры которые уже были добавлены, позже внезапно удаляли из GFN сервиса. В моем случае я хотел там пройти игры Mafia, и потом их все убрали.

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

Читать далее

«Оптимизируем» функции на уровне AST

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

Python предоставляет программисту огромное пространство свободы. Увы, обычно это довольно дорогая в плане производительности свобода, зато при правильном применении иногда она позволяет творить сущую магию. Но сегодня мы поговорим не о таких вот «богоугодных» применениях свободы, а о том, что никогда не стоит использовать в прикладном программировании — о модификациях кода на уровне AST.

Запутаться

Создание контроллера вторичных часов “Воронеж”

Время на прочтение12 мин
Охват и читатели14K
Отладочный стенд.

Многие из вас на предприятиях и иных объектах бывшего СССР встречали зелёные сегментные часы. Были самостоятельные устройства, типа “Электроника-7”, но так же существовали и вторичные, как в предыдущем посте, только более сложного строения — часы семейства “Воронеж”. Они также включались в единую часовую сеть предприятия и показывали то время, которое передавалось от главных первичных часов по проводам.

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

Тем не менее, я смог их победить, и могу теперь рассказать, как же они работают и поделиться кодом своего проекта.
Читать дальше →

JPEG, который можно посмотреть в блокноте

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

Если открыть произвольный JPEG-файл в блокноте, то можно увидеть лишь хаотичный набор символов. Отсюда вопрос: возможно ли закодировать изображение так, чтобы его было можно просмотреть не только обычным способом, но и в обычном блокноте, в виде ASCII-графики.

Читать далее

Разработка 64-битного графического UEFI-приложения в Visual Studio

Время на прочтение9 мин
Охват и читатели20K
Зимой в блоге RUVDS было несколько статей о написании загрузчиков для «классического» BIOS, в т.ч. симпатичная графическая демка, целиком помещающаяся в загрузочном секторе и работающая в VGA-режиме 320×200. Комментаторы справедливо отмечали, что в наступившем 2021 г. нет смысла осваивать это лютое легаси;
а вот статей про “Hello, World” на UEFI да с графикой действительно не хватает. Больше того — я таких вообще не припомню.» (MinimumLaw)
Под катом мы пошагово перепишем ту бутсекторную демку под UEFI, и она будет работать в полноцветном видеорежиме с высоким разрешением. С другой стороны, вместо 512 байт она будет занимать несколько десятков КБ.

Юмористичный обзор Rust с перспективы JavaScript

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

В этой статье я в несколько забавном ключе документирую кое-какие размышления о своем знакомстве с Rust с позиции прожженного энтузиаста JavaScript. Здесь вас ждет импровизированная прогулка по феодам Вестероса, встреча с Ланнистерами и даже замаскированный под остров корабль — занятные аналогии, которые можно провести с работой в этом языке.
Читать дальше →

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