Отключив сборщик мусора Python (GC), который освобождает память, отслеживая и удаляя неиспользуемые данные, Instagram стал работать на 10% быстрее. Да-да, вы не ослышались! Отключив сборщик мусора, можно сократить объем потребляемой памяти и повысить эффективность работы кэша процессора. Хотите узнать, почему так происходит? Тогда пристегните ремни!
Читать полностью »
Рубрика «ненормальное программирование» - 56
О том, как в Instagram отключили сборщик мусора Python и начали жить
2017-05-15 в 11:53, admin, рубрики: garbage collector, python, wunder fund, wunderfund, Блог компании Wunder Fund, высокая производительность, ненормальное программированиеСоздание JPEG из ниоткуда
2017-05-15 в 7:02, admin, рубрики: afl-fuzz, jpeg, КодоБред, ненормальное программирование, обработка изображений, Тестирование IT-систем, фаззингВот интересная демонстрация возможностей 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
Читать полностью »
Жизненный путь по граблям одного не совсем здорового на голову программиста
2017-05-14 в 23:12, admin, рубрики: C#, c++, javascript, грабли, дно, ненормальное программирование, помощь, ПрограммированиеДоброго времени суток.
Чуть больше месяца назад я опубликовал свои мыслеизлияния тут на сайте. Ввиду отсутствия кармы я опубликовал их в совсем неподходящие для этого блоги, за что меня справедливо отправили на месяц попариться. Но за то время, что статья висела, достаточное количество людей обратило на неё внимание и мне прочитавшие, впритык, но таки помогли, за что я безмерно этим людям благодарен. Что за помощь и что значит «впритык» многие наверняка не поймут, ибо статью прочитать не успели, а если и успели, то давно суть забыли… и правильно сделали, ничего полезного она не несла только отнимала время. За отнятое время в тот раз и за то, что отнимаю у вас его в этот — искренне прошу прощения. Кому всё же интересны подробности, под катом я приведу старый текст и расскажу, что у меня происходит на данный момент.
Читать полностью »
Изменяемые свойства классов в питоне: польза для дела и мелкого хулиганства
2017-05-09 в 9:01, admin, рубрики: python, ненормальное программирование, никто не пишет в теги, никто не читает теги, ооп, этот тег -- ложьВ питоне аттрибуты класса можно сколько угодно модифицировать во время работы, и изменения видны всем объектам этого класса и других подклассов. Под катом — одно полезное применение этого факта.
Считаем до трёх: три
2017-05-07 в 12:18, admin, рубрики: Алгоритмы, вычисления на пальцах, Занимательные задачки, знаю ТБ как свои три пальца, математика, ненормальное программирование, программирование микроконтроллеров, троичный вычислительТроичный счётчик
Итак, продолжаем разговор. В этой статье я расскажу, как можно сделать троичный счётчик. Напоминаю, что я хочу сделать простейшую, но программируему железку, работающую на троичной логике. Ответ на вопрос «зачем?» смотреть тут.
Это уже третья статья, по мере готовности будет продолжение. Оглавление:
- Считаем до трёх: раз (троичный мультиплексор и сумматоры)
- Считаем до трёх: два (память)
- Считаем до трёх: три (счётчики)
- Считаем до трёх: четыре (stay tuned)
Как обычно, в моих статьях картинок больше, нежели текста. Вот так выглядит основная железка, о которой сегодня будет идти речь:
Дерзкий telegram бот
2017-04-28 в 13:12, admin, рубрики: javascript, natural language processing, telegram bots, машинное обучение, ненормальное программированиеНедавно, в попытках разобраться с nlp, мне пришла идея написать простого telegram бота, который будет разговаривать, как дерзкий гопник. То есть:
- давать ответ по слову-триггеру, как "хочу", "короче", "нет" и т.д.;
- отвечать дерзким вопросом на вопрос;
- отвечать нецензурной рифмой;
- если ничего не подходит и бот в замешательстве, отвечать злой фразой.
Для имплементации был выбран JavaScript с ES6 и Flow. Возможно, Python подошёл бы лучше, так как под него существует больше стабильных и проверенных библиотек для nlp. Но для JS есть Az.js, которого вполне хватило.
Для работы с Telegram API был использован node-telegram-bot-api.
TLDR: бот, исходный код
Осторожно, под катом присутствует нецензурная речь и детали реализации!
Лямбда-исчисление на JavaScript
2017-04-26 в 16:06, admin, рубрики: javascript, алгоритм Евклида, комбинатор неподвижной точки, лямбда-исчисление, ненормальное программирование, решето Эратосфена, функциональное программирование, числа чёрча, метки: лямбда-исчислениеПривет! В этой статье я хочу в очередной раз взглянуть на лямбда-исчисление. Теоретическую сторону вопроса на хабре обсуждали уже множество раз, поэтому взглянем на то, как лямбда-исчисление может выглядеть на практике, например, на языке JavaScript (чтобы примеры можно было выполнять прямо в браузере).
Итак, основная идея: всё есть функция. Поэтому мы ограничим себя очень узким кругом возможностей языка: любое выражение будет либо анонимной функцией с одним аргументом (x => expr
), либо вызовом функции (f (x)
). То есть весь код будет выглядеть похожим образом:
id = x => x
double = f => x => f (f (x))
Поскольку результатом работы функций будут другие функции, нам понадобится способ интерпретировать результат. Это единственное место, в котором пригодятся нетривиальные возможности JavaScript.
Читать полностью »
Баловство. Пишем Telegram бота на Google script
2017-04-12 в 9:38, admin, рубрики: google script, telegram, ненормальное программированиеЦели, задачи, оправдания безумства.
Все началось с того, что кто-то из хабравчан в комментариях поведал о использовании Google Translate в роли синонимайзера. Он предложил переводить текст с одного языка на другой и обратно и обещал достаточно хороший процент отличий и сохранение смысла текста. Но это не точно.
Вопросы, на которые я решил получить ответ «да»
- Можно ли создать Telegram бота в Google Script?
- Можно ли бесплатно использовать API Google Translate
без регистрации и SMS? - Можно ли сделать онлайн инструмент без использования хостинга?
Тест на знание языка Си, найденный в первоапрельской шутке
2017-04-06 в 16:44, admin, рубрики: C, c++, Занимательные задачки, ненормальное программирование, собеседование вопросы, тестовое задание, язык сиПрошло 1 апреля. Часто первоапрельские шутки, выложенные в Интернете, продолжают свое шествие, и всплывают совершенно в неожиданное время. О такой шутке про язык Си и будет эта статья. В каждой шутке есть только доля шутки, и я ее взял на вооружение для беглого тестирования на знание языка Си.
Надо написать программу (с пояснениями), в которой будет работать следующая строка:
for(;P("n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
Всего одна строка, но по ней можно определить глубину понимания человеком языка Си. Эта строка будет работать также и на С++. Советую попробовать свои силы. Может будет полезно.
Читать полностью »
Дайджест AI Cup. Пять стратегий Code Wizards 2016
2017-04-05 в 15:15, admin, рубрики: AI, russian ai cup, russian ai cup 2016, Алгоритмы, Блог компании Mail.Ru Group, ненормальное программирование, Программирование, Спортивное программирование
В декабре завершился Russian AI Cup 2016 — организованный нами ежегодный чемпионат по программированию искусственного интеллекта. Чемпионат для наглядности, понятности и простоты проводится в игровом формате.
В этом году участники создавали алгоритм — игровую стратегию для MOBA-игры. Получившийся бот сражался с другими такими же, а лучший из них побеждал в раунде. Таким образом, из серии раундов получился турнир, проходящий в несколько этапов.