Задача о принадлежности точки многоугольнику

Как-то появилась потребность определять принадлежность точки много угольнику. Естественно, прежде чем браться за разработку своего алгоритма было бы неплохо познакомиться с наработками в решении этой задачи. Что и сделал. полез в интернет. Одно из решений подобной задачи — метод трассировки луча. Купился я на посулы … Потратил рабочий день на него, прежде, чем понял насколько он глючный.

Сначала попробовал вариант под названием «очень быстрый алгоритм». По глупости сразу вставил в рабочий код. Программа глючила. Стал тестировать алгоритм. Простейшая тестовая утилитка показала, что что-то не так:

Утилита отмечает координаты мыши красным если false = точка вне многоугольника и зелёным (true), если «очень быстрый алгоритм» решает, что точка внутри многоугольника. Как видно из скриншота, в некоторых областях алгоритм врёт.

Пробуем проработать каждую точку вокруг многоугольника:

 Вывод один — «очень быстрый алгоритм» очень глючный. Глючит на горизонтальных участках многогранника (трассировочный луч идёт по горизонтали вправо).

Пробуем простой (не быстрый) алгоритм трассировки луча:

Вроде бы всё прекрасно, но:

опять же часть точек внутри и снаружи многоугольника обрабатывает неверно.

Другая фигура:

Слева вверху область обработана неверно.
Для большинства случаев сойдёт, но мне надо 100% уверенность, в принадлежности точки многоугольнику или не принадлежности. Поэтому делаем лёгкий «плевок» в сторону авторов подобного алгоритма с такими ошибками и быстренько пишем свой алгоритм со 100%-й точностью.

Успехов!

P.S.: Не всё что в сети — золото.

Out of memory (Delphi 7)

Сообщение «Out of memory» в Delphi при работе с динамическими массивами скорее всего возникает при больших объёмах массивов и использовании функции SetLength в виде: SetLength(массив, Length(массив) + 1). Память пошагово, паленькими порциями, выделяемая под массив, оказывается «разорвана на куски», чем если бы ей выделяли сразу достаточно большой кусок. Выход простой: выделяем, как и положено, заранее просчитав необходимый объём, не x+1, а сразу достаточное количество памяти для решения типичной задачи. Если же памяти надо ещё больше — добавляем очередной большой кусок. Для контроля последней записи используем переменную.

Что делать если не работают постоянные ссылки в WordPress после переноса

Если после переноса сайта на WordPress перестают работать постоянные ссылки, то есть главная страница показывается, а ссылки на статьи нет: появляется сообщение что такой страницы на сайте нет. То на новом хостинге проблемы с Mod_rewrite.

Что делать?

1. Проверьте, а подключен ли этот модуль?

# grep mod_rewrite /usr/local/etc/apache/httpd.conf

Должна быть пара строк в httpd.conf

LoadModule rewrite_module libexec/apache/mod_rewrite.so
AddModule mod_rewrite.c

Если их нет — добавьте.

2. В секции Directory внесите следующие изменения

<Directory />
Options All
AllowOverride All
</Directory>

… и да будет свет!

Локально: удаление BOM меток в файлах

Для удаления BOM меток в файлах можно использовать утилиту неизвестного автора — BOM remover. Лог сохраняется в корне дерева каталогов, которые подлежали обработке.

Количество меток (tags) в wordpress

Чтобы поменять количество меток (tags) в админке в wordpress надо отредактировать файл wp-admin\includes\ajax-actions.php
Поменять значение number на нужное, например на 500 (по умолчанию 45).
$tags = get_terms( $taxonomy, array( ‘number’ => 45, ‘orderby’ => ‘count’, ‘order’ => ‘DESC’ ) );

 

Чтобы поменять количество меток в шаблоне надо отредактировать файл wp-includes\category-template.php
Поменять значение number на нужное (по умолчанию 45).
$defaults = array(
‘smallest’ => 8, ‘largest’ => 22, ‘unit’ => ‘pt’, ‘number’ => 45, …

Сколько зарабатывают на DDos’е

Немного информации о том сколько зарабатывают на DDos’е. Данные основаны на интервью опубликованном здесь: https://habrahabr.ru/post/320580/ .

Цены на слабо-защищенные сайты:
10$ за час
100$ за сутки
500$ за неделю
Цены на средне-защищенные сайты:
25$ за час
от 250$ за сутки
от 1000$ за неделю
Цены на защищенные сайты:
от 50$ за час
от 500$ за сутки
от 3000$ за неделю

И 90% от суммы уходит ко мне на руки, а оставшиеся 10% — на сервера для ботов/сканнеров и тп

Доход не статичен, иногда могу за месяц получить 10.000$, а иногда порядка 100.000$

Доверяете доступ в свой twitter сторонним приложениям?

Доверяете доступ в свой twitter  сторонним приложениям? А зря!

Через некоторое время обнаружите в своём аккаунте, что вы читаете некоторых «деятелей», не которых не подписывались. А то и сообщения (твитты), которые вы не писали. Так за ваш счёт «раскручиваются» тысячи аккаунтов. Это часть секрета «популярности» аккаунта «борца» Навального и некоторых других «деятелей», где в числе читателей может стоять около миллиона аккаунтов.

Тысячи продвигаемых аккаунтов – это скрытая до часа Х «бомба», которая может быть приведена в действие для различных целей, например, для «твиттерной революции». Мы уже знаем что это такое по Ближнему Востоку. Другие варианты придумайте сами.

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

Закрыть доступ к вашему аккаунту для внешних приложений вы можете в настройках своего аккаунта. Пункт меню — «Приложения». Достаточно нажать кнопки «Закрыть доступ» напротив всех приложений в  в списке.

Будьте бдительны!

Правильное обрзезание … строки по пробелу

Забавно наблюдать, как интернет полнится кучей хлама. Вот например, типичное решение задачи укоротить строку до значения длины не более заданного, разделив её по пробелу:

mb_substr($str,0,mb_strrpos(mb_substr($str,0,$size,’utf-8′),’ ‘,’utf-8′),’utf-8’);

или такое:

$string = mb_substr($string, 0, $length,’UTF-8′);
$position = mb_strrpos($string, ‘ ‘, ‘UTF-8’);
$string = mb_substr($string, 0, $position, ‘UTF-8’);

Авторы почему-то забывают, что если обрабатываемая строка меньше заданной длины, то она станет ещё короче, чем исходная, хотя по условию задания, она должна остаться такой, какая была. А это значит, что перед началом этих манипуляций со строкой не мешало бы проверить длину обрабатываемой строки и начинать её мурыжить только если она длиннее, чем требуется.

MySQL: INSERT IGNORE

Есть в MySQL классная команда INSERT IGNORE. Позволяет тупо, без проверки уникальности пихать записи в таблицу. Если по уникальному ключу эта запись — дубликат, то она будет отклонена без остановки работы по ошибке.

Таким образом, эта команда сильно выручает, когда есть строки очереди готовых запросов и надо достаточно извратиться потрудиться, чтобы из них извлечь некоторые данные (иногда и сам не знаешь какие или тысячи вариантов таблиц), а потом эти данные использовать для определения наличия подобной записи в таблице.

А вот вставка IGNORE в запрос с INSERT сразу решает эту проблему. Прямо так и хочется сказать на радости: «INSERT IGNORE, я тебя хочу поцеловать!»

Микроразметка в интернет-магазине

Микроразметка в HTML коде веб-страницы не видна обычному пользователю. Её, в основном, используют поисковики. С точки зрения вебмастера это «улучшенный корм» для поисковых «рыбок». Применение микроразметки немного улучшает выдачу поисковиком.

Для практики: Яндекс о микроразметке товаров.

Создание микроразметки для ленивых или наинающих.

Или сайт создателей наиболее популярной разметки: schema.org

Оптимизация в Twitter

Левая колонка в TwitterTwitter в левой колонке показывает хэш-тэги наших читателей/читаемых и близких к ним (тематически) аккаунтов. Поскольку Twitter даёт неплохой инструмент нам в руки, то грех им не воспользоваться.

Если мы видим, что в тегах преобладают какие-то «нечеловеческие» словечки, то это явный признак что лента «больна». Будем лечить. Для этого переходим по тегу и аккаунты, содержащие его, а также его читателей и читаемых «гасим» по нашей методике. Реакция начинается сразу после начала лечения. Лента оздоровляется. Намечается положительная динамика основных показателей (по нашей методике). Сразу хочется «жить и размножаться».

Успехов!

Количество копий изображений twitter

По моим подсчётам в твиттере 15% изображений — это копии (дубликаты). Причём ретвитты сюда не входят. Часть дублирующих изображений может быть опубликована с одного аккаунта повторно.

диаграмма - количество дубликатов в изображений в твиттере

P.S.: 17-03-2016 По уточнённым данным — более половины.

Определение популярности твита

Для определения популярности твита надо, естественно использовать показатель относительного числа ретвитов (%):

относит_число_ретвитов = кол-во_читателей / кол-во_ретвитов

Но на практике такое не всегда возможно. Теоретически – возможно, но практически требует большого числа запросов к twitter: в случае большого числа ретвитов для определения значения кол-во_читателей придётся суммировать количество читателей всех ретвитнувших! А если ретвитов несколько тысяч … ?

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

Оригинал записи: Определение популярности твитта

Несовершенные алгоритмы переводчика Google можно использовать в корыстных целях

Злонамеренные действия со стороны пользователей поисковика

Подобные связи в переводе слов можно «накрутить» вручную или автоматически ботами. Лично не пробовал, но скорее всего, работает простая связь, когда переводчик Google контролирует замену некорректно переведённых слов пользователями. То есть, злонамеренный пользователь «скармливает» переводчику Google кучу текстов украинском языке, где есть упоминание «Россійской Федераціи» и просит сделать перевод. Результаты перевода злоумышленник исправляет на нужные ему значения. Так происходит многократно на протяжении какого-то времени. Через некоторое время программа перевода принимает эту замену слов как действительную и начинает использовать в своих переводах. Дело сделано. Злоумышленник злобно хихикает.

Сохраняю, как методику, которую можно использовать в коммерческих целях.