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

image

Попался мне на глаза Brainfuck-оподобный язык Cow. И решил я написать для него интерпретатор на новомодном Rust. А так как Rust — мультипарадигменный язык, то стиль написания программы будет функциональный. Чтобы узнать что получилось — прошу под кат.

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

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

Эволюция фрактальных монстров - 1

Дальше много картинок и gif-анимация. Но прежде, чем переходить под кат, посмотрите на картинку выше и скажите, что на ней нарисовано?

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

Игры, в которых нужно писать код: Grid Garden, Elevator Saga и другие - 1

В детстве мы постигаем премудрости жизни через игру. Это важнейший элемент развития личности, социальных навыков, получения знаний об окружающем мире. Игры — хороший «контейнер» для донесения и закрепления каких-либо знаний. Яркий пример — игры, в которых нужно писать код. Наверняка все вы о них слышали, а в некоторые даже играли. Их первичная задача — развлечь людей, уже владеющих навыками программирования, но они могут использоваться и для обучения. Эти игры помогут освежить свои знания по тому или иному языку, отвлечься и заняться более простой алгоритмической задачей.

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

Отключив сборщик мусора Python (GC), который освобождает память, отслеживая и удаляя неиспользуемые данные, Instagram стал работать на 10% быстрее. Да-да, вы не ослышались! Отключив сборщик мусора, можно сократить объем потребляемой памяти и повысить эффективность работы кэша процессора. Хотите узнать, почему так происходит? Тогда пристегните ремни!
О том, как в Instagram отключили сборщик мусора Python и начали жить - 1
Читать полностью »

Вот интересная демонстрация возможностей afl; меня реально удивило, что она работает!

$ mkdir in_dir
$ echo 'hello' >in_dir/hello
$ ./afl-fuzz -i in_dir -o out_dir ./jpeg-9a/djpeg

В сущности, я создал текстовый файл только со словом "hello" и попросил фаззер выдавать поток в программу, которая ожидает на входе изображение JPEG (djpeg это простая утилита, которая идёт вместе с распространённой графической библиотекой IJG jpeg; libjpeg-turbo тоже должна подойти). Конечно, мои входные данные не похожи на валидное изображение, так что утилита быстро отвергает их:

$ ./djpeg '../out_dir/queue/id:000000,orig:hello'
Not a JPEG file: starts with 0x68 0x65

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

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

Чуть больше месяца назад я опубликовал свои мыслеизлияния тут на сайте. Ввиду отсутствия кармы я опубликовал их в совсем неподходящие для этого блоги, за что меня справедливо отправили на месяц попариться. Но за то время, что статья висела, достаточное количество людей обратило на неё внимание и мне прочитавшие, впритык, но таки помогли, за что я безмерно этим людям благодарен. Что за помощь и что значит «впритык» многие наверняка не поймут, ибо статью прочитать не успели, а если и успели, то давно суть забыли… и правильно сделали, ничего полезного она не несла только отнимала время. За отнятое время в тот раз и за то, что отнимаю у вас его в этот — искренне прошу прощения. Кому всё же интересны подробности, под катом я приведу старый текст и расскажу, что у меня происходит на данный момент.
Читать полностью »

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

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

Троичный счётчик

Итак, продолжаем разговор. В этой статье я расскажу, как можно сделать троичный счётчик. Напоминаю, что я хочу сделать простейшую, но программируему железку, работающую на троичной логике. Ответ на вопрос «зачем?» смотреть тут.

Это уже третья статья, по мере готовности будет продолжение. Оглавление:

Как обычно, в моих статьях картинок больше, нежели текста. Вот так выглядит основная железка, о которой сегодня будет идти речь:
Считаем до трёх: три - 1

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

Дерзкий telegram бот - 1Недавно, в попытках разобраться с nlp, мне пришла идея написать простого telegram бота, который будет разговаривать, как дерзкий гопник. То есть:

  • давать ответ по слову-триггеру, как "хочу", "короче", "нет" и т.д.;
  • отвечать дерзким вопросом на вопрос;
  • отвечать нецензурной рифмой;
  • если ничего не подходит и бот в замешательстве, отвечать злой фразой.

Для имплементации был выбран JavaScript с ES6 и Flow. Возможно, Python подошёл бы лучше, так как под него существует больше стабильных и проверенных библиотек для nlp. Но для JS есть Az.js, которого вполне хватило.

Для работы с Telegram API был использован node-telegram-bot-api.

TLDR: бот, исходный код

Осторожно, под катом присутствует нецензурная речь и детали реализации!

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

Привет! В этой статье я хочу в очередной раз взглянуть на лямбда-исчисление. Теоретическую сторону вопроса на хабре обсуждали уже множество раз, поэтому взглянем на то, как лямбда-исчисление может выглядеть на практике, например, на языке JavaScript (чтобы примеры можно было выполнять прямо в браузере).
Итак, основная идея: всё есть функция. Поэтому мы ограничим себя очень узким кругом возможностей языка: любое выражение будет либо анонимной функцией с одним аргументом (x => expr), либо вызовом функции (f (x)). То есть весь код будет выглядеть похожим образом:

id = x => x
double = f => x => f (f (x))

Поскольку результатом работы функций будут другие функции, нам понадобится способ интерпретировать результат. Это единственное место, в котором пригодятся нетривиальные возможности JavaScript.
Читать полностью »


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