Фильтр Блума на PHP

Что это?

Википедия гласит:

Это вероятностная структура данных, придуманная Бёртоном Блумом в 1970 году, позволяющая компактно хранить множество элементов и проверять принадлежность заданного элемента к множеству. При этом существует возможность получить ложно-положительное срабатывание (элемента в множестве нет, но структура данных сообщает, что он есть), но не ложно-отрицательное.

А попроще

Это способ проверки существования элемента в огромной выборке.

Как это работает?

Довольно просто. Мы имеем битовый объект определенной длинны. Также определяем несколько уникальных хеш-функций. Каждое значение выборки проходит через каждую хеш-функцию, которая возвращает позицию в битовой строке и устанавливает в нее 1.
Позже, когда нам необходимо узнать, есть ли элемент в выборке, мы просто пропускаем его через все хеш-функции. Если на всех позициях битовой строки была 1, то объект «возможно присутствует», если хотя бы в одном месте был 0, то объекта нет.
На википедии приведена матмодель определения длинны битовой строки и количества хеш-функций для определенного размера выборки и процента ложно-положительного срабатывания.

Где это можно применить?

Я применяю фильтр, чтобы проверить существования слова или фразу в словаре >10000000 слов. Гугл применяет его в своем поисковом движке.
Вообще положительный момент фильтра Блума в скорости его работы, когда соотношение операций Вставка/Проверка более 0.001 и проверок более 10000. Но это только если сравнивать со стандартным in_array в PHP.
Плюсы очевидны: скорость, меньшая нагрузка на диск, меньшее потребление памяти.
Минусы: долгая загрузка значений, нет возможности удаления (есть решение)

Зачем еще один велосипед? Я уверен, уже делали фильтр Блума на php.

Да, делали. Я провел бенчмарки и моя реализация опередила по скорости и расходу памяти все, которые я смог завести. Об уникальности хеш-алгоритмов я вообще промолчу.

В чем соль?

На самом деле проблемы две.
1. Как хранить битовую строку
2. Нужен уникальный хеш.

1. Тут проблема скорее в том, как хранить битовую строку для варианта с удалением. В том случае используется счетчик и выставляется не 1, а инкремент при добавлении объекта. Я решил использовать алфавит. Но удаление штука не самая хорошая, удаляются элементы, на которые фильтр отвечает «возможно присутствует» и если это было ложно-положительное срабатывание, мы удалим несуществующий объект.
2. Я не специалист по хешам и подбирал функцию хеширования по 2м показателям.
Скорость работы, наверное самый важный показатель. Уникальность, при создании 1000 уникальных хешей, на одну и туже строку они должны выдать 1000 различных значений. Я, к сожалению, добился только 64% уникальности. У конкурентов выше 40% показатель не поднимался.
И это всего лишь:

  abs( crc32( md5($this->seed[0] . $string) ) ) % $size; 

Уникальность создается при помощи рандомной строки $this->seed[0].

Где попробовать?

Милости прошу на Github.
И пробуем:

include 'bloom.class.php';  $parameters = array(   'entries_max' => 2 //создаем Объект для выборки из 2х элементов, с дефолтной вероятностью ошибки 0.1% ); $bloom = new Bloom($parameters);  //добавляем элемент, можно добавить массив элементов $bloom->set('Some string'); //проверяем наличие элемента echo $bloom->has('Some string'); //true  //удаление объекта, только если Bloom был инициирован с параметром counter $bloom->delete('Some string'); 

Доступные параметры:

/* //основные entries_max (int) Размер выборки. По умолчанию: 100. error_chance (float) (0;1) Шанс ошибки. По умолчанию: 0.001. counter (boolean) Используется для включения режима счетчика, чтобы можно было удалять объекты. По умолчанию: false.  //на свой страх и риск set_size (int) Размер битовой строки. По умолчанию: вычисляется. hash_count (int) Количество уникальных хешей. По умолчанию: вычисляется.  //параметры для Хешей, вложенным массивом ['hash'] strtolower (boolean) Конвертировать строки в нижний регистр или нет. По умолчанию: true; */ 

Прилагаются примеры, юнит-тесты, и бенчмарки (сравнение с in_array двумя способами и с тремя другими библиотеками). Многие из Вас и сами способны это написать, но возможно кому-то не захочется велосипедить.
Бонус: бенчмарк на 50 000 выборку с 25000 проверок против in_array без счетчика и со счетчиком.

ссылка на оригинал статьи http://habrahabr.ru/post/170705/

12 бизнес-уроков от основателя и гендиректора Amazon Джеффа Безоса. Часть 2

Переведено в Alconost Translations. Часть 1 — habrahabr.ru/company/alconost/blog/170201/

7. Презентуйте и обсуждайте документы, а не слайд-шоу

В интервью Чарли Роузу Безос говорит: «Обычно на корпоративном собрании кто-то один выходит вперед и представляет общему вниманию… что-то вроде слайд-шоу. С нашей точки зрения… таким образом вы получаете очень мало информации, вместо нее вам достаются только тезисы. Это облегчает задачу тому, кто проводит презентацию, но усложняет понимание тем, кто его слушает. Поэтому вместо этого мы на всех наших собраниях рассматриваем подготовленный заранее документ — 6-страничную повествовательную записку. И вот, когда вам приходится выписывать свои идеи в виде законченных предложений и полновесных абзацев, это заставляет вас думать яснее и четче».

image

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

Создание слайд-шоу не дает такого эффекта. А даже если бы этот эффект и возникал, вам все равно пришлось бы продумывать только основные тезисы. Тогда как написание 6-страничного документа заставляет автора вдумываться во все, а зачитывание и обсуждение его позволяет аудитории вникнуть во все идеи автора.

8. Заботьтесь о потребителях

«Фокус на потребителе делает компанию более устойчивой».
Джефф Безос

В Amazon действует общий принцип: «Работай от потребителя».

Безос неоднократно говорил о том, что сначала нужно сфокусироваться на нуждах потребителя — и работать, отталкиваясь от них. В интервью Чарли Роузу он сказал: «Нас не волнуют конкуренты, мы озабочены нуждами потребителей. Мы начинаем с них — и работаем, исходя из них».

Когда вы действуете таким образом, вы начинаете с потребителя, его нужд и проблем. Обычно компании поступают точно наоборот: они придумывают идеи, создают продукт и потом наблюдают, понравится ли он потребителям.

Безос твердо уверен: то, что лучше всего для потребителя, оказывается наилучшим и для бизнеса. На конференции re:Invent в 2012 году он сказал: «Если мы можем устроить все так, чтобы наши интересы соответствовали интересами наших потребителей, тогда в долгосрочной перспективе выиграют как потребители, так и Amazon».

Вот несколько примеров того, как Amazon работает от потребителя, иногда ставя потребительские интересы выше краткосрочной прибыли компании.

Помогите клиентам избегать случайного дублирования заказов

В Amazon заметили, что некоторые пользователи случайно заказывают те же продукты, которые они уже приобрели. Поэтому было решено помочь им: размещать соответствующее предупреждение на страницах тех продуктов, которые пользователь уже заказал.

Подсчеты Amazon показали, что это снизило продажи, но в компании верили, что это повысит лояльность потребителей.

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

Разрешите конкурентам рекламироваться на вашем сайте

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

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

Он решил, что лучше дать потребителям выбор. Этот принцип до сих пор действует на Amazon.

Просите потребителей оставлять отзывы

Обратите внимание на пользовательские отзывы на страницах продуктов. Это еще один случай, когда можно предположить, что Amazon предпочел бы удалять негативные отзывы о продуктах, чтобы они не заставляли потребителей отказываться от покупок. Но Безос решил, что отзывы полезны для потребителей: «Когда мы первыми ввели потребительские отзывы, это вызвало серьезное неприятие. Я получал письма от издателей, которые сообщали мне: «Вы не понимаете своего бизнеса. Вы зарабатываете деньги, продавая вещи. Уберите эти негативные потребительские отзывы». Мы никогда не запускали ничего стоящего, что не вызывало бы разногласий поначалу. Но если вы хотите быть первым, вам надо привыкнуть непониманию».

За годы работы Amazon собрал столько потребительских отзывов, что стал ресурсом, где люди ищут подробную и достоверную информацию о товарах. Я сам всегда иду туда за отзывами о продуктах (за исключением кино и музыки). То, что Безос встал на сторону потребителей, принесло пользу его бизнесу. История о том, как он проигнорировал издателей (утверждавших, что он не знает, что делает), — одна из моих любимых историй о нем. Потребители прежде издателей — вот ее урок.

Используйте новые технологии, чтобы удовлетворять потребителей

Несмотря на высокий темп технологических изменений, Безос и в них ищет выгоду для потребителей.

В интервью Fast Company в августе 2004 года Безос сказал: «Есть в нашем бизнесе элемент фантастики. Исходные составляющие нашего бизнеса — вещи вроде процессорной мощности, пропускной способности канала, дискового пространства — дешевеют вдвое каждые 12—18 месяцев. Дисковое пространство сегодня стоит в 30 раз дешевле, чем пять лет назад. В тридцать раз! Так что на передний план выходят вопросы: «Что делать с 30-кратно увеличившимся дисковым пространством, 20-кратно выросшей вычислительной мощностью и пропускной способностью канала, ставшего в 30 раз шире? Ладно: как сделать так, чтобы это понравилось потребителям?» Как выяснилось, простых ответов на эти вопросы нет».

Вышло так, что одним из ответов на эти вопросы стали Amazon Web Services (AWS), и этот ответ оказался невероятно удачным.

9. Стройте стратегию на том, что не подвержено переменам

Из выступления Безоса на конференции re:Invent в 2012 году:

«Меня очень часто спрашивают, какие перемены произойдут в ближайшее десятилетие. Это очень интересный вопрос, но очень обычный. Меня почти никогда не спрашивают, что в ближайшие 10 лет останется неизменным. И я уверяю вас: второй вопрос на самом деле гораздо важнее, поскольку выстроить бизнес-стратегию можно только вокруг того, что стабильно во времени… Мы в розничной торговле знаем, что потребители хотят низких цен, и я знаю, что за ближайшее десятилетие здесь ничего не поменяется. Потребители хотят быструю доставку и широкий выбор. Невозможно себе представить будущее, в котором через 10 лет потребитель придет и скажет: «Джефф, мне очень нравится Amazon, но мне бы хотелось, чтобы цены были чуточку выше» или «Я люблю Amazon, но вы бы лучше доставляли товары чуть помедленнее». Невозможно такое представить. Так что мы вкладываем свою энергию и усилия, зная, что это продолжит приносить пользу нашим потребителям и через 10 лет. Когда у вас есть нечто, что будет работать и в долгосрочной перспективе, можно позволить себе вложить в это много энергии.

Грандиозные идеи для AWS были и весьма простыми. Я так же не могу представить, чтобы кто-то подошел ко мне через 10 лет и сказал: «Мне нравится AWS, только сделайте его чуть менее надежным», или «AWS мне подходит, но цены все же поднимите хоть немного», или «Я люблю AWS и хотел бы, чтобы вы слегка притормозили с новшествами и усовершенствованием API». Такое представить невозможно.

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

Так что же останется столь же важным для ваших пользователей через 10 лет? Прислушайтесь к совету Безоса: работайте над этим ежедневно, и оно окупится. Amazon всегда работает над снижением цен, ускорением доставки (и внедрением доставки в день заказа). И наверняка они добавляют каждый день новые продукты.

В Netflix сосредоточились на потоковой передаче данных, ведь за этим будущее. Поэтому они работают над повышением надежности потоков, расширением выбора и улучшением контента. Они знают, что всего этого хотят пользователи. В Google знают, что их потребители будут так же хотеть точных результатов поиска и немедленных ответов. В Verizon Wireless — что пользователям будут все так же нужны более широкое покрытие, высокие скорости и большая надежность.

Никто не скажет сотруднику Verizon Wireless: «Мне бы хотелось, чтобы мой телефон здесь не находил сеть», или «Я хочу получить более медленное соединение с интернетом с моего смартфона», или «Побольше бы проблем с вашей сетью». Никакой потребитель не скажет такого всерьез. Так что каждый день Verizon прилагает усилия, чтобы улучшить свои услуги.

Что сказали бы вам ваши потребители? Куда вы вкладываете энергию? Те ли это вещи, которые останутся важными для пользователей и через 10 лет? Если нет, начните работать над тем, что не утратит актуальности в ближайшее десятилетие. Потом скажете Джеффу Безосу спасибо.

10. Определите и устраните риск

Что вы всегда слышите о предпринимателях? Что они любят риск. Что он питает и бодрит их.

Согласно Безосу, лучшие предприниматели не любят рисковать: они определяют и устраняют риск на ранних этапах.

Он говорит: «Хорошие предприниматели не рискуют; они ищут способ уменьшить риск… Создание своей компании — уже рискованное дело, после чего вам нужно систематически устранять риск шаг за шагом, с самого начала… Вам необходимо системно определять риск. Когда компания подрастет и окрепнет, вы снова сможете рисковать, но на начальном этапе главным вопросом должен быть: «Так, есть хорошая идея; как бы уменьшить риск?»

11. Начните сейчас, чтобы не пожалеть потом

С чем хуже всего жить? Сожаления, вина, печаль? Когда Безос размышлял о создании Amazon, ему пришлось решать: открыть свое дело или сохранить хорошую работу на Уолл Стрит. Тогда он придумал систему принятия решений, которую назвал Системой минимизации сожалений. Это помогло ему осознать, что он не хотел отказываться от идеи начать свое дело и жалеть об этом потом. Страх сожалений и стал одной из ключевых причин, побудивших его создать Amazon.

12. Советы Безоса предпринимателям

Выступая на конференции re:Invent в 2012 году, Безос дал несколько прямых советов всем предпринимателям:

1) «Никогда не следуйте за модой… вам нужно спозиционировать себя и ждать волны. Чтобы сделать это, обратитесь к тому, к чему вы неравнодушны. Это совет номер один, который я дал бы любому, кто хочет начать свое дело или запустить новый проект внутри большой компании. Убедитесь, что вас это действительно интересует. Миссионеры создают лучшие продукты… Я всегда предпочту миссионера обычному наемнику. Последние хотят использовать компанию для обогащения, а миссионеры стремятся создать отличный продукт или услугу. И, как ни парадоксально, в итоге миссионеры все равно зарабатывают деньги… Так что занимайтесь тем, к чему лежит душа».

2) «Начните с нужд потребителя и отталкивайтесь от них. Эти две вещи — увлеченность и клиентоориентированность — обеспечат вам долгую жизнь в бизнесе».

Другие полезные советы от Джеффа Безоса

  • В тяжелые периоды больше общайтесь с сотрудниками.
  • Чтобы продумывать долгосрочную перспективу, вы должны обладать собственным видением. Если вы всегда ограничиваетесь краткосрочной перспективой, вы увязнете в рутине. Это схоже с Системой минимизации сожалений.
  • Неудачи — часть предпринимательской работы. Не преувеличивайте их значение.
  • В Fast Company есть очень хорошая цитата из Безоса: «Для каждого лидера в компании, не только для меня, существуют решения, которые могут быть приняты на основе аналитики. И это лучший вид решений! Они основаны на фактах. Самое лучшее в них — то, что они игнорируют иерархию. Самый младший сотрудник компании может победить в споре самого старшего с помощью решения, основанного на фактах. К сожалению, есть множество других решений, которые невозможно свести к математическим задачам». В вопросе решения таких задач Безос полагается на самых опытных руководителей, которых он регулярно нанимает из компаний побольше.
  • Безос называет себя «переменозависимым» и всегда приспосабливается к меняющейся действительности.
  • Хотите знать, на что похожа встреча с Джеффом Безосом? Прочтите этот пост Стива Йегге. Если не хотите читать пост, просто запомните: он очень умен и знает больше, чем вы. Потратьте недели на подготовку презентации для него — и он все равно поймает вас на том, что вы упустили. Моя любимая цитата из этого поста: «Он переиграет вас. Знать все по теме презентации — это лишь первая линия вашей защиты. Это как доспехи, которые он пробьет за первые пару минут. Прямо во время встречи он поймет нечто настолько важное по вашей теме, что заставит вас выглядеть абсолютным клоуном. Верьте мне, ребята: я много лет наблюдал, как это происходит. У Джеффа Безоса есть все эти исключительно умные, опытные эксперты в разных сферах, которые окружают его на огромных собраниях, и каждый день он думает о вещах, которые им и в голову не приходили. И это — гарантированный тест на facepalm».
  • Думайте проще, когда речь заходит о ваших потребителях.
  • Безос также является большим фанатом научной фантастики. Он говорит, что эта страсть идет рука об руку с продумыванием долгосрочной перспективы. Наверное, эта же страсть лежит в основе Blue Origin.

Что меня больше всего восхищает в Джеффе, так это то, что он еще сравнительно молод (ему 49 лет), так что скорее всего нас ждет еще много уроков от него в будущем. Что станет его наследием? Он сам хочет, чтобы это был «самый старый в мире человек».

Пожалуй, его наследием станет Amazon, но есть и масса других вероятностей. Доступные и безопасные космические путешествия с Blue Origin? Будут ли люди в 2080 году благодарить Безоса за возможность путешествовать в космос?

10 000-летние часы? В 5000 году люди будут смотреть на них (часы будут расположены внутри горы в Техасе) и знать, что Джефф Безос помог построить их. Наряду с Amazon, космическими путешествиями и многочисленными предпринимателями, получившими возможность создать продукты своей мечты благодаря Безосу и доступности AWS.

А может, это будет что-то еще более масштабное, о чем пока никто не знает (помните, что он думает на много лет вперед и очень скрытен).

Что бы в итоге люди ни помнили о Безосе, сегодня есть масса вещей, которым у него можно научиться.

ссылка на оригинал статьи http://habrahabr.ru/company/alconost/blog/170727/

Сайт KillMePls закрыт Роскомнадзором

Сайт KillMePls.Ru является сборником историй, присылаемых читателями. Известно, что таких сборников много в современном Интернете IT happens», «Задолба!ли», «Дело не в тебе», «Страшные истории» и проч.), а отличаются они принятым направлением, то есть тематикою историй. Так вот на сайт KillMePls (название которого в переводе с английского означает «убейте меня, пожалуйста») присылали свои истории люди, силою жизненных обстоятельств доведённые до крайней степени отчаяния и готовности расстаться с жизнью, и почти каждую такую историю именно её автор завершал просьбою убить себя. Нередкими были и признания в готовности к самоубийствам, иногда довольно подробные.

Роскомнадзор не мог, понятно, пройти мимо такого сайта, не оградив Интернет от информации, способной принести вред малолетним несмышлёнышам. В роли малолетних несмышлёнышей оказались в очередной раз если и не все жители России, то, по крайней мере, все клиенты Ростелекома, «Билайна» и десятков других провайдеров, руководствующихся российским государственным «чёрным списком»: 24 января (позавчера) KillMePls оказался в этот список добавлен, о чём сообщает вчерашняя статья «Роспотребнадзор услышал и убил killmepls.ru» на Roem.Ru, заголовок которой содержит довольно остроумную шутку («услышал и убил») о названии сайта, но при этом (прямо сейчас, во всяком случае) упоминает Роспотребнадзор вместо Роскомнадзора, что вовсе не так уж остроумно.

Со слов Александры Лаврентьевой (владелицы проекта KillMePls) на Roem сообщают, что прописанный в законе механизм оповещения владельцев хостинга перед занесением сайта в чёрный список в очередной раз не сработал: сайт-то находится на зарубежном хостинге (в полном соответствии с мудрым пособием «9,5 правил ведения безопасного IT-бизнеса в России»), так что от хостера нечего было и ожидать готовности понять письмо на языке российских властей, не то что переслать это письмо сайтовладелице.

Очередной шаг безжалостного тоталитарного наступления на Интернет ознаменовался победою государства. Так как «сайт KillMePls закрыт Роскомнадзором» — пятистопный ямб, то вы можете даже напевать его на мотив первой строки из Песни Хорста Весселя.

ссылка на оригинал статьи http://habrahabr.ru/post/170725/

Cat B15 — защищённый смартфон от Caterpillar

Компания Caterpillar, известный на весь мир производитель тяжелой строительной техники, представила Cat B15 — защищенный смартфон под управлением Android Jelly Bean.
Устройство, заключенное в прорезиненный алюминиевый корпус, по заявлению разработчиков, сможет c лёгкостью выдержать падение с 2 метровой высоты на твердую поверхность, погружение до получаса на метровую глубину и сможет работать при температуре от -20 до +50 градусов по Цельсию.
От смартфона такого класса не стоит ожидать из ряда вон выходящих характеристик. Он имеет 4-дюймовый WVGA экран, покрытый Gorilla Glass; двухъядерный процессор Cortex-A9, 512 Мб оперативной памяти и 5-ти мегапиксельную камеру. 2000mAh батарея обеспечивает время разговора до 16 часов.
Девайс начнёт продаваться с марта по цене 329 евро.

ссылка на оригинал статьи http://habrahabr.ru/post/170721/

Бесплатный хостинг от Ucoz: История одного развода

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

Так как я уже несколько лет пытаюсь программировать, то уже давно завел свой сайт. Как человек не очень богатый, и очень русский — хостинг завел бесплатный, как и домен. На Укозе. И вот сейчас, как вы знаете в копилку моих проектов добавился LibRATAG, как ни странно, снискавший популярность в определенных кругах. Программка засветилась и на Либрусеке и, чтобы упростить обновления, я решил все ссылки собрать на свой укозовский сайт. Крайне неосмотрительно, как оказалось. Заинтересовавшихся прошу под кат.

спустя пару неделек после сведения всех ссылок ко мне на ресурс — приходит сообщение от администрации на почту.

«Добрый день, Максим. Мы заметили, что на одном из ваших ресурсов (gs.ucoz.org) заметно возросла активность. Поздравляем вас и предлагаем воспользоваться дополнительными услугами, в том числе платным хостингом. Прошу ответить независимо от вашего решения. С уважением, Анна».
Ну предлагают и предлагают — делов-то. Поговорил с техподдержкой. Просят около 30 баксов. Подумал — подумал и вежливо послал. И та-дам! Через несколько часов вместо главной страницы появляется следующее:

«Аккаунт заблокирован за Сокрытие обязательного рекламного баннера. Если вы являетесь владельцем данного сайта, вы можете связаться со службой поддержки uCoz через панель управления вашим сайтом, для выяснения обстоятельств.» (кстати, до сих пор висит).

Баннеров я не скрывал, если конечно я не страдаю провалами в памяти. После долгого разговора с ТП — выяснилось, что ребята считают меня однозначно виновным и просят оплатить штраф в размере… Да, да $30)) Смеялся долго, а потом не выдержал и послал менее вежливо. Деньги, конечно, не заплачены, сайт до сих пор не разблокирован и, честно говоря иметь дел с укозом да и вообще с бесплатным хостингом больше не хочется.

Сейчас я подыскиваю хороший платный хостинг и место, где можно прикупить домен в зоне .Org т.к. Домен зоны .Ru нет желания покупать из — за необходимости светить свои паспортные данные.

Интересно?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Никто ещё не голосовал. Воздержавшихся нет.

ссылка на оригинал статьи http://habrahabr.ru/post/170717/