Val Petruchek

подписывайтесь, а то хуже будет!  

ПОДПИСЫВАЙТЕСЬ НА RSS

Функция, возвращающая N случайных элементов из потока неизвестной длины

12.03.07 @ 07:00 — Problems, Programming

Усложняем задачу о выборе случайного элемента из потока неизвестной длины:

Есть некий поток элементов. Вызывая снова и снова функцию getnext(), вы получаете каждый раз следующий элемент из потока, и так до тех пор, пока функция не вернет EOF, что означает, что поток закончился. Гарантировано, что все элементы, полученные таким образом, будут отличаться друг от друга. Вернуться к началу потока, или получать элементы в каком-то другом порядке, кроме как один за другим с помощью getnext(), невозможно.

Известно, что поток когда-нибудь кончается, но заранее про количество элементов ничего не известно.

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

Функция должна использовать n+O(1) памяти (n — количество элементов, возвращаемых функцией).

У этих задач существует практическое применение: потоком неизвестной длины может служить файл, элементами потока — его части (строки в случае текстового файла). Данная задача заключается в выборе N случайных строк из файла за одно прохождение без хранения в памяти всех строк.

Решение: (more…)

Почему WordPress — гавно. Часть третья

В WordPress существует два места, где можно редактировать настройки комментариев: на странице редактирования самой записи (локальные настройки) и на странице настроек (глобальные настройки).

При этом эти настройки практически не зависят друг от друга: глобальная настройка будет выставлена в качестве значения локальной настройки по умолчанию для каждой новой записи. Чувствуете, где подвох? Изменение глобальной настройки не влечёт за собой изменение локальных настроек у уже написанных записей.

То есть если вы написали 100 записей с включенными комментариями и решили их отключить для этих записей, то вам надо вручную поменять соответствующую локальную настройку для этих записей. Для отключения комментариев у ненаписанных записей, надо поменять глобальную настройку. На этом, кстати, накололся Мицгол: он отключил трекбеки к новым записям, но не сообразил отключить их для единственной записи, ставшей для его standalone блога последней.

Наверняка есть костыли к WordPress, которые позволяют совершать групповые операции над записями: включать/отключать комментарии, например. Но эти костыли не отменяют design flaw.

Решить эту проблему очень просто: локальные настройки должны позволять выставить себя в Default. Т.е. позволять не указывать значение настроек явно, а установить его в такое же, как на всём сайте. В случае с комментариями локальные настройки должны иметь такое множество значений: {Allowed, Disabled, Default}.

И всё.

  
Реклама::

 
Реклама::