• С чего начинается CI?

    comm1x
    @comm1x
    Web-developer
    Для внедрения CI последовательность достаточно проста:
    1. VCS. Для начала внедрите git, не обязательно сложности с gitlab. Для 3 человек хватит и приватного репозитория на bitbucket.
    2. Приемочные тесты. Берем фреймворк для тестирования (я люблю Codeception, но их много и других), и напишите пару приемочных тестов на критические части (оплата, регистрация напр.).
    3. Юнит-тесты. Покройте юнит-тестами основные части проекта (для первой итерации хватит и 5-10% покрытия кода).
    4. Автоматизируем. Определяемся с CI, настраиваем ее, настраиваем хуки репозитория и уведомления о success/fail-билдах по почтам разработчиков.

    Коротко можно описать так: должен быть гит, и должны быть тесты.
    Теперь до непрерывного деплоя рукой подать. Скорее всего, когда вы до этого дойдете, вы уже будете примерно представлять как лучше организовать этот процесс, потому что здесь вариантов великое множество. Начиная от самописных деплой-скриптов и готовых deploy software типа Capistrano, заканчивая разверткой и подменой бэкендов и сменой docker-контейнеров.
    Ответ написан
    Комментировать
  • Почему не получается установить xubuntu с USB-флешки?

    comm1x
    @comm1x
    Web-developer
    Возможно флешка просто не загрузочная.
    Зачем вы форматируете в NTFS? По идеи записывающая программа (Unetbootin например) сами должны отформатировать в нужную ФС и установить загрузочные флаги.
    Ответ написан
  • Unixtime даты что не так?

    comm1x
    @comm1x
    Web-developer
    У вас выставлен Московский часовой пояс. Когда в Москве Новый Год 1970 года 00:00, в нулевом часом поясе еще 10800 секунд до этого момента, т.е.. 31 декабря 1969 года, 21:00. А когда в Москве 3 часа ночи, то в нулевом начинают праздновать и там равно 00:00.

    Соответственно php думает, что вы переводите из своего локального времени в абсолютное по нулевому часовому поясу и вычисляет эту разницу в часовых поясах.
    Ответ написан
    Комментировать
  • Как в папке найти файлы которые НЕ содержат текст?

    comm1x
    @comm1x
    Web-developer
    Можно попробовать так:
    $files = null;
    $status = null;
    exec('grep -rL "defined(\'_JEXEC\')" /path/to/directory', $files, $status);

    После чего в $files вы получите массив относительных путей до нужных файлов.
    Не забудьте проверить, что $status === 0 после выполнения, это означает, что команда выполнилась успешно.
    Свой путь вы можете вставить вместо /path/to/directory.
    Ответ написан
    4 комментария
  • Как получить ответ программы из консоли в переменную?

    comm1x
    @comm1x
    Web-developer
    Используйте функцию exec()
    У нее есть массив строк, которую выводит команда.

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

    ffmpeg ... 2>&1
    Ответ написан
    3 комментария
  • Как к Yii2 прикрутить phpdaemon?

    comm1x
    @comm1x
    Web-developer
    Статья о том, "Как подключить Yii к phpDaemon"
    Почти аналогично прикручивается Yii2, немножко нужно покопаться будет в методе onReady().
    Ответ написан
    Комментировать
  • Как отправлять PUSH для iOS из php?

    comm1x
    @comm1x
    Web-developer
    Самыми обычными сокетами. Выдержка из кода:
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err,
    	$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
    
    $payload = json_encode($body);
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
    fwrite($fp, $msg, strlen($msg));
    fclose($fp);


    Использовали этот гайд: www.raywenderlich.com/32960/apple-push-notificatio...
    Ответ написан
    Комментировать
  • Можете объяснить по каким параметрам выбирать комплектующие пк?

    comm1x
    @comm1x
    Web-developer
    Моя последовательность примерно такая. Как правило, выбирая ПК мы уже примерно знаем какие-то цифры в первом приближении. Например, сегодня собирая машину среднестатистический пользователь наверное будет рассчитывать на память в диапазоне 8-16 ГБ, допустим 16. Неплохо было бы оставить возможность для будущего апгрейда.

    С помощью таких прикидок нам нужно определиться с чипсетом материнской платы. Взять ее с запасом, не сделать пустых вложений. Если мы хотим 16ГБ памяти, то хорошо бы чтобы мать имела max memory capacity в два раза больше и оставались свободные слоты. Дальше постараться определиться с семейством сокетов CPU. Если бюджет позволяет Intel, если нет то можно и AMD. Определяемся с частотой памяти. Смотрим на цены, берем максимальную частоту с наиболее приемлемой ценой.
    Дальше уже переферия - видеокарта, ssd, hdd - там и так все понятно.
    Ответ написан
    4 комментария
  • Почему не обновляется composer-стикер stable-release на github?

    comm1x
    @comm1x Автор вопроса
    Web-developer
    Нужно было нажать Force Update в packagist-е.
    Ответ написан
    Комментировать
  • Как в php узнать размер Width Height swf файла запакованного в архив zip?

    comm1x
    @comm1x
    Web-developer
    Лучше не ломайте голову, решите это дело средствами операционной системы. Что-то типа:
    exec('unzip /www/storage/somefile.zip', $out, $status);
    // Анализируем $out и $status, если распаковалось корректно, то далее проверяем через file_info
    finfo_open(...)

    Fileinfo заранее нужно будет установить как расширение php либо опять же через exec()
    Больше здесь: https://php.net/manual/en/book.fileinfo.php

    Так вы убедитесь, что перед вами запакованный swf-файл. Размеры можно узнать через тот же imagemagick, вызывая его через exec().
    Про imagemagick: www.imagemagick.org
    Про phmagick (php wrapper for imagemagick): www.phmagick.org
    Ответ написан
    Комментировать
  • Phpstorm live templates для jquery?

    comm1x
    @comm1x
    Web-developer
    Не встречал, но разве долго их сделать? Вопрос 10 минут.
    Ответ написан
    Комментировать
  • Как оптимизировать класс PHP?

    comm1x
    @comm1x
    Web-developer
    Добавьте кеширование. В определенных случаях это сильно соптимизирует дело.
    protected $_aliasesCache = [];
    
    public function getAlias($method)
    {
    	if (! array_key_exists($method, $this->_aliasesCache)) {
    		$this->_aliasesCache[$method] = str_replace('_', '.', $method);
    	}
    
    	return $this->_aliasesCache[$method];
    }
    
    // Usage
    
    public function some_method()
    {
    	$this->getAlias(__FUNCTION__);
    }


    Еще можно поиграться со стеком вызовов, чтобы не передавать аргумент, но я бы лучше это дело оставил так. При определении имя метода через стек, не забудьте изменить модификатор на protected/private.
    Ответ написан
    2 комментария
  • В чем ошибка? Условие xpath

    comm1x
    @comm1x
    Web-developer
    Какие названия? И что значит - не может быть английского?

    Для Вашего варианта, лейблы:
    //*[@class="spaceit_pad"]/*[@class="dark_text"]
    И значения:
    //*[@class="spaceit_pad"]

    Вытащить значение найденной ноды из листа:
    DOMNodeList::item(0)->nodeValue;
    Ответ написан
    Комментировать