Обновить
136.42

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

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

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

BASHUI

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

BASHUI - это BASH + UI, а не то что вы подумали.

Начиная работать над sshto я решил не переизобретать велосипед, вернее не переизобретать велосипед целиком а только некоторые его части и в качестве "рамы с педалями" использовал dialog. Это значительно ускорило разработку, но идея написать свой UI на баше с блекджеком и всем остальным ни на секунду не покидала мой воспалённый мозг. Звёзды сошлись, и я решил воплотить этот проект в жизнь(в bash). Втречайте BASHUI!

нажми на кнопку

Ускоряем программу для 50-летнего процессора на 180000%

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

В прошлом году я написал программу, вычисляющую 255 цифр числа π на самом первом микропроцессоре от Intel - 4004. В той статье я упоминал рекорд ENIAC'a - 2035 цифр [^1], но побить его не смог. Настало время закрыть гештальт. В этот раз возьмём одного из преемников от Intel - 4040.

Читать далее

Как я писал свою первую игру для Dendy

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

Что такое Dendy? Что так любит детвора? Это электронная игра! Ооо, дендиии...

В этой статье я вам расскажу о своем первом опыте разработки игры для NES/Famicom консоли. Постараюсь рассказать о инструментах, которые использовал и о интересных особенностях разработки игр для Dendy с которыми столкнулся во время создания игры.

Погрузиться в мир Dendy

Сбер. Как некрасиво поступить на конкурсе красоты

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

Хабр - не жалобная книга, я знаю. Но тут история про код, с примерами, разбором антипаттернов и всё такое, поэтому я рискну.

Всё началось, когда я узнал про конкурс красоты кода от Сбера. Я как раз хотел поучаствовать в каком-нибудь эпичным конкурсе, а тут как раз он мне и подвернулся, тем более что я - тот человек, которому есть что рассказать про красивый код. Я даже целую статью запилил о том, как писать красивый и понятный код. Так что что я решил, что в данном случае мои шансы на победу - в отличие от остальных конкурсов - всё же больше 0%. Кроме того, я хотел выступить на конференции PiterPy (спойлер: хрен мне), чтобы рассказать там про красивый код и всё такое, поэтому участие в конкурсе и сравнение результатов было бы классным подспорьем.

Что же пошло не так?

Сам написал, сам погонял: как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля?

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

Статьи про инди-разработку игр — это всегда интересно и занимательно. Но статьи про разработку игр с нуля, без каких-либо игровых движков — ещё интереснее! У меня есть небольшой фетиш, заключающийся в разработке минимально играбельных 3D-демок, которые нормально работали бы даже на железе 20-летней давности. Полтора года назад, в мае 2022 года, я написал демку гоночной игры с очень знакомым всем нам сеттингом — жигули, девятки, десятки, и всё это даже с тюнингом! В этой статье я расскажу вам о разработке 3D-игр практически с нуля: рендерер, менеджер ресурсов, загрузка уровней и граф сцены, 3D-звук, ввод и интеграция физического движка. Интересна подробнейшая хаброторная статья о разработке игры с нуля? Тогда добро пожаловать!
Читать дальше →

Федя, дичь

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

В мире программирования существует огромное количество багов, и если бы каждый баг стал бабочкой, то программеру в раю уже давно оставлена пара полян для развития навыков энтомолога. Несмотря на все совершенства этого мира: компиляторы, pvs‑studio и другие статические анализаторы, юниттесты и отделы QA, мы всегда находим способы преодолеть преграды кода и выпустить на волю парочку новых красивых и удобных видов. Есть у меня txt файлик, которому очень много лет, и куда я складываю интересные экземпляры. Все примеры и действия описанные в статье вымышленные, ни один стажер, джун или студент уволены не были. Hello, World! Where are your bugs?

Hello, World! Where are your bugs?

HAL в 4000 байт

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

«HAL 4000» – исполняемая программа для Windows размером ровно 4000 байт. Лучшая работа в номинации 4 kb intro фестиваля Chaos Constructions 2017, второе место в чартах портала pouet.net. «HAL 4000» попала в плейлист Best of Demoscene 2017 наряду с работами Farbrausch, Fairlight, Conspiracy, Alcatraz, Byterapers, обсуждалась на вебинаре анимационной студии, демонстрировалась на различных фестивалях.

Необычная история создания этой работы изложена ниже.

Читать далее

Подробный разбор 64b intro: radar

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

Да здравствует мыло душистое демосцена! И вам привет, дорогой читатель ;)

С демосценой я познакомился примерно 25 лет назад (или чуть больше). Но тогда это выражалось лишь в просмотре 128–256-байтовых интр (и демок, конечно же) с изумлением а‑ля: «А что так можно было?» Думаю, у многих знакомство с этой киберкультурой начинается похожим образом :). Если вам эти слова мало о чём говорят, почитайте о демосцене скудную статью на Вики, ну и/или послушайте подкаст, а также посмотрите что люди умудряются сделать, укладываясь всего лишь, например, в 256 байт кода (справа у большинства работ есть ссылка на видео YouTube).

Полноценные интры на любимом ассемблере x86 я начал писать только 5 лет назад, в 2018 году. Именно тогда я отправил на знаменитый фестиваль Chaos Constructions (который, кстати, организаторы обещают возродить в 2024) два прода (от слова «production»): 256b intro StarLine (заняла 1-е место) и 64b intro radar (заняла 6-е место в том же compo). После этого демосцена меня засосала стала частью моей жизни, в которую время от времени я с энтузиазмом погружаюсь.

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

Заглянуть за кулисы...

Не дадим Windows Phone умереть! Как я написал свои клиенты VK, YouTube для Nokia Lumia? Сам себе экосистема ч.2

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

Windows Phone… услышав название этой мобильной системы, поневоле начинаешь с теплотой вспоминать своего недавнего, такого необычного мобильного друга, как будто прошло всего пару месяцев с момента смены смартфона на iPhone/Android. А ведь с момента фактической смерти Windows Phone прошло уже почти 10 лет! Увы, время вспять уже не повернуть, а мобильное подразделение Nokia не спасти, однако при наличии навыков разработки мобильных приложений, большом энтузиазме и фанатизме, есть шанс вернуть жизнь своему старому другу! Недавно я снова загорелся диким энтузиазмом и смог вернуть жизнь старенькой «люмии», написав собственные клиенты нужных мне сервисов с нуля — и готов поделиться этим с вами во всех подробностях!

Сегодня вы узнаете о моей мотивации привносить жизнь старым смартфонам, о тонкостях разработки мобильных приложений, чем Windiows Phone был на голову выше Android в техническом плане и о том, почему провал Windows Phone — одна из самых больших потерь мобильного рынка. Интересно? Тогда добро пожаловать в статью!
Читать дальше →

DreamBerd — идеальный язык программирования

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

DreamBerd - идеальный язык программирования. Вот его фичи!

Когда вы закончите знакомиться со всеми фичами, ознакомьтесь с примерами.

Восклицательные знаки!

Будьте смелее! Заканчивайте каждое утверждение восклицательным знаком!

print("Hello world")!

Если вы чувствуете себя особенно смелым, вы можете использовать еще больше!!!

print("Hello world")!!!

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

print("Hello world")?

Возможно, вам интересно, что Dreambird использует для оператора "не", который в большинстве других языков является восклицательным знаком. Это просто - вместо оператора 'не' используется точка с запятой.

if (;false) {

   print("Hello world")!

}

Читать далее

Архитектура и программирование Sony Playstation 1

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

По сравнению с другими, ранее описанными мной архитектурами, архитектура Sony Playstation 1 (PSX) - сравнительно современная. И дело даже не в годе выпуска (1994) - скорее это общее ощущение сочетания новых возможностей и исчезновения привычных старых, которые были типичными для компьютеров и приставок предыдущей эпохи.

PSX (это сокращение пошло от первоначального названия проекта - Playstation X) имеет в качестве центрального процессора MIPS R3000, работающий на частоте 33МГц. Причём, Sony отказалось от сопроцессора для вычислений с плавающей точкой и вместо него сопроцессором в PSX является так называемый GTE (Geometry Transformation Engine), выполняющий различные операции с фиксированной точкой над векторами и матрицами.

Читать далее

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

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

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

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

Дальше тупее

Я люблю питон, и вот почему он меня бесит

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

Вас приветствует ваш зануда!

Если вы следите за моей ленивой активностью, то заметили бы, что у меня много от чего пригорает. Вот, например:
- У меня пригорает от низкосортных статей на потоке: Питон против Безумного Макса, или как я посты на Хабре замораживал
- У меня пригорает от Django: Окей, Джанго, у меня к тебе несколько вопросов
- И от Яндекса тоже: Собеседование в Яндекс: театр абсурда :/
- И от рекрутеров: Я единственный из 1400, или самый крутой рекрутинг, что я проходил

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

Это что же получается, kesn опять открыл postman и сломал вёрстку на сайте? Поразительно, никогда такого не было, и вот опять! В принципе, тут можно писать текст любой длины (похоже, у них на бэкенде не Char(255), а Text). Они проверяют длину только на фронтенде, а бэкенд принимает строку любой длины. И это, блин, забавно) Вообще мой девиз - 'кто ищет, тот всегда найдёт', поэтому я ищу постоянно. Кстати, на Хабре скоро выйдет статья про программирование глазами Погромиста, там в том числе про уязвимости на сайтах будет - поэтому если не хотите пропустить, то подписывайтесь на меня в телеге: @blog_pogromista

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

Внутреннее представление и оптимизации строк в JavaScript-движке V8: «отмываем» строки, «обгоняем» C++

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

С самого рождения JavaScript в каком-то смысле был языком для манипулирования текстом — от веб-страничек в самом начале до полноценных компиляторов сейчас. Неудивительно, что в современных JS-движках достаточно много сил уделено оптимизации внутреннего представления строк и операций над ними.

В этой статье я хочу рассмотреть, как могут быть представлены строки в движке V8. Попытаюсь продемонстрировать их эффект, обогнав C++ в очень честном бенчмарке. А также покажу, в каких случаях они могут, наоборот, привести к проблемам с производительностью, и что в таких случаях можно сделать.
Читать дальше →

Релейный компьютер, телетайп и интересный алгоритм игры в крестики-нолики

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

Крестики-нолики – классическая игра, которую наверное пытался написать каждый. При этом программы иногда получаются довольно запутанные, несмотря на простоту правил. Электромагнитные реле – классическая элементная база для компьютеров и калькуляторов. Они тёплые, ламповые и прикольно щёлкают. Если добавить к этому телетайп, то получится игровая консоль в стиле 1940х.

Читать далее

NFC-крокодил: продвинутая разработка под Flipper Zero

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

Мое желание делать игры с использованием различных неподходящих для этого технологий только прогрессирует. Мне показалась забавной идея реализовать игру «крокодил», где нужно объяснять слова через пантомиму, с использованием технологии NFC. При считывании метки выбирает случайное слово из памяти и отдает его телефону. Игрок видит слово на своем телефоне и начинает его показывать. К сожалению, существующие и легкодоступные NFC-метки не умеют существенно изменять содержимое без команды перезаписи.

Недавно коллеги из Selectel одолжили мне Flipper Zero, который может прикидываться NFC-меткой с любым содержимым. В интернете множество материалов о Flipper Zero. Обзор, еще один обзор, инструкция, как настроить IDE для разработки приложений, обзор внутренностей, быстрый старт и первое приложение…

В этой статье я расскажу про подход к организации GUI-приложений на Flipper Zero, про работу с NFC и NDEF, а также о том, как не бояться отсутствия документации в активно развивающемся проекте.
Читать дальше →

Ping пакеты как временное хранилище данных на python raw socket

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

Payload (данные) в ping пакете действительно есть, однако до реальной пользы им далеко - это английский алфавит (нет, я не испытываю ненависть к латинице, просто мне хотелось бы уметь редактировать это содержимое).

Читать далее

Зачем в Switch SDK три разных sin?

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

Работая в компании Gaijin несколько лет назад, мне довелось поучаствовать в портировании пары игр компании на консоль Nintendo Switch, тогда вовсю завоевывающую новые рынки. Для меня это стало первым крупным проектом на этой платформе. А с учетом, что ни команда, ни разработчик движка с платформой, системой сборки и вообще экосистемой Нинтендо знакомы не были, то все грабли приходилось искать и бережно на них наступать. Чтобы опробовать возможности новой платформы, параллельно с портированием игры, был написан внутренний middleware (связка dagor engine + nxsdk + jam) и код обрастал всевозможными тестами, build matrix, бенчмарками, прогоном стабильности и другими внутренними проверками. Надо отметить что на момент 2018 года, в самом switch sdk не было реализовано часть posix функций вроде poll и send/receive, и большая часть функций для работы с файлами, posix прослойку нужно было писать самим. Дошли тогда руки и до написания различных бенчмарков для функций стандартной библиотеки, и были замечены некоторые аномалии в поведении части тригонометрических функций в различных режимах сборки. Для справки, sdk использует урезанный вариант musl libc (https://www.musl-libc.org/), все статически линкуется в один большой бинарник clang'ом от Нинтендо 9 версии (2018 год), который потом запускается на консоли. Доступа к исходникам самой libc в исполнении Нинтендо у нас не было, но всегда можно посмотреть дизасм и боле менее представить что происходит.

Раскопки на месте

Ломаем хаскелем Brainfuck

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

Немного о bfc


Brainfuck — очень глупый язык. Там есть лента из 30к ячеек, по байту каждая. Команды bfc это:


  • Передвижение по ленте влево и вправо (символы < и >)
  • Увеличение и уменьшение значения в ячейке (символы + и -)
  • Ввод и вывод текущей ячейки (символы . и ,)
  • И цикл while, который продолжается пока значение в текущей ячейке не ноль. [ и ] это начало и конец цикла соответственно

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

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

Физическая программная археология

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

Спонтанный эксперимент по воплощению в жизнь заклинания из древнего манускрипта. Реализация кода на АЛГОЛ-60, напечатанного в статье 1976 года, и перезапуск его на FORTRAN-90.

Читать далее

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