Обновить
189.25

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

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

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

Приключения с Xbox 360: долгий путь к RGH3

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

Несколько лет назад я подумал, что эра Xbox 360 прошла, исследования забиыты, и потихоньку начал избавляться от наследия студенческих времён - приставки продал, запчасти раздал, на форумы залезать перестал. Но у вселенной были совершенно другие планы, стоившие мне нескольких месяцев бессонных ночей…

Читать далее

Эстафета из 50-ти квайнов

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

Квайн — компьютерная программа, которая выдаёт на выходе точную копию своего исходного текста. Японский рубист Юсукэ Эндо (Yusuke Endoh) создал нечто невероятное. Quine Relay — программа на Ruby, которая генерирует код программы на Scala, которая генерирует код программы на Scheme, которая генерирует… и так далее на 50-ти языках программирования, пока программа на REXX снова не генерирует изначальный код на Ruby.

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

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

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

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

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

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

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

Я выставил счёт $18 000 за статичную веб-страничку… и мне это сошло с рук

Время на прочтение5 мин
Охват и читатели117K
Не так давно я работал контрактником, перескакивая с одного проекта на другой. С некоторыми краткосрочными проектами справлялся за неделю. Другие длились пару месяцев. Они приносили достаточно денег, чтобы взять отпуск. Но я предпочитал короткие, потому что там можно было установить бóльшую часовую ставку. Я не только сам себе хозяин, но и не приходилось слишком много работать, чтобы зарабатывать на жизнь. Даже мои самые высокие ставки были вполне разумными, и я всегда обеспечивал высокое качество обслуживания. Так было до тех пор, пока мне не предложили контракт в большой компании.

Эта компания связалась со мной в срочном порядке, и менеджер сказал, что им нужен человек прямо сейчас. Сотрудник, который обеспечит максимальную производительность после минимального тренинга. Хорошо это или плохо, но таков был мой девиз. Проект мне очень нравился. Он был маленьким, быстрым и хорошо оплачивался.
Читать дальше →

3D-движок, написанный на формулах MS Excel

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

Скриншот экрана игры

Эта статья посвящена тому, как я смог написать 3D-движок только на формулах Excel. Я реализовал следующий функционал:

  • бесконечная процедурно генерируемая карта лабиринта
  • рендеринг трассировкой лучей в реальном времени
  • вычисление окклюзии
  • рендеринг простейшего освещения
  • шейдер освещения и вычислений
  • движок естественного движения
  • в 3D-движке не используются макросы

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

Можете скачать файл и протестировать его самостоятельно!

Каково оно учить JavaScript в 2016

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


— Эй, я получил новый веб-проект, но, если честно, я не занимался веб-кодингом в течение нескольких лет, и я слышал, все немного поменялось. Ты же самый современный веб-разработчик, правда?

— Это теперь называется Front-End инженер, но да, я — именно он. Я работаю с вебом в 2016. Визуализации, музыкальные плееры, летающие дроны, которые играют в футбол, все что угодно. Я только что вернулся из JsConf и ReactConf, так что я знаю новейшие технологии для создания веб-приложений.

— Круто. Мне нужно создать страницу, которая отображает последние действия со стороны пользователей, так что мне просто нужно получить данные от REST и отобразить их в какой-то фильтруемой таблице, ну и обновлять её, если что-то изменится на сервере. Я думал, может быть, использовать JQuery для извлечения и отображения данных?

— О, Мой Бог! Нет! Никто больше не использует JQuery. Ты должен попробовать React: это — 2016!
Читать дальше →

Свой сапер на своих батниках

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

Однажды захотелось мне написать Minesweeper… на батниках. И я его написал.

Встречайте!!! Minesweeper for cmd.exe

Итак, особенности данного продукта:
  • Оригинальное лого
  • Двухцветный текстовой графический интерфейс (фон — чёрный, текст — серый)
  • Возможность воспроизведения программы практически на любом компьютере
В общем, это настоящий сапер (а не те жалкие подобия — KMines и сапер for Windows) для настоящих мужчин. И далее вы сможете прочитать как сделать свой крутой сапер.
Читать дальше →

Заговор против 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, начнут присылать нам письма с угрозами расправы (как это уже случалось раньше)? Или вдруг станут апологетами новых браузеров? Мы мечтали о том, как офисные работники по всему миру внезапно начнут придумывать причины, по которым обновление браузеров жизненно необходимо для бизнеса, а бабушки и дедушки возьмут своих технически прошаренных внуков в заложники, чтобы те "починили им ютубы". То, что началось как сеанс групповой психотерапии, стало превращаться в конкретный план действий, для реализации которого у нас были уникальные условия.

Читать далее

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

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

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

Читать далее

Создаем рекурсивные ярлыки в Windows

Время на прочтение5 мин
Охват и читатели125K
Все мы знаем, что такое ярлык. А что будет, если сделать ссылку ярлыка самого на себя?
Создание ярлыка на ярлык приводит к его копированию. И что будет, если принудительно создать побайтно такой ярлык?

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

Зайти в такую папку обычными файловыми менеджерами будет невозможно.

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

«Магическая константа» 0x5f3759df

Время на прочтение9 мин
Охват и читатели132K
В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

Вот полная реализация этого алгоритма:

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;  // представим биты float в виде целого числа
  i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

image

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
Читать дальше →

πfs — революционная файловая система без хранения данных­

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

Что это?


πfs это революционная файловая система, которая вместо того, чтобы тратить место на вашем жестком диске, хранит все данные в π. Вам никогда больше не придется заботится о свободном месте! Вам говорили, что 100% сжатие невозможно? Да вот же оно!

Как собрать?


πfs собирается элементарно:
./configure
make


Да и использовать его не сложнее:
πfs -o mdd=<metadata directory> <mountpoint>

Где metadata directory — каталог с метаданными (названия файлов, смещение в π), а mountpoint ­— каталог монтирования.

Что же π делает с моими данными?


π — одна из самых важных констант математики, и у нее есть куча интересных свойств (о которых можно прочесть в статье на википедии)
Одним из таких свойств числа π предположительно является нормальность, что означает, что все его числа распределяются равномерно, при условии, что это дизъюнктивная последовательность, т.е. все конечные числовые последовательности находятся внутри него. Если мы рассмотрим число π по основанию 16 (HEX), то это предположение верно. Первая запись об этом была в 2001 году.
Ну а если так, то зачем нам хранить все эти эксабайты данных на винчестерах, если мы можем найти их в π?
Читать дальше →

Новозеландский программист создал бота-потребителя

Время на прочтение2 мин
Охват и читатели5.2K
Даже не знаю, куда можно отнести такой топик, скорее все же в тот, где он находится сейчас. На днях программист из Новой Зеландии по имени Пол Ханкин анонсировал свою разработку, которую он в шутку называет «ботом-потребителем». Бот работает согласно интересному алгоритму, который позволяет программе закупать всякие мелочи в Сети (не более пары долларов). Причем покупку бот совершает с вероятностью раз в три дня. Зачем? Подробнее — в продолжении.

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

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

Трехмерный движок на формулах Excel для чайников

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


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

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

Также я сделал небольшое веб-приложение, где можно потренироваться в создании формул для произвольных фигур и сгенерировать свой файл Excel.

Осторожно: 19 картинок и 3 анимации под катом.
Читать дальше →

Создание «искусственной жизни» на компьютере

Время на прочтение10 мин
Охват и читатели114K
Всем привет. В статье хочу описать свой эксперимент по созданию «искусственной жизни» на компьютере.

Как это выглядит?

картинка кликабельна

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

Ну а дальше за работу принимается эволюция и естественный отбор.

А мне остаётся только наблюдать за развитием мира.

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

Поведением ботов управляет код, записанный в них.

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

Внутреннее устройство кода — это самое интересное в проекте.

Код должен быть простым и выдерживать различные модификации (случайное изменение любого элемента в коде) над собой без синтаксических ошибок.
Читать дальше →

GitHub превращается… превращается GitHub… в элегантный Windows 95

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


В Твиттере какое-то время назад запостили шутку в честь приобретения Майкрософтом ГитХаба — страницу сайта, перестилизованную в стиле Windows 98. Я решил, что шутка слишком хороша, чтобы оставаться шуткой.

Давайте перекрасим GitHub!

Хак поиска кратчайшего пути в StarCraft

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

Один из ведущих разработчиков Warcraft и Starcraft Патрик Вайат периодически публикует воспоминания о своей работе в компании Blizzard в 90-е годы. Очень интересно посмотреть изнутри на процесс разработки игр, которые стали впоследствии культовыми. В последней заметке Патрик поведал замечательную историю, как пришлось впопыхах исправлять баги в StarCraft перед выпуском игры и что из этого получилось.

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

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

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

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

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

Читать далее

Разработчик потратил 13 лет, чтобы закончить игру

Время на прочтение2 мин
Охват и читатели137K
13 лет назад английский подросток Адам Батчер (Adam Butcher) пришёл домой с премьеры «Властелина колец» и твёрдо решил, что должен сделать игру, в которой реализует всё то, чего не хватает во всех остальных глупых играх. Там должны быть приключения и головоломки, настоящий сюжет и борьба со злом.

Парню было 14 лет, он как раз освоил популярную программу Multimedia Fusion — и в тот же день взялся за дело, нарисовал главного персонажа Тобиаса и объект № 1 — меч.


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

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