• Решил углубленно изучить PHP MySQL, Что еще добавить?

    back dev, к списку добавил бы еще использование какого-то фреймворка, вроде Laravel/Symfony. Чтобы не делать все совсем с нуля - так выше шанс как раз неправильному научиться, фреймворки худо-бедно навязывают некоторые практики.
    Но вообще в идеале найти ментора, который будет проглядывать освоенное и давать комментарии
  • Парсинг методов в классах, PHP?

    Александр, php.net/manual/ru/function.token-get-all.php , и искать последовательность токенов
    347 (public) 379 (1+n раз, пробел) 337 (function) 379 (1+n раз, пробле) 310 (тут будет имя функции как раз)
  • Стоит ли идти в институт ради фронтенда?

    На что-то полезное в прикладном плане в вузе рассчитывать не приходится, в основном трата времени на устаревшие технологии или на математику, которая вероятнее всего не пригодится. На очное поэтому не рекомендую, вот заочное/вечернее - однозначно да, так как профильный технический диплом очень сильно облегчит жизнь при переезде/устройстве за пределами родной страны, а в форме заочного не будет много времени отнимать.
    Лично я на 3м курсе ушел с очного на заочное, получил профильную вышку и уже дважды сменив страну жительства очень благодарил себя за полученный все же диплом.
    И - да, английский must have, чем раньше начнешь тем лучше
  • Как быстрее/правильнее загружать данные?

    Дмитрий Ларин, ну к такому сценарию могу рассказать один случай, который разгребали в декабре 2017го.

    Американская компания, личный кабинет, SPA веб-приложение на aurelia.js с бэком на laravel, которое является только первым звеном в цепочке нескольких микросервисов (вернее, распределенного по сети монолита, если уж быть честным в оценке реализованной архитектуре), в конце которого - сервисы .net приложения, источники данных. На этапе проектирования в 2015 году уже давно разогнанной командой подрядчиков было принято, что в разделе отчетов будет показываться не более 500 записей (обычно у пользователей было в районе 300, так что казалось солидным запасом), все фильтрации и сортировки на фронтенде. Решили условно, что если больше 500 - обрезают остальные и норм. Соответственно фильтры и сортировку сделали именно на фронте, хотя сервисы .net их поддерживали.

    Осенью 2017 завели баг - сортировка по имени не показывает первыми людей с буквы А, который назначили уже на нашу команду.

    Начали копать - вылезает эта история с обрезанием 500 первых записей с дефолтной сортировкой выдаваемой с бэкенда. А у пользователя при этом уже 300 000+ записей в месяц в этом отчете.

    И началось веселье, введите паджинацию для этих, сортируйте на бэке, почему так медленно работает (.net сервисы заказчика отдавали страницы при применении фильтрации по 17 минут на запрос), почему нельзя сортировать по этому полю (генерируется на лету на одном из микросервисов или .net забили на поддержку сортировки по полю)

    И как итог - сначала создание гибридного решения фильтрации/сортировки для случая 1 страницы (меньше 500 записей) на фронте и бэкендового долгого с кэшированием в промежуточную базу для остальных случаев, затем отказ от поддержки первого решения, потому что был рассинхрон функционала (.net сервисы не поддерживали часть фильтров, которые в UI пропадали для случаев бэкенд обработки), и как итог - просто отказ от работы с сервисами .net, полная выгрузка данных по этому функционалу в промежуточную базу данных, реализация механизма синхронизации и полноценная полностью бэкендовая фильтрация и сортировка силами приложения. Время ответа для самых жирных пользователей с 17 минут на запрос отфильтрованной отсортированной страницы сократилось до 0.1 секунды.

    В общем от предпосылки "максимум 400 элементов" лучше не исходить, и стараться складировать фильтрации и сортировки на той стороне, где генерируются/хранятся данные, иначе в будущем придется решать проблемы там, где их могло и не быть, или где они могли быть обнаружены заметно раньше.
  • Какую подключить систему миграций на свой самописный сайт?

    Когда пришел в контору, где сайт был самопиской и под словом "миграции" тамошние разработчики думали что это что-то про леммингов - я как раз Phinx подключил. Хороший инструмент, рекомендую
  • Angular + WordPress Rest Api ресурс для изучения?

    Вопрос напомнил ситуацию https://cs6.pikabu.ru/images/big_size_comm/2015-07... . В чем вообще заключается необходимость именно такой связки?
  • Как рефакторить файлы в пару тысяч строк?

    Ну если совсем нет идей - то надо начать с понимания основ процесса рефакторинга (Мартин Фаулер - Рефакторинг в помощь). А конкретных советов вы тут не получите - не видя исходного кода любой совет будет гаданием на кофейной гуще и абстракцией.
  • Yii2 вывод информации из БД?

    lipatkin ., Второй аргумент функции render - это массив, ключи из которого будут прокинуты в view как одноименные переменные.
    Т.е
    ['about' => About::find()->where(['>=', 'id', 1])->limit(6)->all();] // <= ключ about

    в view превратится в доступную переменную
    $about; // <= массив, который содержит результат выполнения выражения About::find()->where(['>=', 'id', 1])->limit(6)->all(); в контроллере


    по сути compact() из оригинального кода делает то же самое, хотя смысла выделять память под переменную, если ей существовать одну строку - нет. Плюс нюансы в плане умалчивания случая ненайденных переменных появляются
  • Выбор ноутбука для дизайнера за 1100 $?

    Я маки крайне уважаю, но этой конфигурации для ваших целей точно недостаточно. Я девушке купил iMac 27'' , там 32гб оперативы, видео и проц посильнее, но работа в Adobe Animate все равно напоминает слайд шоу при перетаскивании объектов. Если будет еще и работа с 3D - то точно этот макбук мимо кассы.
    Если б задачи были бэкендо-фронтендовые - то тогда б да, этот мак в самый раз
  • Чего не хватает моим функциям?

    Одиночка Айс:
    [
        'settings' => ['where' => '1; DROP TABLE USERS;//']
    ];


    превратится в инъекцию тут

    //get WHERE param
          if(isset($settings->where)){
            $SQL[]="WHERE {$settings->where}";
          }

    и в конце будет слеплено в конечный запрос этим
    $SQL=join(" ",$SQL);

    Впрочем, с такой грубой реакцией на указание на ошибки и даже описание, как и почему их надо избегать, вам все же стоит остаться в этой фирме и не соваться в нормальные.
  • Чего не хватает моим функциям?

    Вызовет
    getRecords($table, (object)$_POST);
    в пост будет отправлено например
    ['settings' => '1; DROP TABLE USERS;//']
    и все, прощайте данные, вместо удобства наступает время узнать, делают ли уже ваши админы бэкапы, или им только предстоит начать их делать.

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

    На первом же код ревью такие вещи отправляются на доработку, пока не станут безопасными. Разработчики даже стараясь делать приложение защищенным по незнанию/невнимательности оставляют дыры. Зачем еще и осознанно-то их лепить?
  • Как игнорировать composer некоторые папки?

    BadassRolf: разработку и тесты держать в основной ветке (не-мастер, назовем её development)
    при разработке клонировать ветки именно из нее (тогда тесты копируются)
    когда ветка готова мерджить ее целиком в development (теперь там весь новый фунционал + новые тесты)
    в master сливать изменения из development готовые к релизу, исключая папку тест. Вот на этом шаге как это реализовать я точно не скажу, это несколько более нетривиальное действо чем просто git merge, но гит это точно умеет)

    Могу предположить, что решение так сделать вызвано тем, что в тестах есть какая-то конфиденциальная информация, типа логинов-паролей для подключению к стороннему сервису или еще что-то такое. В таком случае можно просто вынести это в отдельный файл конфигов тестов, который не коммитится, а коммитить dist.config.php (yaml) , который содержит этот же массив конфигов, но с значениями-заглушками. Тогда тесты можно будет коммитить безболезненно - никто не обидится за лишние файлы в vendor
  • Как игнорировать composer некоторые папки?

    BadassRolf: т.е вы делаете свое приложение, которое распространяете через композер
    в приложении есть тесты, которые вы коммитите на гитхаб
    но хотите, чтобы при composer require *название вашего пакета* папка tests не качалась?
  • Как игнорировать composer некоторые папки?

    а в чем смысл такого действия? (вопрос чтобы понять, что вы именно хотите, не риторический)
  • Проект на ZF1 - как перейти на более новый фрейм?

    at0m1x: в качестве вводной можно использовать недавнюю статью на хабре - https://habrahabr.ru/post/282253/ . Т.е нужно отделить бизнес логику от фреймворка. А дальше можно гуглить принципы из статьи, изучать их и пытаться применить на практике.
    Ну и разумеется бессмертная классика - "Архитектура корпоративных программных приложений" Фаулера, так подобные проблемы тоже рассматриваются.
  • Не перебор ли для тестового задания?

    Arris: у нормального человека не знакомого с WP совсем - минуты 2, чтобы решить "WP для старта джуном в 2017? Да ну их, пойду еще куда нибудь на собеседование схожу". Сорри за холиварное заявление, ИМХО конечно)
  • Какое направление преспективней?

    +1, вечернее ускоренное - это прям самое то. И сразу устраивайся на работу по специальности параллельно - по окончанию 3х лет будешь на пару голов выше всех, кто просто пошел на очку в МИРЭА, МАИ и тд и тп. А может и некоторых преподов
  • Как настроить кэширование информации о текущем курсе валюты с сайта cbr?

    Илья Белобородов: ну вопрос-то был "как правильно реализовать кэширование" ¯\_(ツ)_/¯
    тем более вдруг на виртуальном хостинге Memcached уже подключен. Или разобраться захочет)
  • Не могу разобраться почему не работает namespace или use?

    Илья: честно говоря, какие могут быть проблемы под windows понятия не имею, всегда имел с ним дело под Unix системами.
    Не уверен, что строчка
    "php":">=5.3.0", вообще нужна, кроме того запятая вот тут "dev-master",<== выдаст ошибку и не даст скачать пакеты, так как ошибка в синтаксисе composer.json
    Насчет мусора в проекте не соглашусь - композер скромно ставит себя в vendor/composer, а все новые пакеты в vendor/*. Если же копировать пакеты вручную, имея при этом автозагрузчик не совместимый с PSR-4 - придется править во всех классах неймспейсы, что очень неудобно, плюс лишаете себя возможности обновлений пакетов.
    Но если прям совсем не хочется - повторюсь, во всех классах в папке vendor/Curl/* нужно заменить
    namespace Curl;
    на
    namespace vendor\Curl;
    С вашим автозагрузчиком это должно помочь.

    А внедрение полноценного от composer понесет за собой некоторые изменения в структуре проекта, чтобы он корректно работал, вероятно при отсутствии необходимости и должного опыта проще оставить как есть.
  • Какую функциональность обычно используют в PHPStorm?

    А какой SQL редактор и с каким функционалом? В PHPStorm-е ж есть вполне себе мощный инструментарий для работы с бд, написания запросов с автокомплитом/выполнением/etc