Рубрика «ненормальное программирование» - 77

О бане, троллях и бесплатных продуктах «Лаборатории» - 1В «Космической одиссее 2001 года» Фрэнк Боумэн отключает, один за другим, модули памяти компьютера HAL 9000, а HAL 9000 поет песню про Дейзи. Чуть раньше HAL пытался убить самого Боумэна, а заодно и всех остальных людей на борту «Дискавери-1», и у него почти получилось. Зачем он это сделал? Трактовать можно по-разному. Например, что получив две вводные: «Я знаю больше, чем экипаж, и должен хранить этот секрет» и «Они планируют меня отключить», HAL абсолютно логично посчитал, что он важнее, чем экипаж. Фрэнку тем не менее очень хотелось жить, и, зная, что имеет дело с компьютером, он не стал просить компьютер одуматься, а просто разнес чертову железку на микросхемы.

С компьютерами на самом деле очень просто: они всегда (всегда!) делают то, на что запрограммированы. С людьми сложнее: понять мотивацию и причины для высказываний и поступков подчас вовсе невозможно. Люди (пока что только они) программируют компьютеры, и собственно все компьютерные проблемы – от глюков системы до вирусов – от людей. В сегодняшнем первоапрельском посте – пять историй про людей, а также немножко про программы. И совсем чуть-чуть про троллей и баню. И самую малость – про то, как люди мешают программистам работать.
Читать полностью »

Всем доброго утра

Факториал на числах Чёрча — теперь и в смайликах - 1

Это полностью валидный код на JavaScript.
Читать полностью »

image

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

Ruby

Определение значения по умолчанию или мимика губами:

foo ||= []
foo ||= {}
foo ||= ''
foo ||= 0

Читать полностью »

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

Вы неправильно пишете животных - 1
Уязвимость рекурсивных алгоритмов навигации муравья: спираль смерти

Не знаю, кто писал большую часть птиц, но я хочу обратить внимание на особенность, позволяющую провести инъекцию произвольного яйца в гнездо. Дело в том, что птица проверяет только расположение и количество яиц, но не их хэши. В 20% случаев кукушка, эксплуатирующая этот баг, может внести яйцо с сохранением контрольной суммы, чего вполне достаточно для повышения прав в гнезде.

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

Дисклеймер: всему сказанному ниже «верить нельзя не верить»… Запятую поставьте сами.

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

Читать полностью »

Стрелочные часы на CMake - 1

Когда я устроился на новую работу, пришлось в ускоренном темпе осваивать новые для меня технологии, которые используются в данной компании. Одной из таких технологий стала система сборки cmake, с которой мне раньше не приходилось сталкиваться.

Эта система имеет свой встроенный язык для написания сборочных скриптов. Этот самый язык меня и заинтересовал. Вскоре я выяснил, что в нем есть возможность вычисления математических выражений, запись и чтение из файлов, запуск внешних процессов и другие интересные возможности, что навело меня на мысль воспользоваться этим языком в качестве основного ЯП и написать на нем что-нибудь осязаемое. Речь пойдет о том, как я писал стрелочные часы на языке cmake 2.8.
Читать полностью »

Играем в сапера в фотошопе - 1

По роду своей деятельности мне периодически приходится автоматизировать свою работу в фотошопе. Точнее я мог бы этого не делать, но природная лень не оставляет шансов в борьбе с рутиной, как говориться «лучше час потерять, зато потом за 5 минут долететь». Все бы наверное так и оставалось на уровне отдельных разрозненных скриптов если бы не пост от enotus. Благодаря ему я узнал, что к фотошопу (как впрочем и другим продуктам от Adobe) можно писать расширения на HTML+JS. И пошло, поехало.

Как-то так сложилось, что изучение всего нового я обычно начинаю с написания простенькой игрушки на этом самом новом. Для фотошопа я выбрал Сапера. В этом примере я бы хотел рассказать о создании интерфейса расширения, взаимодействии с фотошопом и обработкой событий. Так что кому все еще интересно, прошу подкат.
Читать полностью »

Привет, читатель! Уверен, ты уже видел CSS анимацию, часы, блоки с уголком и прочее-прочее-прочее. Однако, видел ли ты когда-нибудь шрифт, который написан только на CSS?
Читать полностью »

def maps():
	print "maps maps maps"

def spam():
	print "Erasing everything..."
	print "done."

Вы знаете, что если очень долго смотреть на следующую строку, то там останутся только три слова «spam»?

s = "spam‮" ,spam ,"‬spam"
s[1]()

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

Посмотреть на ideone. (Для тех кто не знает: там внизу есть вывод выполнившейся программы)
Читать полностью »

Тестирование в CСравнительно недавно была статья «Полуавтоматическая регистрация юнит-тестов на чистом С», в которой автор продемонстрировал решение задачи с использованием счётчиков из Boost. Следуя этому же принципу, была предпринята (успешная) попытка повторить данный опыт уже без использования Boost из соображения нелогичности наличия в проекте на C зависимости от Boost, да ещё и в таком небольшом объёме. При этом в тестах присутствовали вспомогательные директивы препроцессора в большом количестве. И всё бы так и осталось, но практически на завершающей стадии был найден альтернативный способ регистрации, который позволяет полностью избавится от дополнительных действий. Это C89-решение для регистрации тестов и чуть более требовательное к системе сборке решение для регистрации наборов тестов.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js