И вновь я приветствую всех в моей традиционной рубрике. Сегодня вы узнаете, что же такого особенного произошло 31 декабря 1969 года, ровно за миллисекунду до полуночи. Точнее, вы узнаете не только лишь это, но только к этому примеру я смог подобрать картинку, а развлекательная статья без картинок — нонсенс.
Рубрика «ненормальное программирование» - 47
Пятничный JS: минус без минуса
2018-03-30 в 8:48, admin, рубрики: javascript, ненормальное программирование, нестандартное использованиеCTF — это не сложно [NQ2K18]
2018-03-27 в 21:25, admin, рубрики: android, bluetooth, ctf, Excel, hack, hacker, hackzard, itsec, lsfr, neoquest, nq2k18, rtty, Занимательные задачки, информационная безопасность, ненормальное программирование, хакерИ вновь завершился очередной отборочный online-этап ежегодного соревнования по кибербезопасности — NeoQUEST-2018.
Что было? Хм… Оказалось, что в Атлантиде тоже используют Android, но файлы передают по старинке: с помощью Bluetooth, беспокоятся о безопасности транзакций и создают распределенные сети, взламывают сайты конкурентов и используют информационную разведку, а ещё — почти все компьютеры работают на таинственном «QECOS», написанном на LUA, но с большим количеством опечаток. Как здесь выжить? Читайте под катом.
Читать полностью »
Разработка игр под NES на C. Глава 24. Приложение 2 — работа с банками памяти
2018-03-25 в 20:44, admin, рубрики: C, cc65, Nes, Nintendo Entertainment System, ненормальное программирование, разработка, разработка игрЗавершающая часть цикла. В этой главе рассмотрим работу с маппером MMC3 на примерах
<<< предыдущая
Источник
Раньше мы не использовали переключение банков памяти, но теперь настало время освоить маппер MMC3. Без маппера можно использовать 32 килобайта PRG ROM для кода и 8 килобайт CHR ROM для графики. Маппер позволяет обойти этот барьер.
Язык программирования, рассчитанный на минификацию
2018-03-22 в 6:54, admin, рубрики: front-end, javascript, python, интерпретатор, Компиляторы, минификация, ненормальное программирование, Разработка веб-сайтов
Однажды я принял участие в конкурсе демо (программ, генерирующих аудио-визуальный ряд, основной особенностью которых является экстремально маленький размер — десятки или даже единицы кибибайт).
В процессе общего обсуждения кто-то предложил нестандартную для мира демо идею: написать программу на каком-либо скриптовом языке. Дело в том, что все демо сжимаются упаковщиком для уменьшения размера (а при исполнении распаковываются). И текст сжимается намного лучше бинарного кода. Если интерпретатор будет иметь очень маленький размер, это может дать существенное преимущество.
Из-за опыта работы во фронтенде мне сразу пришла мысль дополнительно минифицировать код — удалить пробелы и необязательные элементы, сократить длину идентификаторов. Ведь сжатие сохраняет всю информацию, а многие элементы синтаксиса не являются необходимостью.
Но даже так большинство существующих языков не предназначены для данной оптимизации — очевидно, они имеют множество элементов, которые нужны для понимания человеку, а не машине. А что, если разработать язык, специально рассчитанный на минификацию?
В том конкурсе, в итоге, участвовать я не стал. Однако, данная идея не покидала меня. Ведь она может быть полезна и для более практичных целей, чем демо — в мире фронтенда объём клиентских скриптов до сих пор крайне важен, если удастся сократить его, данное решение может оказаться оправданым хотя бы в некоторых случаях.
Я решил провести эксперимент — сделать прототип языка и посмотреть, что из этого выйдет.
Массивы, указатели и другие квантовые явления вокруг нас
2018-03-22 в 6:16, admin, рубрики: C, UB, undefined behavior, Блог компании Intel, Компиляторы, матрица - продакшен версия, ненормальное программирование, ПрограммированиеНе хочу говорить, что мы все живем в матрице, но для имитации соседей подозрительно используется один и тот же звук катающегося шара.
Этот пост полностью соответсвует своему названию. Для начала в нем будет показано, что вопреки утверждению стандарта, а также классиков языка Си Кернигана и Ритчи, использование индексов массивов соверешенно не равнозначно использованию соответствующих указателей, а выбор эпиграфа будет понятен в самом конце. И да – середина поста тоже не пустая.
Читать полностью »
Приглашаем на MiniAiCup#2. В этот раз мы испортили AgarIO
2018-03-19 в 16:42, admin, рубрики: AI, algorithms, Gamedev, russian ai cup, Блог компании Mail.Ru Group, Занимательные задачки, ненормальное программирование, Программирование, разработка игр, Спортивное программирование
Шесть лет подряд мы (Mail.Ru Group) совместно с СГУ проводим Russian Ai Cup (соревнование по написанию игровых ботов). Придумываем игровой мир, пишем к нему API и сталкиваем лбами стратегии, написанные участниками. Выходит каждый раз довольно интересно, самобытно и вообще это крупнейший в СНГ ежегодный конкурс по ИИ!
Под этим же соусом мы осенью 2017-го года написали, запустили и провели первый контест на еще одной площадке, MiniAiCups, получился мини-клон Russian Ai Cup со своей странной атмосферой, правилами и механикой. Очень многим понравилось, и, после раздачи призов, мы, под шумок, обещали еще один конкурс. И наконец-то рады пригласить всех в нём поучаствовать.
Редактор TECO: EMACS, я твой отец
2018-03-19 в 5:42, admin, рубрики: emacs, teco, интерпретаторы, КодоБред, ненормальное программирование, старожилы помнят, текстовые редакторыВпервые про TECO я прочитал в пародийной статье Real Programmers Don't Use Pascal, написанной незадолго до моего рождения. Там было написано, что настоящие программисты не используют новомодные редакторы EMACS и VI:
Нет, Настоящий Программист хочет редактор вида «Просил? Так получай!» — сложный, загадочный, мощный, не прощающий ошибок, опасный. TECO, если быть точным.
ОригиналNo, the Real Programmer wants a `you asked for it, you got it' text editor — complicated, cryptic, powerful, unforgiving, dangerous. TECO, to be precise.
Это меня заинтриговало. Что за зверь такой, можно ли его пощупать? Википедия рассказала, что TECO — это Text Editor & COrrector, создан он в 1962-м году в DEC и использовался на компьютерах семейства PDP, а позже на системах OpenVMS. Оказалось, что существует порт на Си, который поддерживается энтузиастами в актуальном состоянии и собирается под современными операционными системами. Вот я и решил почувствовать себя настоящим программистом хотя бы немножко.
Разработка игр под NES на C. Главы 22-23. Приложение 1 — мапперы и цифровой звук
2018-03-18 в 21:47, admin, рубрики: C, cc65, Nes, Nintendo Entertainment System, ненормальное программирование, разработка, разработка игрЗдесь будет информация, не вошедшая в основной цикл, но слишком ценная, чтобы ее игнорировать.
<<< предыдущая следующая >>>
Из нашего обсуждения почти полностью выпала тема мапперов — сопроцессоров в картридже. Если надо сделать игру размером больше 0x8000 байт, то стандартных возможностей консоли для этого не хватит. Маппер позволяет переключать банки памяти в игре, и cc65 умеет с этим работать. Самый популярный маппер — MMC3. Кроме переключения банков памяти, он имеет счетчик строк.
Низкоуровневая оптимизация кода на платформе Эльбрус: векторное сложение uint16_t с помощью интринсиков
2018-03-14 в 4:05, admin, рубрики: ELBRUS, Алгоритмы, Блог компании Smart Engines, векторные операции, интринсики, МЦСТ, ненормальное программирование, низкоуровневая оптимизация, обработка изображений, оптимизация кода, Программирование, программирование микроконтроллеров, Эльбрус
В этой статье мы расскажем про более низкоуровневые оптимизации, которые можно делать на процессорах Эльбрус.
В принципе, оптимизации подобного уровня не являются необходимым этапом разработки под Эльбрус. Для большинства вычислительных операций, требующих высокой производительности, можно и нужно использовать функции из библиотеки EML.
Однако в текущей версии EML мы не нашли некоторых интересных нам функций, поэтому приняли решение написать их сами.Читать полностью »
Решаем задачи без самобалансирующихся деревьев в Python
2018-03-13 в 7:19, admin, рубрики: heapq, python, а для индексации поиском, Алгоритмы, двоичные деревья, куча, ненормальное программирование, никто не читает теги, но они не для чтения, Программирование, так что это нормальноМногие задачи на алгоритмы требуют знания определённых структур данных. Стек, очередь, куча, динамический массив, двоичное дерево поиска — нечасто решение алгоритмической задачи обходится без использования чего-либо из них. Однако, качественная их реализация — нетривиальная задача, и при написании кода всегда хочется по максимуму обойтись использованием стандартной библиотеки языка.
Что касается Python, то в нём есть почти всё.
- Динамический массив — встроенный тип
list
. Он же поддерживает и стековые операции:.append()
и.pop()
. - Хэш-таблица — встроенные типы
set
иdict
, а также неизменяемый брат сетаfrozenset
. - Куча —
list
со специальными операциями вставки и удаления, реализованными в модулеheapq
. - Двусторонняя очередь — это описанный в модуле
collections
типdeque
.
Но вот самобалансирующегося дерева поиска, как такового, в стандартной библиотеке нет. А жаль!
В этой статье я разберу несколько алгоритмических задачек, подразумевающих решение с помощью двоичного дерева, и покажу, чем в разных ситуациях его можно заменить в Питоне.
Читать полностью »