• Подключение phpStorm tasks к Битрикс24
    0

    Спасибо! Теперь работать будет немного удобней.

  • Comment from a drafted post.
  • О взломе серверов FirstVDS
    +1
    Немало из наших клиентов обновляться не торопятся.


    Некоторые ваши клиенты очень хотели бы обновиться, но:

    От: Михаил К.
    Доброго дня.

    Я хочу обновить предустановленную ОС Ubuntu 14.04 до 16.04. К сожалению, стандартная процедура обновления через «do-release-upgrade» прерывается с сообщением о том, что нет записи в "/boot". Действительно, права доступа на папку 0000, и поменять их не удаётся. Как можно обновить ОС? Есть ли у вас где-то описание?

    От: Алексей А.
    Здравствуйте, обновление системы не рекомендуется на серверах OpenVZ. Это может привести к недоступности сервера и необходимости переустановки системы

    От: Михаил К.
    Возможные риски мне ясны. Как обновить ОС?

    От: Алексей А.
    Не подскажу вам по этому вопросу
  • Распознавание паспорта РФ на платформе Эльбрус. Часть 1
    +1
    Ну так автор же пишет, что оптимизация для Intel и ARM заняла несколько лет.
  • Httplug — абстрагирование от клиента HTTP для PHP
    0
    конечно же, это же PATCH. Он «патчит» ресурсы.


    Тут AaAAxzz, вероятно, прав. Сейчас curl-client не позволяет отправлять этим методом тело. Надо разбираться.
  • Httplug — абстрагирование от клиента HTTP для PHP
    0
    1,2. Можно спросить авторов тут.

    3. С чего бы ему прерываться?

    4. Любые неприватные члены класса фактически становятся частью контракта этого класса, со всеми вытекающими последствиями в виде необходимости контроля данных, обеспечения совместимости между версиями и прочим, что неизбежно приводит к усложнению кода. При том что необходимость наследования этого класса представляется крайне маловероятной, соотношение накладных расходов к полученной выгоде представляется не очень разумным.

    5. С чего Вы это взяли?

    6. Сходу ответить не готов. Можете написать сюда.
  • Httplug — абстрагирование от клиента HTTP для PHP
    0
    Guzzle — это реализация. Httplug — интерфейс. Надо объяснять разницу?

    И, к слову, написать решил не я. Но задумку считаю нужной.
  • Httplug — абстрагирование от клиента HTTP для PHP
    0
    какие то примеры реального применения есть этой абстрактной прослойки?

    Проект молодой, поэтому примеров пока мало. Но мы используем его внутри нашей компании. Сейчас есть штук пять самостоятельных пакетов, использующих Httplug. Возможно со временем выложим их на GitHub.

    вот я использую http://php.net/manual/ru/book.curl.php и мне хватает

    Всё зависит от того, чем Вы занимаетесь. Мне тоже долгое время хватало. Пока жизнь не столкнула с такой ситуацией, где хватать перестало. Помните Маяковского? Если звёзды зажигают, значит это кому-нибудь нужно? Так и тут, если несколько человек разработали такую библиотеку, значит они видят в ней потребность, значит для их задач просто cURL уже не хватает.

    по молодости тоже страдал этим — писал абстрактные прослойки и адаптеры. но сейчас осознал Истину.

    Вы уж извините, но уверенность в обладании истиной (и уже тем более с большой буквы) характерна как раз для молодости :-)
  • Httplug — абстрагирование от клиента HTTP для PHP
    0
    Это философский вопрос из разряда «А зачем нужны библиотеки»? Как правило для облегчения жизни программиста. Понятно, что всё то, что делает библиотека, можно написать самому. При этом кода будет меньше, чем в библиотеке, да и производительнее вполне может получиться. Но тут есть и оборотная сторона. Во-первых, использование библиотек повышает скорость разработки, что с каждым днём становится всё важнее. Во-вторых, как заметил один римский оратор, человеку свойственно ошибаться. Чем больше программист напишет кода, тем выше вероятность появления ошибки. Повторное использование кода — один из способов понижения этой вероятности.

    Ну и если вернуться к Httplug, то особенно начинаешь его ценить по мере усложнения проектов, с которыми работаешь. В начале заметки я уже описал некоторые проблемы, с которыми мы столкнулись. Кроме того, благодаря переводу части компонентов на Httplug, мы получили возможность легко, в одной точке приложения, добавлять нужную нам функциональность. Например журналировать запросы/ответы для отладки и профилирования. Более того, мы можем включать некоторые вещи только в тестовой конфигурации и отключать в боевой. Это очень удобно и бережёт много времени и сил.
  • Mandrill всё? Как я искал замену и нашел 2 прекрасные альтернативы Мандрилу
    +2
    Судя по тому, что Вы написали в заметке, правильная аналогия должна быть такая: «мне дали мопед покататься бесплатно, а теперь говорят, что если я хочу кататься и дальше, то надо платить. Негодяи!». Вот она — обратная сторона халявы. Многие начинают воспринимать её как своё право, а не как оказанную им любезность. Увы.
  • Замена PEAR на Composer
    0
    Ну так и я про то же.
  • Еще один удар по российскому сегменту Интернета
    –28
    «поленился, без оборудования, превентивно» — это очень распространённая проблема, называется «распи*дяйство». Штрафовать и лишать лицензий. А для этого жаловаться на провайдера в надзорные органы.
  • Еще один удар по российскому сегменту Интернета
    –24
    Ежедневно ищу с помощью поисковиков различную техническую информацию, приложения и многое другое. На блокировку натыкался всего пару раз. И я не могу достоверно утверждать, что ресурс не за что было блокировать. Т. е. с блокировкой я сталкиваюсь не чаще чем? скажем, с сайтом, хостинг которого не оплачен.
  • Еще один удар по российскому сегменту Интернета
    –28
    А у меня — нет. Может Ваш провайдер ленится нормально сделать блокировку?
  • Еще один удар по российскому сегменту Интернета
    –27
    Сколько людей — столько мнений.
  • Еще один удар по российскому сегменту Интернета
    –21
    ЖЖ читаю почти каждый день. Ни разу не попадал на его полную блокировку. Может дело в Вашем провайдере? Может он умеет только по IP блокировать?
  • Еще один удар по российскому сегменту Интернета
    –79
    Лично я ничего не собираюсь делать. Уже который год пугают цензурой, пишут что ещё вот-вот и Рунет умрёт и прочее, и прочее. Но, как обычный пользователь интернета, я до сих пор так и не почувствовал никаких негативных последствий. И даже как владелец нескольких доменов в зоне «.ru» ничего не заметил.

    В целом же направление мысли рабочей группы мне нравится. Интернет — важная составляющая многих процессов сегодняшней экономики. Поэтому обеспечение его бесперебойной работы и защита от саботажа — важнейшая стратегическая задача государства. Конечно же не обойдётся без косяков на этапе внедрения. Но без таких косяков не обходится ни один мало-мальски крупный проект, любой разработчик это скажет. Постепенно косяки исправят. Это нормальный процесс.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Я сейчас читаю Макконела «Совершеннй код». Я прекрасно понимаю, что качественный код выгоднее, чем, написанной кое-как. И я ни в коем случае не считаю, что решения, о которых мы спорим, написаны кое-как. Но если Вы можете написать лучше, сохранив простоту использования без значительного увеличения объёма кода — будьте добры, покажите пример. Только не надо общих слов, про передачу аргументов через конструктор. В заметке есть простой пример использования библиотеки. Перепишите этот пример так, как на Ваш взгляд, он должен выглядеть, по Вашим представлениям. Я всегда готов учиться и совершенствоваться.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Я с этим полностью согласен. Именно поэтому используются статические члены, а не функции с глобальными переменными. Именно поэтому предусмотрена альтернатива прямой работе с $_SERVER.

    Ещё хотелось бы вспомнить одну из притч Пути Тестивуса:

    Ученик спросил двух мастеров программистов:
    «Я не могу написать этот код без создания моков и нарушения инкапсуляции.
    Что мне делать?»
    Один мастер программист ответил:
    «Моки — это плохо, и ты никогда не должен нарушать инкапсуляцию.
    Перепиши код, чтобы можно было тестировать правильно.»
    Другой мастер ответил:
    «Моки — это хорошо, и тестирование важнее инкапсуляции.»
    Обескураженный ученик ушел за пивом. В местной пивной он встретил
    Величайшего мастера программиста посасывающего пивко с куриными крылышками.
    «Величайший мастер!» — сказал ученик, — «Я думал, что вы не пьете.
    И разве вы не вегетарианец?»
    Величайший мастер улыбнулся и ответил:
    «Иногда жажда лучше утоляется пивом, а голод — куриными крылышками».
    Ученик больше не был обескуражен.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    В мире, кроме крайностей, ещё существует многое между ними.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Спасибо, поправил.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    > Я не против процедурного программирования, но если уж выбирать его, то зачем создавать объекты?
    А тут объекты и не нужны. Просто не хочется создавать глобальные переменные вместо статических свойств как сейчас.

    >В РHP есть пространства имён, не нужно ничего «эмулировать».
    В PHP > 5.0, < 5.3 их нет. А нам приходится использовать библиотеку на хостингах где нет 5.3.

    > здесь невозможно использовать autoload, нужен require.
    Это почему же нельзя? Мы используем, там, где это надо. Все имена классов начинаются с «Botobor_». Сделать функцию автозагрузки элементарно.

    > запрашивать необходимые параметры в конструкторе
    Да пожалуйста! Если в конкретном проекте это имеет смысл — напишите обёртку, которая будет передавать в метод аргумент $req, и тогда метод не будет трогать $_SERVER. Но нам, бывает, приходится иметь дело с проектами, которые написаны не нами и по которым нет документации, а защитить форму надо «вот уже прям щас». Бывают проекты, где и фреймвока-то нет, просто набор скриптов. Разные, в общем, проекты бывают. И часто обработка $_SERVER — вполне допустимый компромисс между красотой решения и затратами на реализацию.

    > html нужно разбирать с помощью XML-парсера
    Кому нужно? :-) Нет, как расширение функциональности, в виде отдельного модуля, это конечно можно сделать. Я даже обязательно тикет такой открою. Но, как я уже писал выше, мы сталкиваемся с самыми разными проектами. И на многих из них, использование парсера будет напоминать забивание гвоздя под крючок для картины при помощи промышленного пневмомолота. Это конечно круто, высокотехнологично… но смысл?

    Знаете, я некоторое время назад, тоже был пуристом, как и Вы. Но в последнее время стал всё чаще задумываться и об экономической целесообразности.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Изначально всё хранилось в сессии, потом почему-то было переделано без сессий. Надо вспомнить, почему. Но вообще, как вариант, такую возможность надо добавить (https://github.com/mekras/botobor/issues/7)
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Смысл в том, что требуется передача определённых данных, таких как время создания страницы и параметров проверок.

    Если утечёт подпись и пойдёт спам, её легко сменить.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Я тут подумал, по сути, мета-данные, добавляемые Ботобором в форму, это и есть маркер против CSRF. Потому что они содержат время создания страницы (т. е. уникальное значение), подписанное при помощи неизвестного посетителю ключа.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Ничего не мешает. Чтобы не повторяться: habrahabr.ru/blogs/webdev/135209/#comment_4647294
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    > Никакой разницы нет, есть регистрация пользователей или нет — csrf нужен всегда.
    Не поясните зачем?
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    > Идея: REFERER может быть, может не быть. Основывать на этом защиту — создавать проблемы пользователю.

    Защита на этом не основывается. Это лишь одна из возможных проверок.

    > Поля приманки могут создать проблемы с автозаполнением — абсолютно легальные пользователи отсеются.

    Разработчик волен не использовать поля-приманки в формах, которые могут заполняться одним пользователем многократно, или в любых других по своему усмотрению.

    > несколько классов в одном файле
    Обычно мы так не делаем, но здесь это вполне сознательное решение. Причина — компактность и простота подключения к сайту.

    > статические методы
    Что не так со статическими методами? В данном случае они выполняют функцию эмуляции пространства имён.

    > обращение к глобальным переменным внутри класса
    Если речь идёт про обращение к $_SERVER в Botobor_Keeper::handleRequest, то это на усмотрение разработчика. Методу можно передать аргумент $req, и тогда он $_SERVER трогать не будет. Если у Вас есть идеи, как сделать лучше — буду рад услышать.

    > парсинг html регуляркой
    Ваши предложения?

    > настройки через массивы параметров.
    Где?
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    +2
    Любая защита всегда многослойна и неабсолютна. Неверно говорить, что защита работает или не работает, всегда надо уточнять о каких случаях идёт речь. Каждый слой защиты — дополнительная страховка от определённого набора случаев. Ограничение lifetime защищает от программ вроде Хрумера, но оно не спасёт от примитивных пауков, работающих по принципу «нашёл форму — засабмитил». Зато от них спасёт ограничение Delay, которое, в свою очередь, не спасает от для Хрумера. И т. д.

    Защита от CSRF — ещё один слой, который может быть, а может и не быть. Например, зачем защита от CSRF на сайте, где нет регистрации пользователей?
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    Разные проекты, разные задачи — разный набор проверок и параметров этих проверок.
    Если это форма комментария — можно установить большой lifetime, или вообще отключить проверку.
    Если это форма запроса звонка, расположенная на отдельной странице — можно установить lifetime поменьше.
    Никто разработчика не заставляет использовать все проверки со значениями по умолчанию.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    –1
    Удобнее тем, что задавать в секундах никогда надобности не возникает, а вот в минутах были случаи. Собственно, по умолчанию, там как раз (если не ошибаюсь) 30 минут стоит. По опыту, подходит для большинства случаев. Пока менять в большую сторону приходилось только на паре проектов.

    DateInterval появился только в PHP 5.3, а нам надо было обеспечить работу библиотеки и под более ранними версиями 5-й ветки.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    –6
    Логично. Потому что Delay никогда не бывает больше минуты, а Lifetime, наоборот — не бывает меньше. Ну и задавать его в минутах просто удобнее для конечного разработчика.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    0
    По большому счёту библиотека и рассчитана на типовые решения, она позволяет быстро и просто защитить формы от роботов. Если у вас крупный проект, к тому же лакомый для спамеров, конечно, стоит подумать об индивидуальной и более сложной защите. А вот для сайтов, где пяток форм, вроде «обратной связи», Ботобора вполне хватит.
  • Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
    +1
    Как я и написал, разработчик может сам выбрать какие проверки уместны, в зависимости от условий стоящей пред ним задачи. Конкретно проверка на большой промежуток предназначена для того, чтобы нельзя было сохранить форму с её мета-данными и использовать её в будущем (через день, два, десять…).
  • X Neural Switcher — Поваренная книга
    0
    Благодарствую.
  • X Neural Switcher — Поваренная книга
    0
    А может кто знает программулину, которая умеет только конвертировать введённый текст по горячей клавише и ничего больше?
  • Пространства имён + PHPUnit = 100% покрытие тестами
    0
    Я не вижу в этом ничего страшного, если писать тесты с умом и не м́очить все функции подряд.
  • Пространства имён + PHPUnit = 100% покрытие тестами
    0
    Почему? Вспомогательный класс не является частью тестируемой системы. Фактически это дополнение к классам PHPUnit.
  • Пространства имён + PHPUnit = 100% покрытие тестами
    0
    Я обычно выношу все подобные моки в отдельный файл (как helpers.php в примере), который подключается всеми заинтересованными тестами. Ну и внутри моков функций используется более сложная логика, покрывающая все потребности тестов. Тут уже всё зависит от сложности тестирования. Можно сделать класс со статическими членами, который будет и возвращать значения для моков функций, и вбрасывать исключения, и хранить историю вызовов. Всё ограничивается только фантазией программиста.
  • Runkit + PHPUnit = 100% покрытие тестами
    +1
    Хочу поделиться своим способом: habrahabr.ru/blogs/php/124933/