Блог Максима Федорова

PHP разработчик. Пишу про инструменты в работе, о своих наблюдениях, хобби и проектах.

Портфолио   •   Github    •    Почта    •    Тостер

Фильтрация задач по спискам или доскам в Trello

При работе с Trello иногда появляется задача — вывести сразу с нескольких досок актуальные задачи. или вывести по исполнителю и активности. Например есть 3-4 доски с разными проектами (разные сайты, или по отделам — дизайн и разработка) и нужно например вывести со всех досок одновременно все задачи из списка «Задачи» или из списка «ToDo».

Оказывается есть команды, которыми можно выводить тикеты как в фильтре — по названию списков, по активности, по людям и особенностям (с вложениями или описанием).

Например вывожу тикеты с разных досок, в каждой из которых есть список Задачи:

Доступные операторы

-operator — если добавить минус, то задачи с последующей отборкой не выведутся, например -has:members выведет все тикеты, никому не назначенные
@name — выведет тикеты, назначенные данному пользователю, @me выведет ваши картчоки
label: — выведет тикеты по точному названию, например label:«fix header»
board:id — выведет тикеты с определенной доски
list:name — выведет тикеты по названию списка
has:attachments, has:description, has:cover, has:members — выведут тикеты, которые содержат вложения, описания, обложку или участников соответственно
created:day — выведет тикеты, созданные за сутки, сожно вывести за неделю (week) или месяц (month)
edited:day — выведет тикеты, отредактированные за сутки
is:open, is: archived — выведут открытые и закрытые тикеты


Можно перейти отдельно на страницу поиска и фильтровать свои тикеты:

17 ноября   trello   Советы

Тестовые задания для junior программиста на PHP

Делюсь своими тестовыми заданиями

Создание REST API на (Yii2)
https://docs.google.com/document/d/1UG-1I6C7vxLTm9ohNj4By25Q0mV0nw5Mmd1CXZm1iAg/edit?usp=sharing

Напишите REST API для генерации рандомного числа
Каждой генерации присваивать уникальный id по которому можно получить результат генерации. Должны быть доступны 2 публичных API метода generate() и retrieve(id)

Создание REST без фреймворков под высокие нагрузки
https://yadi.sk/i/sd7qurQB3MYkco

Менеджер задач
https://yadi.sk/i/Vr9Eykty3MYkiV

Сократитель ссылок
https://docs.google.com/document/d/1rRJhDa5XxnJCtlhc-KzWI1JosjQZek8QsudDYwm_ZPM/edit?usp=sharing

Приложение для управления резюме (Symfony)
https://github.com/Maksclub/veniamin

Форма обратной связи (Laravel)
https://docs.google.com/document/d/1GK8hJO1NeVxbMtjP4jv7SACBfA3S3NvSivTy9B2vShk/edit?usp=sharing

Тестовое задание для web-разработчика (дискретка)
https://docs.google.com/document/d/1f_tMB3JvZso-o2jK1Omjsq4jrHy2ZsQnhskcJgl0jcE/edit?usp=sharing

Расписание поездок курьеров в регионы
https://docs.google.com/document/d/1K-09tMHNlLJ7OsZUZ50s7NxLg5_oZRdDhvdMWODvgN4/edit?usp=sharing

Парсер видео (Yii2)
https://github.com/Maksclub/parser

Также на Хекслете опубликовали целый список тестовых, но там для разных языков: https://github.com/Hexlet/ru-test-assignments

Add missing property to yii2fullcalendar

If you need to add property (e. g. from General Display), but yii2fullcalendar haven’t this, example—not contentHeight, so conent in calendar scrolling:

Not found contentHeight

Property contentHeight not found, but i’m need to set this value in widget.

Fix it

  • redefine yii2fullcalendar
  • add our property (contentHeight for example)
  • inheritance method registerPlugin(), register our property and add method’s parent code

Result

You the view’s contents will assume a natural height and no scrollbars will be used.

6 сентября   php   yii2   yii2fullcalendar

Причина 404 ошибки Profiler в Symfony 3 при открытии app_dev.php

Когда разворачиваете приложение на Симфони 3 и при открытии страницы /app_dev.php может выскочить ошибка в профайлере:

На странице app_dev.php

Ошибка частая — может возникнуть, если вы настраиваете веб-сервер (у меня nginx) привычным образом и не внимательно следуете официальной документации.

После диррективы fastcgi_pass нужно ввести:

fastcgi_split_path_info ^(.+\.php)(/.*)$;

Чтобы в итоге получилось примерно так:

location ~ ^/(app_dev|config)\.php(/|$) {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        ...
}

Перезапустите nginx:

sudo service nginx restart

Можете радоваться профайлингу:

Ссылка на раздел в официальной документации: https://symfony.com/doc/current/setup/web_server_configuration.html#nginxСоветы

3 сентября   nginx   symfony   Советы

Отвечаю на вопросы по php

Готов помочь с проблемным кодом на php. Присылайте вопросы, примеры кода и описание задач, которые вы пытаетесь решить. Мне будет полезно отрабатывать навыки, вам возможно найдется решение. Ну сайт делать вам не расскажу как, а вот как настроить сервер, починить отправку писем или как работать с циклом, массивом или классом— велкам!


Присылайте вопросы в Вконтакте или на почту

Помогаю на Тостере

27 августа   Помощь

Верные друзья джуниора

Неделю назад устроился младшим программистом в крутую команду разработчиков — буду участвовать в разработке двух сервисов. Хочу поделиться своими недельными выводами.

Уметь в контроль версий (GIT)

Пришел с небольшим опытом работы в Гите, но так как не работал в команде, то понятия не имел как работать с ветками. Именно тут и наплутал — сделал одну фичу, но тут же вскоре понадобилось выполнить пару несложных доработок, которые сделал поверх этой первой фичи и запушил их на dev-сервер, еле-еле распутался.

Также лучше сразу и подробно выяснить у команд проектов, как они делают коммиты и пулл-реквесты, оказывается это происходит очень по разному. Выясняйте досконально, чтобы они обрисовали свою работу — не гадайте.

И еще:

Следуйте GIT WORKFLOW

Ссылки:
https://habrahabr.ru/post/60030/
https://habrahabr.ru/post/106912/

Любить следующего парня

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

В итоге на одном проекте не было нужных для php модулей языка. На двух сыпались миграции — пришлось качать с тестового сервера копию базы (что тоже нужно догадаться — где и как взять доступы к ним?), на этих же проектах нужно было узнать — какой доступ к админ-панелям. На третьем все было хорошо, но чтобы создать администратора — нужно было пользоваться консольным приложением, команды которого (как и сам факт его наличия) знает только его разработчик — так себе зависимость ¯\_(ツ)_/¯

По итогу дня я вхреначил в README у каждого проекта инструкцию с установкой, а также вставил описание проблем и прямо захреначил коммиты в prod-ветку — с ветками в гите на тот момент я еще не разобрался ¯\_(ツ)_/¯

Делай инструкции для следующего парня!

Это сбережет новичку нервы, а опытному сотруднику время.

Уметь в  Linux

Очень важно знать консоль и работу с Линуксом. Хорошее знание SSH, настройки хостов в nginx, да и много чего — пригодилось практически с первого дня. Даже чуток помог другому новичку. Кстати почти вся команда разработчиков работает либо под Убунтой, либо под Мак-ОС.

Уметь в автоматические тесты

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

Но вещь при внедрении в проект необходимая. Например я немного улучшил пару контроллеров — разбил один большой на 3 поменьше и вынес пару методов в хелперы, но так как не могу написать тесты, да и вообще их нет на проекте, то просто напросто сейчас не могу проверить работу — фиг его знает, что могло отвалиться и в каком месте. Из-за этого доработку пришлось отложить и ждать для нее лучшего времени.

Тесты нужны, тесты важны, тесты сложны!

Виды решений для интеграций CMS с онлайн-кассами

Решение с арендой онлайн-кассы

Интеграция CMS напрямую с сервисом онлайн-касс (например Атол-онлайн)
В этом случае CMS получает статус подтверждения оплаты и отправляет в сервис данные о покупке (наименование товаров, их цену и количесвто, итоговоую сумму, дату и еще ряд значений).

Последняя на момент написания документация API сервиса Атол-онлайн:

Интеграция через Яндекс-кассу или др платежные системы

Тут CMS вообще не участвует — очень удобый и простой вариант, но есть зависимость от платежной системы, если все платежи на сайте идут через Яндекс-кассу или через PayAnyWay — нет проблем, а вот если у вас винегрет из платежных модулей — то беда, подойдет только вариант напрямую с Атол-онлайн (или похожими сервисами) или хардкорный со своим железом.

Плюсы и минусы:
+ Отказоустойчивость
+ Соответствие всем стандартам безопасности
+ Простая интеграция
— Абонентские платежи

Решение со своим железом

В данном случае кассовый аппарат находится у себя, он подключен к компьютеру, на котором будет ставиться софт — я так понял он подходит в случае интеграции с 1С, то есть 1С выгружает в папку на компьютере информацию о покупке, далее веб-сервер на компьютере проверяет наличие новых файлов в папке и если найдет — выводит на печать в кассовый аппарат, который сам уже связывается с ОФД.

Что нашел — можно связать через:

Плюсы и минусы:
+ Нет ежемесячных расходов на аренду
+ При необходимости PayPal — походу это пока единственное решение
— Необходим постоянный стабильный интернет и энергоснабжение
— В случае поломки придется остановить прием платежей
— Необходимо подключение к ПК и настройка специальной программы

Ошибка 500 в Laravel 5 при установке

Ошибка проявляет себя сразу после установки.

Нужно просто поменять права у папки storage на 777 (исполнять, читать и редактировать для всех пользователей)

Для Линукса

Переходим в папку приложения (для приведенного случая в папку /laravel/blog)

cd /laravel/blog
chmod 777 -R storage/

и меняем права:

chmod 777 -R storage/
2017  

Первый опыт работы с учеником

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

Бывалый верстальщик показывает как верстать с помощью БЭМ, Богданов И., 1893 год

Зачем взял помощника

Я посчитал, что если взять помощника, и через полтора-два месяца он сможет делать работу, то я смогу брать заказы по программированию и не заморачиваться с версткой и другой работой и при том нормально выучиться по программированию, плюс будет какой-никакой опыт командной работы — например через пару недель буду встраивать в нашу работу GIT, да и с какой стороны не посмотреть — это круто!

Единственным возражением было — ничего не выйдет. Но я посчитал, что это не причина  — если может не получиться, то теперь ничего никогда не пробовать?!

Как нанимал

Было 5 кандидатов — неплохо для зарплаты в 10 тысяч рублей:

  • была девушка, которая как раз собиралась найти работу для практики на лето, но ее по понятным причинам смутила работа на квартире у какого-то лысого мужика :) думаю — это нормально
  • был супер-парень, который учился на автоматизации оборудования, знал bash, Java и  C#, и вообще был матерый, в итоге он ушел в крупную компанию на стажировку, подтвердив этим свое умение думать :)
  • был матерый верстальщик, умеющий верстать пиксель в пиксель — мне показалось, что с его навыками зарабатывать 10 тысяч не совсем уместно...
  • и было два молодых не опытных парня, один закончил колледж по сварке (24 года) , другой студент-юрист (20 лет), оба примерно полгода изучали верстку — именно им и предложил встречу.

На встрече дал обоим тестовое простое задание на верстку — нужно было сделать 2 задания из 3. Оба выполнили задание еле-как, но жалею, что не дал никакого задания по математике — дело в том, что сначала позвал парнишку-сварщика, но он был слабоват в простейших математических операциях и не говорил о своих трудностях, говорил «сделаю» и не делал. Студент-юрист же наоборот — делал все с опережением, проявлял инициативу, но у него началась летняя практика, потому его не позвал на первый день работы.

В итоге взял парнишку постарше — за 3 дня до выхода дал задание как-нибудь сверстать для интернет-магазина страницы товара и категории, но первый день показал, что тяжело идет даже обычная математика — грубо говоря 100 разделить на 4 вызывали минутные задержки. Долго объяснял, как строится ХТМЛ-дерево, что такое классы и стили , когда и как нужно их применять, но я немного разочаровался и в итоге отказал после первого дня.

Но студент-юрист показал себя с лучшей стороны и за вечер выполнил это же задание, в итоге сейчас уже полторы недели работаем вместе.

Обучение и работа

Сильно изменился подход к своей работе.

Джедай Mace Windu, фильм «Звездные войны»

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

  • сверстать адаптивную страницу товара и категории
  • сверстать мобильную страницу товара
  • сверстать слайдер

Причем само задание объясняю подробно, но некоторые вопросы опускаю на самостоятельное решение — вообще не лезу, например освоить OpenServer и Filezilla давал на дом.

Круто, что получается обучаться нам обоим. Например стажер спрашивает про флексы и гриды, а я говорю — делай все без них, в итоге понял, какого хера я торможу — дал ему волю и сам пытаюсь больше усвоить уже за ним. Он сразу же освоил инструменты автоматизации, например Emmet и хоткеи в Sublime — я в самом начале пути о них и не думал, помог ему только, как делать инклуды в  php, чтобы по сто раз не переделывать шапку например. Также раньше редко обращался к документации БЭМ — со стажером дело пошло шустрее, нужно было не просто понять, а еще и объяснить — в итоге материал быстро усвоился.

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

Что не получается

Из-за работы не успеваю подготовить задания и описание урока и иногда игнорирую инициативы.
Приходится очень часто отрываться от работы — понял, что нужно готовить целые разделы и как-то упростить формат. Например нужно дать свободу в исполнении, но потом выделить время и объяснить разные подходы с плюсами и минусами.


Если не можешь объяснить что-то простым языком — значит ты сам не понимаешь этого в полной мере. Альберт Эйнштейн

Ctrl + ↓ Ранее