<rmcreative>

RSS
  1. Yii 2.0.5 (исправление безопасности)

    11 июля

    Вышел Yii 2.0.5 исправляющий проблему с безопасностью, найденную в классе yii\web\ViewAction. Настоятельно рекомендуется обновиться. Обновление полностью совместимо с 2.0.4, содержит только исправление безопасности и не поломает ваш код.

    Уязвимость в ViewAction и заключается в возможности запускать любой PHP файл (или файл с расширением .php) на диске передав относительный путь через параметр view. Так как о проблеме сообщили через публичный трекер, мы исправили её и выпустили обновление немедленно.

    Для этой уязвимости мы зарезервировали номер CVE-2015-5467.

    9 комментариев
  2. Sitemap

    10 июля

    Как-то давно я написал класс для генерации sitemap.xml. В конце прошлого месяца выяснилось, что его используют. Я привёл код в человеческий вид и выложил на GitHub в виде пакета для Composer.

    Через неделю понадобилось реализовать генерацию sitemap в stay.com. Так как данных там много, свой простенький класс не устроил. Монстрами пользоваться тоже не хотелось. Переписал.

    Итак, пакет samdark/sitemap умеет:

    • Создавать файлы sitemap.
    • Создавать индексный файл (да, sitemap может быть несколько).
    • Автоматически создавать новый файл, если достигнут лимит в 50000 URL (согласно спецификации).
    • Эффективно работает с памятью. Кушает по минимуму даже на огромных объёмах данных.

    Пользуйтесь

    5 комментариев
  3. Конкурс Stash

    8 июля

    Совсем забыл написать про конкурс на gostash.ru. О нём, по просьбе автора проекта, я уже писал на хабре. Теперь пишу и тут.

    Опубликуйте код размером до 18 строк без учёта комментариев и переносов. Это может быть быстрый алгоритм, интересное решение, отличный трюк — всё, что может заинтересовать сообщество.

    Призы за первые три места — лицензии на самые лучшие IDE JetBrains, которые компания любезно предоставила. Шанс поучаствовать ещё есть. Итоги будут подводиться 13 июля в 11:00 по московскому времени.

    Участвуйте

    1 комментарий
  4. Пятиминутка PHP, выпуск 9

    30 июня

    Записался в подкасте «Пятиминутка PHP». Получилось не 5 минут, а пол часа. Говорили про php-fig, Yii и другие интересные штуки.

    Послушать можно на сайте проекта.

    17 комментариев
  5. Прячем флаги в замыкания

    23 июня

    window.addEventListener('click', function () {
        var i = 0;
        return function () {
            window.alert('You\'ve clicked it ' + (++i) + ' time(s).');
        };
    }());

    Благодаря замыканиям JavaScript позволяет не выносить флаги за функцию-обработчик и тем самым не засорять области видимости уровнями выше.

    Выполнить данный кусочек кода можно в консоли любого браузера. Для демонстрации щёлкайте по любому месту открытой страницы.

    Кстати, я выкладываю этот и другие интересные кусочки кода на gostash.ru

    2 комментария
  6. Вызвать private метод класса в PHP без Reflection

    10 июня

    В комментариях к заметке о вызове private метода через Reflection Roman верно подметил, что можно использовать вместо Reflection анонимные функции. Вот только его вариант работает с PHP7.

    Оказывается, можно проделать такое чуть иначе и в PHP 5.4:

    class PrivacyViolator
    {
        private $caller;
     
        function __construct()
        {
            $this->caller = function ($method, $args) {
                return call_user_func_array([$this, $method], $args);
            };
        }
     
        function callPrivateMethod($object, $method, $args)
        {
            $this->caller->bindTo($object, $object);
            return $this->caller($method, $args);
        }
    }
     
    $myObject = new MyClass();
    $privacyViolator = new PrivacyViolator();
    $privacyViolator->callPrivateMethod($myObject, 'hello', ['world']);
    13 комментариев
  7. Видео с DevConf 2014: собачники против

    27 мая

    В этом году я на DevConf, к сожалению, не попадаю, но организаторы порадовали видео с прошлого раза.

    Доклад рассказывали сразу три человека: Иван Матвеев, Григорий Кочанов и я. Тема холиварная, про оператор @.

    Посмотреть можно на сайте DevConf

    2 комментария
  8. Копируем в буфер обмена без Flash

    26 мая

    Trello уже довольно продолжительное время позволяет нажать CTRL + C при наведённом на карточку курсоре мыши и получить в буфер обмена ссылку на эту карточку. Удобно, но вроде ничего необычного, я такое уже делал в Stay.com при помощи Flash.

    Trello не использует Flash и это заметили пользователи StackOverflow. Через какое-то время подтянулся автор кода и рассказал, как это работает.

    На самом деле с буфером обмена Trello не работает. При нажатии CTRL текст пишется в создаваемый <textarea> и туда ставится фокус. То есть когда мы нажимаем C текст копируется. Когда CTRL отпускается, <textarea> скрывается.

    Код приведён там же в вопросе на StackOverflow.

    11 комментариев
  9. Вызвать private метод класса в PHP

    25 мая

    Бывает, не хочется портить API ради тестирования, но нужно как-то добраться до private метода. Сделать это можно вот так:

    function callPrivateMethod($object, $method, $args)
    {
        $classReflection = new \ReflectionClass(get_class($object));
        $methodReflection = $classReflection->getMethod($method);
        $methodReflection->setAccessible(true);
        $result = $methodReflection->invokeArgs($object, $args);
        $methodReflection->setAccessible(false);
        return $result;
    }
     
    $myObject = new MyClass();
    callPrivateMethod($myObject, 'hello', ['world']);

    UPD: вариант без Reflection

    13 комментариев
  10. Highload++ Junior 2015, отчёт

    24 мая

    Вернулся из Москвы с конференции по нагрузкам, прошедшей в рамках РИТ++. Свой доклад, слайды которого можно полистать стрелочками на http://slides.rmcreative.ru/2015/horizontal-scaling-highload/, рассказал в первый день с самого утра. Получилось хорошо. Вопросы и обсуждения не прекращались все два дня.

    Видео писалось, но в каком виде и когда оно будет доступно я не знаю. Спрашивайте у организаторов.

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

    2 комментария