Search
Write a publication
Pull to refresh
13
0
Колосов Никита @Anexroid

Go-разработчик

Send message

Алгоритм быстрого нахождения похожих изображений

Reading time8 min
Views64K

Введение


Недавно наткнулся на статью, размещенную на Хабрахабре, посвященную сравнению изображений «Выглядит похоже». Как работает перцептивный хэш. Так как я сам достаточно долго занимался этой тематикой (являюсь автором программы AntiDupl), то мне захотелось поделиться здесь своим опытом по данному вопросу. В статье я приведу два варианта алгоритма сравнения похожих изображений — базовый и улучшенный. Все они были проверены автором на практике в рамках указанного выше проекта. Изложение мое будет вестись без строгих доказательств, сложных формул и специальной математической терминологии. Надеюсь, что читатели простят меня за это.

Базовый Алгоритм


Мера схожести изображений


При сравнении похожих изображений первым встает вопрос: что считать мерой схожести изображений? Очевидно, что это величина имеет значение обратное различию изображений друг от друга. Следственно нужно выбрать некую метрику, характеризующую различие изображений друг от друга. Тогда схожими изображениями будут считаться изображения, отличие между которыми меньше некоторого порога. Для изображений с одинаковыми габаритами, обычно такой мерой различия служит среднеквадратическое отклонение пикселей одного изображения от другого. Хотя конечно, нам ни что не мешает выбрать другую метрику, например усредненную абсолютную разность пикселей изображений друг от друга.
Читать дальше →

Парень, который купил 259684 Bitcoin за $2613

Reading time4 min
Views315K
Как известно, в воскресенье на бирже MtGox произошёл обвал котировок пиринговой криптовалюты Bitcoin. В течение считанных минут стоимость упала с $17 до $0,01 за 1 BTC. Анализ событий показал, что кто-то активно сливал «коины» (возможно, украденные). В то же время были те, кто смог воспользоваться ситуацией и купить валюту по сверхнизкой цене.

Вчера один из них сам объявился на форуме bitcoin.org с подробным покаянием объяснением. «Меня зовут Кевин и я тот парень, который вчера купил 259684 BTC менее чем за $3000. Я действительно никому не хотел говорить, но больше не могу. Вот как события происходили с моей стороны».
Читать дальше →

Как изучать исходные тексты

Reading time5 min
Views14K
Бувально в тот момент, когда я (не очень успешно) вычитывал ошибки и опечатки в предыдущем посте, bobry предложил обсудить, как сделать в консоли историю (которая, Shift-PgUp).

Очевидным методом сделать что-то связанное с терминалами — посмотреть, как сделано у других и сделать так же. В процессе изучения этого мы обратили внимание на интересную особенность: некоторые программы, показывая содержимое, восстанавливают экран до запуска приложения (mc, vim, nano, less и т.д.). Кроме того, при их запуске исчезает (в xterm/gnome-terminal) скролл-бар.

Для изучения «каким образом» было решено остановиться на MC, как самом старинном (и не зависящем от ncurses) приложении.

Далее идёт роматичная история о том, как mc делает toggle_panel() с большим количеством цитат из исходного кода.

Заодно, читатель сможет посмотреть, как выглядит процесс «посмотри в исходниках».
Читать дальше →

Генерация приглашений, похожих на инвайты сайта habrahabr

Reading time5 min
Views11K
Скрипт генерирует приглашения для регистрации на сайте в виде картинки 51x51 пикселей формата PNG, написан на PHP, в качестве базы данных использует MySQL. Сделан ради интереса, будет интересен только новичкам.
подробнее

Ребус captcha

Reading time4 min
Views3.6K

После прочтения предыдуших топиков про капчу, мне пришла идея сделать ребус капчу. Конечно, использовать её в реальных проектах не очень правильно, так как пользователь будет тратить время на решение ребуса, а вы наверное знаете, как иногда раздражает даже обычные буквы с капчи ввести.
Читать дальше →

Веб-разработка на Go

Reading time13 min
Views27K
Статья основана на codelab с сайта Go, но не ограничивается им. По ходу прочтения статьи можно будет узнать о структурах данных Go, динамических массивах, использовании библиотек http, template, regexp для создания веб-приложения, шаблонизации и фильтрации ввода, соответственно.
image
Для понимания статьи необходимо немножко уметь программировать, не пугаться слов unix и веб. Основы языка будут изложены в статье.
Go!

Статья-размышление про вход на сайт без пароля

Reading time6 min
Views7.4K
На Хабре уже не раз и не два публиковались статьи о необходимости разрешить пользователю войти через Google/Twitter/Facebook и т.д. Собственно говоря, прогрессивное человечество давно решило, что требовать от пользователя придумывать логины и пароли — вчерашний день. В данной статье я хочу обсудить возникающие проблемы и способы их решения.
Читать дальше →

Пишем плагин-диссектор для Wireshark

Reading time14 min
Views26K
imageWireshark — одна из незаменимых утилит для «прослушки» сети, при работе с сетевыми протоколами. В состав программы уже входит некое количество диссекторов1, которое помогают детально рассмотреть пакеты базовых протоколов. Но при работе над проприетарным протоколом компании Nortel я столкнулся с отсутсвием подходящего диссектора. А нужен он был как воздух. Выход был очевиден — написать свой. Что я и сделал.
Таким образом, имея небольшой опыт написания плагина «анатома» под Wireshark, я решил поделиться знаниями и опытом с сообществом. Ну и для себя записать, на случай, если в будущем понадобится.

Диссекция — лат. dissectio, от dissecare, рассекать
Читать дальше →

Учим bash-скрипты, пишем Xonix

Reading time7 min
Views21K
Прочитал я пару недель назад на хабре статью Учим bash-скрипты, пишем Sokoban и подумал, что тоже знаю bash и могу что-нибудь написать, а заодно ещё лучше узнать bash. Подумал ещё и вспомнил, что давно хотел написать Xonix, когда-то этой игрой заигрывался на своём старом 386-м. И вот, несколько бессонных ночей и скрипт готов. Если интересно как это писалось, какие проблемы возникали, то добро пожаловать под хабракат.


Читать дальше →

Многопоточное скачивание в cURL на PHP

Reading time7 min
Views35K
В данном топике представлена на мой взгляд удобная и функциональная реализация многопоточного скачивания на cURL для PHP. Возможно кому-то она будет полезна, а мне принесёт инвайт ;)

Скачиванием через cURL не пользовался пусть даже из интереса только ленивый. Будь-то из консоли, либо реализуя код на каком-либо ЯП. Решения блокирующего скачивания одной ссылки валяются на каждом углу сети, к примеру на php.net. Однако, если рассматривать реализации на PHP, то такой подход подчас не подходит ввиду высоких временных затрат на вспомогательные операции ( dns lookup, request waiting и подобные ). Для скачивания большого числа страниц последовательный вариант не приемлем. Если устраивает — дальше можно не читать :)
Читать дальше →

Лямбда-функции и замыкания

Reading time3 min
Views69K
imageКонечно многие из нас знакомы с этим понятием, однако данная статья рассчитана на новичков. В данном посте постараюсь рассмотреть данный феномен и привести примеры использования.
Читать дальше →

Алгоритм Карацубы для умножения двух чисел

Reading time3 min
Views28K
Как-то раз пришлось реализовывать умножение длинных чисел, через половинки их представления на C++. 128-битные числа были представлены как пара 64-битных. Оказалось что перемножить два 128-битных числа и получить все 256 бит результата по сложности сравнимо с 4-мя произведениями 64-битных половинок. Как же это работает…

Читать дальше →

Visual PHP для Windows

Reading time10 min
Views62K
На сегодняшний день язык PHP широко распространён, он прост в освоении и понимании, и наверное поэтому он так популярен у начинающих программистов. Без знаний PHP не поправить блок голосования на сайте, не отредактировать PHP шаблон, не вставить рекламный баннер. Многие идут дальше и изучают язык более углубленно, ведь это не только интересно, но и приносит стабильный доход, благо разнообразных предложений для PHP программистов всегда в избытке.

Но что делать, если хочется чего-то большего? Если надоело писать однотипные классы для онлайн-казино, ковыряться в Joomla/Drupal/PHPBB очередного заказчика?
Читать дальше →

Практикум Zend Framework. Часть вторая: Route и Registry

Reading time3 min
Views11K

Продолжим рассмотрение практического использования Zend Framework. Во второй части речь пойдет о маршрутизации, что позволит вам создавать url-адреса любой необходимой для вас формы. Также мы рассмотрим пример организации удобного доступа к системным константам
Читать дальше →

Заставим клавишу Switch Display на ноутбуке работать по-своему!

Reading time3 min
Views11K
Вам нравится как работает gnome-display-properties (это тот, который «Система -> Параметры -> Мониторы») и клавиша переключения монитора на ноутбуке? Да? Тогда можете проходить мимо, топик не для вас :)

Самое большое неудобство этого аплета — невозможность вручную настроить порядок переключения режимов: current configuration -> mirror -> extended desktop -> laptop only -> external only -> и снова current configuration. Не слишком удобно, не правда ли?.. Вот эту задачу мы и будем решать.

Задача


— заставить клавишу Switch Display переключать всего два режима:
1) экран ноутбука включен, внешний монитор отключен
2) экран ноутбука отключен, внешний монитор включен
— сделать так, чтобы ноутбук не уходил в режим ожидания по захлопыванию крышки, если включен внешний экран
Читать дальше →

Практикум Zend Framework. Часть первая: Аутентификация и Acl

Reading time6 min
Views11K

В последнее время я все сильнее и сильнее убеждаюсь в универсальности Zend Framework, как платформы для создания web-приложений. Сегодня я расскажу о процессе создания каркаса сайта на Zend Framework, который предоставит необходимую основу для реализации сайтов средней сложности
Читать дальше →

Взлом матановой капчи на C# — это просто!

Reading time4 min
Views42K
В этом топике я хочу вам рассказать о взломе т.н. «матан-капчи», пример которой был представлен в недавнем топике Матановая капча на PHP — это просто!.
Прочитав статью автора об этой замечательной капче, мне захотелось написать программу для её распознавания, как говорится just for fun ;)
Читать дальше →

Обращение Anonymous к блоку НАТО

Reading time4 min
Views8.1K
В качестве ответа на отчёт НАТО об угрозе «хактивизма» группировка Anonymous опубликовала открытое письмо (сайт сейчас под DDoS-атакой, так что см. кэш Google). Публикуем перевод этого документа.

Приветствуем вас, члены НАТО. Мы — Anonymous.

В своей недавней публикации вы представили Anonymous как угрозу «государству и народу». Вы также заявили, что секретность якобы является «неизбежным злом» и что прозрачность — не всегда правильный способ развития.

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

База GeoIP – страны и города, июнь 2011 (+скрипт обновления)

Reading time3 min
Views12K
Вышла в свет обновленная версия русскоязычной базы данных стран и городов. Основные изменения:
— за счёт новой базы ipgeobase.ru повысилась точность определения городов Украины
— из бесплатной версии базы geobaza.ru исчезли города, поэтому точность определения городов других стран СНГ понизилась
— добавлен скрипт, с помощью которого вы можете самостоятельно обновлять базу (без добавления новых городов и стран)
— таблицы net_ru_2 и net_su удалены из базы, изменены примеры запросов
Результат этой работы доступен для свободного скачивания.
Читать дальше →

Разработка CAPTCHA своими руками

Reading time9 min
Views122K
Сегодня, благодаря господам спам-ботам и иже с ними, в сети практически невозможно что-либо сделать без ввода символов со сгенерированного изображения — CAPTCHA (далее — капча). Фактически, это предотвращает выполнение какого-либо скрипта без участия человека, и в этом топике я расскажу, как такую капчу создать средствами PHP, а так же упомяну очень полезный топик другого хабраюзера, который пригодится при разработке изображения-капчи.
Читать дальше →

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Software Architect
Lead
From 450,000 ₽
PHP
High-loaded systems
Golang
Kubernetes
Redis
MongoDB
RabbitMQ
Apache Kafka
PostgreSQL