Не измерял, но опыт подсказывает, что реализация на php, практически всегда медленнее чем сторонним модулем к php. Просто иногда дешевле и проще проиграть в скорости разбора документа (один раз), чем потратить памяти и времени на создание, разбор и уничтожение более быстрого в разборе класса.
/User/id (тоже самое что и классическое {n}.User.id)
/User[2]/name (выберет поле name для второй записи user)
/User[id>2] (выберет всех User с id больше 2)
/User[id>2][<5] (выберет всех User с id больше 2, но меньше 5)
/Post/Comment[author_name=john]/../name (Выберет название записей Post, у которых есть хотя бы одна запись Comment со значением поля author_name равным john)
/Posts[name] (Выберет все записи Post имеющие поле name)
/Comment/.[1] (Содержимое первой записи Comment)
/Comment/.[:last] (Последняя запись)
/Comment/.[:first] (Первая запись)
/Comment[text=/cakephp/i] (Все записи у которых поле text соответсвует regex /cakephp/i)
/Comment/@* (Получить все поля для всех записей)
Кстати, что бы не использовать такой большой код для простых вещей, можно использовать
Set::classicExtract, который является старым кодом функции extract
Кстати стоит отметить, Set::extract гораздо мощнее чем даже описано.
С недавних пор его набор параметров поменялся (где-то 1.2 RC или чуть раньше), теперь они выглядят как
Set::extract($path, $data, $options)
Параметр $options — не является обязательным и в знает только один параметр 'flatten' который по умолчанию активен и редко когда изменяется
Самое интересное что теперь в качестве $path можно использовать выражения XPath, далеко не все конечно, но частично поддержка имеется. Примеры из исходного кода:
Раздупляется посредством фаерволла, при массовом использовании все, всё и так знают. Антифлуд можно и так поставить.
Айпибинд тоже самое.
Тема флеша не раскрыта, не считая того, что не везде можно впихнуть мувик.
Некоторые страны целиком работают с одного ip.
Часто пропадающий интернет может заставить авторизоваться чаще чем раз в 15 минут.
Добавив еще подобной фигни вы снизите желание отвечать на вашем «ресе» очень сильно.
Хотя главная концепция, что бы юзер не геммороился с каптчами — абсолютно верна и это главное.
Перенести бы это в местный блог CakePHP (http://habrahabr.ru/blogs/cakephp/)
Если мне не изменяет память, Сфинкс требует отдельной таблицы для поиска, со сквозной нумерацией, было бы великолепно если бы этот Behavior умел бы еще данные для нее подготавливать.
Они находят способ залезть ниже, их декомпилируют, узнают этот способ, обходят.
У ребят появляется интерес узнать как залезть еще глубже.
Далее цикл повторяется еще много раз.
Хочется, знаете, отсутствия таких несанкционированных возможностей, но такое придумать гораздо проще, реализовать сложнее, а денег с этого нет.
В таком случае разница 21 день, русские начинают праздновать 25 декабря, а заканчивают в лучшем случае 14-го января ... Не исключен случай нового года, плавно перетекающего в девятое мая.
Но хотел я сказать что HTML это и есть тот самый популярный DTD и остальные будут либо как-то подстраиваться под поисковики либо забивать на это.
Да?
/User/id (тоже самое что и классическое {n}.User.id)
/User[2]/name (выберет поле name для второй записи user)
/User[id>2] (выберет всех User с id больше 2)
/User[id>2][<5] (выберет всех User с id больше 2, но меньше 5)
/Post/Comment[author_name=john]/../name (Выберет название записей Post, у которых есть хотя бы одна запись Comment со значением поля author_name равным john)
/Posts[name] (Выберет все записи Post имеющие поле name)
/Comment/.[1] (Содержимое первой записи Comment)
/Comment/.[:last] (Последняя запись)
/Comment/.[:first] (Первая запись)
/Comment[text=/cakephp/i] (Все записи у которых поле text соответсвует regex /cakephp/i)
/Comment/@* (Получить все поля для всех записей)
Кстати, что бы не использовать такой большой код для простых вещей, можно использовать
Set::classicExtract, который является старым кодом функции extract
С недавних пор его набор параметров поменялся (где-то 1.2 RC или чуть раньше), теперь они выглядят как
Set::extract($path, $data, $options)
Параметр $options — не является обязательным и в знает только один параметр 'flatten' который по умолчанию активен и редко когда изменяется
Самое интересное что теперь в качестве $path можно использовать выражения XPath, далеко не все конечно, но частично поддержка имеется. Примеры из исходного кода:
Айпибинд тоже самое.
Тема флеша не раскрыта, не считая того, что не везде можно впихнуть мувик.
Некоторые страны целиком работают с одного ip.
Часто пропадающий интернет может заставить авторизоваться чаще чем раз в 15 минут.
Добавив еще подобной фигни вы снизите желание отвечать на вашем «ресе» очень сильно.
Хотя главная концепция, что бы юзер не геммороился с каптчами — абсолютно верна и это главное.
их софт жалуется что за него не заплатили?
Если мне не изменяет память, Сфинкс требует отдельной таблицы для поиска, со сквозной нумерацией, было бы великолепно если бы этот Behavior умел бы еще данные для нее подготавливать.
Второй тоже не помешает на активные элементы добавить какую либо реакцию.
У ребят появляется интерес узнать как залезть еще глубже.
Далее цикл повторяется еще много раз.
Хочется, знаете, отсутствия таких несанкционированных возможностей, но такое придумать гораздо проще, реализовать сложнее, а денег с этого нет.
Предлагаю:
Хромовый для тех кому требуется прозвище и Хром, для тех кому не требуется :)
И пункт 10 я бы предложил перевести по другому:
"Следует помнить о том, что в России рождество наступает на 13 дней позже из-за разности Юлианского и Грегорианского календарей."
Не подстрочник, но более похоже по смыслу, а то получается что изза рождества у нас разница в 13 дней в календарях.