• Поскажите хорший курс по алгоритмам?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Задачки разных уровней сложности можно порешать вот тут
    https://www.codewars.com/
    Есть элемент геймофикации, в случае правильного решения можно посмотреть другие, более удачные
    Что забавно, два раза на собеседованиях встречал задачи именно оттуда, хотя прорешивал их просто ради развлечения
    Ответ написан
    Комментировать
  • Как настроить git на проверку var_dump в коде перед коммитом?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    1) Подключить phpcs для проверки code style (конкретно настроить https://github.com/squizlabs/PHP_CodeSniffer/wiki/... секция Generic.PHP.ForbiddenFunctions)
    2) Автоматизировать проверку на стороне гита - precommit hook (например https://habr.com/post/111977/ тут пример)
    3) В идеале если разработчик не один - то в процесс CI тоже добавить запуск этой таски phpcs (например, в Jenkins).

    Так как локально кто-то может и не настроить хук, а удаленный билд хочешь-не хочешь, а проверит.

    Т.е оптимальный вариант такой
    1) добавить phpcs в composer
    2) написать нужный ruleset (в вашем случае - с указанием genericphpforbiddenfunctions)
    3) добавить в сборщик (напимер phing) таску на запуск phpcs с конфигами нужного ruleset
    4) добавить локально хук на запуск phing phpcs
    5) добавить запуск phing phpcs в билд дженкинса
    Ответ написан
    Комментировать
  • Как правильно в PHP передать массив в таблицу HTML?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Эм. Типа такого?
    <?php $array = range(1, 10);?>
    <table>
    <?php foreach($array as $number) :?>
    	<tr>
    		<td><?= $number ?></td>
    		<td><?= $number * 2 ?></td>
    	</tr>
    <?php endforeach; ?>
    </table>
    Ответ написан
    1 комментарий
  • PHP+AJAX+BD как выбрать таблицу?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Ну тут все совсем просто:
    1) на фронте добавить setInterval(someFunction, 15000)
    2) написать на фронте функцию someFunction, которая делает ajax запрос на сервер (судя по вопросу - это будет просто php файл, допустим getData.php
    3) в getData.php написать код
    1. установить подключение к базе
    2. выполнить запрос SELECT * FROM my_table where id='1'
    3. получить массив $data
    4. header('Content-Type: application/json');
    5. echo json_encode($data);

    4) в функции someFunction получить ответ с сервера в JSON формате и записать данные из массива в таблицу

    P.S но вообще говоря такой подход был бы актуальным лет 7 назад, сейчас бэк так лучше не делать, сами собой напрашиваются нормальный роутинг, сериализация данных, ORM над базой и тд и тп. Описанное решение - очень базовое и "в лоб"
    Ответ написан
    Комментировать
  • Yii2 Как правильно реализовать pjax всего сайта?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    В первую очередь при возникновении такого вопроса стоит поинтересоваться - а зачем это вообще делать?

    Но оставим этот вопрос висеть в воздухе, ответим на заданные.

    Скажите, есть ли смысл запихивать весть сайт в pjax?Используют ли вообще так pjax или он больше для других целей?


    Конкретно в pjax - нет. Yiiшный pjax это инструмент для оборачивания одного виджета для обеспечения его работы по ajax. Это даже по полному имени класса заметно - yii\widgets\Pjax Т.е чтобы весь сайт работал через pjax - нужно извратиться и сделать его весь - одним виджетом, пусть и со встроенными в него другими. Роутинг такого виджета станет вашим начным кошмаром, потому что стоковый Yiiшный к такому не готов - да и не должен

    где его нужно вставлять, чтобы было правильно и как лучше это делать с использованием такого шаблона?

    Если вам ехать, а не шашечки, то чтобы сделать Single page application используйте технологию для этого подходящую. React, Angular, Vue - весь мир современного фронтенда к вашим услугам. Да, не получится сделать это штатными средствами Yii, и не прокачаетесь в Pjax, но зато получите опыт написания Api на Yii (с которым будет работать SPA) и полноценного фронтенда.
    Ответ написан
    3 комментария
  • Нужно ли учить Symfony, после Laravel?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    hovdev, ну тут на самом деле в постановке вопроса основной интерес.

    нужно ли знать Symfony для Senior PHP Developer если ты знаешь Laravel ?


    Дело, конечно, барское, как себя ограничивать в знаниях и компетенциях и делать ли это вообще.

    Кто-то останавливается на знании wordpress и wp api, но при этом считает себя senior wordpress developer, потому что может на wp любой сайт сделать в рамках конкретной фирмы.
    Кто-то учит один фреймворк от и до, принимая его практики как единственно верные, и считает себя senior {{ framework_name }} developer. Например, на yii на просторах СНГ таких людей много.
    Кто-то изучает несколько фреймворков, и конкретизации в умениях становится меньше, выбор подходящих инструментов и практик более осознанным и широким
    А в какой-то момент приходит понимание, что фреймворки - это просто инструменты, и можно выбрать и использовать оптимальный для задачи. Или фреймворк на самом деле даже и не нужен, и достаточно взять несколько библиотек, или микрофреймворк. Или просто написать свою библиотеку под задачу.
    А после этого приходит осознание, что в общем-то можно и не быть PHP Developer, а скорее Backend developer, потому что в сферу компетенций на самом деле входят задачи решаемые не фреймворками и PHP, а просто сервером. Где-то нужно на python что-то заскриптовать, где-то на lua модуль для nginx прилепить, где-то оптимизировать узкое место на go - и тд. Решать любые возникающие задачи одним Laravel-ем уже не получится.

    Если посмотреть, например, чем занимаются PHPшные монстры типа Badoo - то там о фреймворках вообще ни слова

    Поэтому,
    нужно ли знать Symfony для Senior PHP Developer
    - конечно не нужно, Сеньором в зависимости от фирмы можно быть даже делая сайты на Bitrix, и получать за это вполне себе хорошие деньги. Но действительно отличный разработчик должен иметь более широкий кругозор, разнообразный инструментарий и - главное - желание знать и уметь больше, чем просто один инструмент.
    Ответ написан
    1 комментарий
  • Get_browser. Как определить с телефона или пк?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    get_browser выдает только информацию о юзер агенте, но правильно её интерпретировать - задача разработчика. Можно написать обработку самому (если есть страсть к велосипедостроению), можно использовать готовую библиотеку вроде https://github.com/serbanghita/Mobile-Detect/ предложенную Sergiu Mitu выше, либо любую из оберток подходящих под твою CMS/Framework
    Искать подходящие обертки тут

    Выглядеть в случае с MobileDetect будет так:

    $detect = new \Detection\MobileDetect;
    $isMobile = $detect->isMobile();
    Ответ написан
    Комментировать
  • Symfony как вызвать метод репозитория или контроллера в twig?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Не нужно давать шаблону доступ к базе. Если хочется сделать что-то подобное - используйте Twig extension
    https://twig.symfony.com/doc/2.x/advanced.html#id2
    https://symfony.com/doc/current/templating/twig_ex...
    Создаете класс extension, добавляете нужные зависимости (репозиторий и тд), регистрируете функцию/глобальную переменную, сам экстеншн в кофигах.
    И после уже используйте в любых шаблонах глобальную переменную/функцию, которые уже сами под капотом получат данные откуда укажете
    Ответ написан
    2 комментария
  • Как спарсить все точки с google карты на сайте padi.com?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Не вижу особых препятствий:

    Eсть URL
    POST https://apps.padi.com/scuba-diving/dive-shop-locator/Dsl/GetDiveShops


    Принимает json параметры
    cLat:33.638802
    cLong:-117.603366
    courseIds:""
    distanceMeters:1000000
    eLng:-117.1913786953125
    levelIds:"3,2"
    mapSize:"smaller"
    nLat:33.99591887201719
    offeringIds:""
    sLat:33.280197932608054
    searchString:""
    specialtyId:-1
    storeNumber:-1
    wLng:-118.0153533046875

    Нужно провести ревес инженириг (читай, потестить с разными параметрами) на что влияют Lang/Lng/Lat параметры, и написать просто цикл запросов который бы для всех участков карты запросил с сервера результаты.
    В тестах поможет ответ - там как раз границы указаны. (массив SearchRecords - результаты поиска, Bounds - границы участка поиска)
    По сути задача
    1) понять какие входные параметры запроса возвращают какой участок карты в Bounds)
    2) подобрать массив входных параметров чтобы перебрать все участки карты последовательно
    3) запустить цикл и спарсить ответы из SearchRecords в одно хранилище
    4) убрать дубликаты
    5) преобразовать в желаемый формат (csv для excel)
    Ответ написан
    7 комментариев
  • Что почитать про безопасность?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Если интересует вопрос безопасности веб приложений и конкретно PHP стека - см. вопрос Примеры Back-door в php скриптах?
    Ответ написан
    Комментировать
  • Примеры Back-door в php скриптах?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Да ну в общем-то PHP ничем принципиально не отличается от любого другого стека, и уязвимости которые можно эксплуатировать ровно те же самые.

    Адекватный список которым можно руководствоваться - OWASP Top 10

    Конкретно 5 из 10 про PHP с примерами кода и методами защиты PHP Top 5

    Данные по ссылкам не вот прям совсем свежие, но актуальности не теряют
    Ответ написан
    Комментировать
  • Как изучить язык баз данных SQL?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Книги это, конечно, здорово, но как показывает практика, большинство книги либо забрасывает, либо просто читает и не особо новые знания впитывает. (если речь о начинающих разработчиках, которые прям с нуля начинают книгу читать)

    А самый логичный способ что-то изучить - это практика, практика и еще раз практика. Если нет реального проекта с реальными проблемами - рекомендовал бы пару ресурсов: sql-ex и pgexercises, там можно поработать как с совсем простыми и примитивными запросами, так и с гораздо более сложными.

    Ну а овладев азами можно уже и книгу брать, чтобы закрыть пробелы, либо документацию по конкретной СУБД
    Ответ написан
    3 комментария
  • Как подключить PhpWord (Class 'PHPWord' not found)?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Ну так надо же использовать/импортировать класс \PhpOffice\PhpWord\PhpWord?

    require_once 'vendor/autoload.php';
    $phpWord = new \PhpOffice\PhpWord\PhpWord();


    или

    require_once 'vendor/autoload.php';
    use PhpOffice\PhpWord\PhpWord;
    
    $phpWord = new PhpWord();
    Ответ написан
  • Как наиболее удобно генерировать сложные PDF документы в PHP(laravel)?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Вообще генерировать HTML и рендерить в pdf это как раз самый распространенный путь, и он вполне себе ок. Шрифты будут ехать, стили тоже, все через боль и проверки :) У кого-то больше косяков и только примитивные теги, кто-то +/- все умеет.

    Если PDF файлы большие, есть какие-то хитрые CSS - то имеет смысл посмотреть на wkhtmltopdf.

    Как раз был легаси проект, генерация PDF с таблицами на 30-50 страниц, и также страницы с текстом и изображениями + трансформациями, использовал изначально какую-то PHPшную либу.
    День генерации отчетов был испытанием для всего сервака, документы генерировались мучительно долго, с ошибками (2-3 минуты на большой отчет). Когда мигрировал проверял 4-5 реализаций, 4 на phpшных либах разной степени древности, и вариант с wkhtmltopdf (C-шная консольная тулза). С wkhtmltopdf получил точный вариант по рендеру + 20тикратный выигрыш по скорости и какой-то по памяти (уже не помню сколько)

    В целом если генерировать небольшие документы, либо без хитрых css - то можно phpшные библиотеки поискать, не раздувая стек, тот же fpdf.
    Но в случае чего-то большого - рекомендовал бы wkhtmltopdf + сгенерированный html на вход и вызов его консольной части через exec
    Ответ написан
  • Оповещение что на веб страничке что то поменялось(поехало)?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Решение подобной задачи подробно изложено в статье
    Либо, к примеру, так
    Ответ написан
    Комментировать
  • Почему не работает php из brew?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Вообще ручками настраивать Apache+PHP на маке идея не самая удачная. Рекомендую собрать сетап на Vagrant (там можно без малейшей адаптации в привычном стиле собрать все пакеты ручками в привычном линуксе, и пробросить наружу только интересующие порты и синхронизировать папку с кодом). Либо пойти дальше и сделать сетап на докере. Бонусом - прокачка скиллов, инкапсуляция окружения и унификация для всех разработчиков (если их больше одного. Хотя одному тоже так удобнее)

    Родной Apache под маком больше мешается, чем пользы приносит, особенно если проектов больше чем 1 :)

    Для переключений версий php через brew можно использовать https://github.com/philcook/brew-php-switcher

    Для минорных версий вроде 7.1.16->7.1.20 он конечно не подойдет, но такие вещи лучше держать в контейнере/виртуалке, а для базовых (типа запуска composer/phpcs/etc) - в самый раз. Бонусом по дефолту (не самым приятным, как по мне) эта тулза перезагружает локальный apache с указанной версией PHP
    Ответ написан
    Комментировать
  • Как быстрее/правильнее загружать данные?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Пара кейсов, после которых идея "передать на фронт и фильтровать там" перестает казаться такой хорошей

    1) Прилетел массив на 10 000 элементов. Клиент зашел с Samsung galaxy S2 , попробовал загрузить/фильтрануть, посмотрел, как завис браузер, и ушел. Не забывайте, что не все пользователи сидят с десктопов как у разработчиков с 16-32Gb оперативы. Мобилка может поперхнуться банально из-за большого json-а

    2) Как только потребуется сделать паджинацию - фильтрация на фронте станет выдавать неожиданно некорректные данные

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

    Я верю, что можно сделать выдачу и фильтрацию чисто на фронте с любым количеством элементов, если команда состоит из сплошных ниндзя и рокстаров, но практика в 3 подобные ситуации показывает, что в итоге эту фильтрацию придется переписывать как минимум на гибридную (и поддерживать 2 решения, на фронте для малого количества записей, и на бэке для большого), либо полностью на сервер сайд, так как к сожалению команда никогда не состоит из идеальных разработчиков, чаще из обычных живых людей
    Ответ написан
    2 комментария
  • На каком движке лучше сделать справочник по API?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    https://swagger.io/
    В принципе стандартом сейчас считается он
    Описывается api по OpenAPI стандарту, а дальше можно его скармливать любым инструментам, или писать обвязку самим - по настроению.
    Вот в недавней статье API Яндекс.Кассы использовали это
    Ответ написан
    Комментировать
  • Какую программу веб-сервер для локальной разработки вы используете на MacOS High Sierra?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Раньше использовал Vagrant + PuPHPet для генерации конфигов, пока не особо понимал, как оно работает.

    Следующим шагом был отказ от PuPHPet в сторону собственноручно написанных Vagrantfile для проектов. (что логично - хоть сколько-нибудь сложный проект как ни крути потребует какой-то доработки напильником)

    Сейчас окончательно ушел от Vagrant в сторону Docker,

    Плюсы этих инструментов - у любого человека в команде абсолютно одинаковое локальное окружение (с которым можно работать еще и под любой OS). Докер еще и на продакшн сервер можно деплоить, тогда продакшн и локалка отличаться не будут также. И опять же систему не засорять мусором под каждый проект - все ставится в контейнеры/виртуалку.

    Всякие MAMP/Open Server/ Denwer желательно насильно себе отключать и разбираться, как работает наш стек на самом деле, без сокрытия реализации. Это сложнее, но если есть желание расти - даст куда больше пользы, чем проблем.
    Ответ написан
    Комментировать
  • Yii2 вывод информации из БД?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    В контроллере

    return $this->render('view', [
        'about' => About::find()->where(['>=', 'id', 1])->limit(6)->all(); // <= where другой
    ]);


    В модели надо вообще удалить функцию About, так как она может быть вызвана как конструктор в более старых версиях PHP. К тому же
    'id' >= '1'
    все равно не отработает, так как оно вычисляется как true, а не используется для фитрации в запросе

    В виде в $about будет массив, так как в контроллере ищется именно массив через ->all();

    Дока
    Ответ написан