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

Возникла тут задача, написать код на php, который принимает js-код и обфусцирует его по самое не балуй. После курения гугла и хабра я приступил к работе. Как и следовало, я начал того, что запустил консоль JS в хроме и начал пытаться получать строки из месива символов, вот что получилось (с пояснениями):

(![]+[])

«false»
[] — пустой массив
! — операция логическое НЕ, особенность js (и не только), в том, то при булевых операциях если операнд не является булевым типом и не равен 0 то он признается за true
То есть (![]) = false
+ — операция сложения и объединения строк, если оба операнда числа, то произойдет сложения, иначе это будет объединение строк с приведением типов. Кстати, тут есть особая магия типов, но это позже.
Читать полностью »

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

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

imageВ своем выступлении на Autodesk University в Москве Карлос Олгуин рассказал об очень любопытных исследованиях, которыми занимается его команда вместе с ведущими учеными мировых университетов. Речь шла о технологиях программирования вещества, как живого, так и неживого, самоорганизации различных структур, будущем и самособирающихся табуретках из IKEA. По следам презентации мне удалось задать Карлосу несколько дополнительных вопросов. Под катом наша беседа и видеозапись его выступления.Читать полностью »

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

Почему верить в эволюцию – глупо, почему эволюция это не «всего лишь теория», где же все связующие звенья среди ископаемых, почему мы не происходили от обезьян и как работают генетические алгоритмы.

P.S. Лекция записывалась на камеру (полную версию в не очень хорошем качестве можно посмотреть здесьЧитать полностью »

Задачки с Project Euler хороши тем, что позволяют развлечься и потренировать мозг на разных уровнях сложности для одной и той же задачи. Самый простенький подход — brute force. Первые два десятка задач на 99% решаются именно таким подходом. После отправки правильного ответа на задачу открывается ветка форума по ней. Любители из десятков стран соревнуются, кто процитирует решение поизощреннее. Более продвинутые используют встроенные возможности языков, на которых пишут решение, но суть одна и та же — перебор или явный с кучей вложенных циклов или неявный через вызов специальных функций. Особенно красиво это выглядит в языках Python или Ruby ( часто в одну-две строчки), помногословнее в Java и C++. Чем дальше, тем натужнее выглядят «силовые» решения, с использованием классов вроде BigInteger. С увеличением номера задачи грубую силу удается успешно применитьвсе реже и все сложнее. Появляется много задач на чистую математику, где нужно решить задачу на бумаге, а потом закодировать что-то совсем несложное. Иногда писать можно обойтись без написания кода вовсе, таких задач много — например, на применение комбинаторики.

Но иногда приятнее найти совсем нестандартное решение.
Читать полностью »

В 1975м году, ПК IBM 5100 выпускалась в вариантах с языками программирования BASIC или APL. Как можно догадаться, что в итоге основной упор был сделан на интерпретатор BASIC'а по причине того, что при принятии решения о том, что покупать, пользователям данного ПК он казался более понятным, а APL требовал какого-то минимального уровня вхождения. Говорят, что что APL потерял популярность из-за не ascii-символов, может это отчасти и так, но произошло это не в 75м.

Возможно, история программирования языков повернулась бы чуть иначе, если бы развитие пошло с упором на интерпретатор APL'а, но об этом остаётся только фантазировать, так что предлагаю посмотреть на то как писали программы в далёком 1975м. По-моему, выглядит более элегантно, чем в можно увидеть в большинстве даже сейчас:

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

Вдохновившись этой статьей от СКБ Контур, решили провести Code Retreat у себя на факультете (Томский государственный университет, факультет информатики). Правда у нас целью было не обучение каким-то конкретным технологиям, а скорее просто знакомство (половина участников с 1-2 курсов), фан и немного ненормального программирования.
Читать полностью »

Internet Archive позволяет запускать Atari игры и старое ПО прямо в браузере

Два года ушло у команды Internet Archive на разработку JavaScript-порта MESS-эмулятора, позволяющего запускать старые игры и ПО (типа первого редактора таблиц) прямо в современном браузере. По словам разработчиков, разработка позволяет запускать все, от Atari-игр до старого-старого ПО.

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

Доброго времени суток!

Сегодня речь пойдёт о том, как можно попробовать проследить тенденции. Глядя на то, как это делает google появилось желание сделать подобные тренды на основе тегов Хабра. Возможно, не все пользователи добросовестно расставляют теги, но допустив это как истину, можно получить неплохие результаты. Итак, давайте попробуем.
Читать полностью »

Хакеры на экране — 2

Этот пост — продолжение статьи о том, как в кино изображают хакеров. Затронутая тема показалась мне довольно интересной (и далеко не исчерпанной) и в эти выходные я решил продолжить описывать такое явление, как «хакеры на экране» и дополнить коллекцию киноляпов.

На КДПВ стоп-кадр фильма «Железный Человек-2». Как нетрудно догадаться, рисующие этот интерфейс управления боевого костюма дизайнеры зашли в первый попавшийся русскоязычный онлайн-магазин, торгующий кондиционерами (умиляет даже сохранившееся название переменной «kolichectvo») и вырезали часть html-кода…

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


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