После всех потрясений последних лет изменения в моей жизни кажутся скучными - и потому, в сравнении, благополучными. Я думаю, что я готова к новой главе, которая будет естественным продолжением предыдущих. Главное изменение - это уточнение направления и ближайших целей.
Декабрь - хорошее время для подведения промежуточных итогов в надежде, что мировые силы вскоре не подведут за нас полные и окончательные итоги. В этом году я вижу бессветлый месяц как повод праздновать собственные успехи и планировать успехи будущие.
1. Достижения и навыки
Большинство из инструментов, которые я перечисляю, я, разумеется, знаю не идеально. Но это те навыки, за применение которых мне платят. Поэтому я запишу их в достижения: я достигла уровня, достаточного для уверенного использования.
Основные рабочие инструменты
Здесь перечислено, что я использую каждый или почти каждый рабочий день.
Symfony
PHP
MySQL
REST API
Git
Jira
Agile/Scrum
PhpStorm
Дополнительные рабочие инструменты и навыки
Эти навыки пригождаются мне не каждый день, но с их помощью я решаю много полезных задач. Владение ими сильно упрощает мне работу. Даже если я не знаю их идеально, моего знания достаточно для полноценного выполнения того, что мне нужно.
В блоге давно не было обновлений, а всё потому, что я не делаю теперь ничего интересного, о чём можно рассказать. Начальник меня опять подвёл – при этом, я уверена, считая, что это я подвожу его, – и, в общем, я в поиске работы. Резюме вот опубликовала, как бы грустно и пусто оно ни выглядело.
Со своими проектами у меня всегда было трудно, я, видимо, такой человек, который предпочитает работать на кого-то, в команде и с конкретными задачами. Самостоятельно поднимать тяжёлый коммерческий сайт со сложной задумкой, конечно, весело, но опыта моего на это не хватает, ресурса стрессоучтойчивости тем более. А если вместо зарплаты или просто помощи в разработке меня кормят баснями о светлом будущем, пока сами забираются в Bitrix и прочее 1с, то я вообще перестаю реагировать. Впрочем, перестану жаловаться на прошлую работу, и сосредоточусь на поиске новой.
В общем, если вам нужен в команду кто-то настолько грустный, как я, совсем немного опытный в PHP, Symfony, Docker и о-чём-я-тут-ещё-писала, см. список тэгов, – то скорее email me. Или, если вы не нанимаете, может, отправьте ссылки на меня кому-то знакомому, у кого есть вакансии.
Этот пост для начинающих в создании сайтов, которые уже немного разобрались в вопросе, но пока не уверены, где и как размещать свои собственные сайты и блоги. И это не реклама и не призыв делать всё так же, как я – просто описание того, что я использую.
Меня спросили: почему, если я пишу на Symfony, я не сделаю себе блог на Symfony? Неужели не могу написать? Конечно, я могу!
Но я завела статический блог, потому что он дёшев и прочен. Вместо динамической системы, которая может падать от недостатка ресурсов, это просто html-страницы, немножко css и js. Он лежит на бесплатном хостинге статических сайтов GitHub Pages (просто GitHub-репозиторий), я плачу таким образом только за домен.
Для блога мне не нужно никаких сложных функций. Комментарии предоставляет Disqus (хотя я думаю перейти на другое решение, когда будет время разобраться в этом вопросе подробнее), RSS генерирует плагин Hexo.
Столкнулась с необходимостью обновить часть страницы, созданной в Twig, с помощью ajax-запроса. Как обновить страницу, используя шаблон, где есть готовый цикл, который я хочу снова использовать? В поиске готовых вариантов нашла всего один вопрос на StackOverflow и кучу кривых переводов той же страницы. Возможно, решение такое тривиальное? Или никто не занимается этим? Или мои навыки поиска решений далеки от идеала? В любом случае, на будущее запишу своё решение. Задача и код сильно упрощены, в моём проекте нужно было получать другие объекты.
Задача: Каждые 10 секунд обновлять на странице данные: показывать 10 последних комментариев.
Алгоритм:
Ту часть страницы, которую нужно обновлять, выделить в отдельный шаблон.
При запросе обрабатывать этот отдельный шаблон и отправлять результат в ответе.
Я использую Symfony 4, и вот в контроллере есть страница, где выводятся последние комментарии:
Я часто встречаю посты о том, что разработчик должен постоянно учиться и развиваться, браться за реальные проекты, рассылать резюме и всячески “прогрессировать”. Советы разной степени полезности о том, как быть крутым. Хотя многие пишут их от чистого сердца, желая помочь новичкам, далеко не все в реальности учитывают новичка как человека.
Я написала длинный пост о том, как я получала свои знания, но решила не публиковать его: это много личных воспоминаний, достаточно сказать, что путь далеко не был прямым и был полон случайностей. Я уверена, что это обычное дело для любого человека и для любой специальности.
Вместо этого поста о себе я хочу дать свои советы! И они тоже будут полезны не всем, так что ура относительной полезности в глазах читателя:
Учитесь так, как вам это нравится.
Учитесь всегда, но не за счёт собственного здоровья и благополучия.
Не поддавайтесь на слабо всех этих профи из интернета, они сами чаще всего зарвавшиеся новички. Можно использовать их данные и их мнения, но не подчиняться этим мнениям.
Сообщество разработчиков должно быть дружественным. Если вы столкнулись с грубостью, то виноваты не вы: что бы вы ни пытались сделать криво, какие бы глупые вопросы ни задавали, если вам ответили грубо – это не из-за вас, это эго отвечающего. При необходимости меняйте сообщество: вы не клялись в верности рыцарскому ордену, это всего лишь один форум или одна группа по интересам.
Не будьте грубы сами. Если у вас нет моральных сил, которые вы готовы вложить в общение, если нет никакого желания никому помогать, пройдите мимо. Никому не вменяется в обязанность помогать другому, но когда вы сами обнаружите в себе готовность и желание отдавать – это радость и удовольствие.
Все эти пункты тоже только буковки, написанные одним человеком. Я по эту сторону экрана не могу вам диктовать. Думайте сами по себе, думайте о самих себе и поступайте так, как считаете нужным.
Я сама только начинаю понимать, что ответственность перед самой собой и установление личных границ не означают лень, грубость или отрешение от мира.
Посты такого рода, нравоучительно-философские, редко полезны. Куда интереснее и познавательнее читать о новой технологии, о полезной функции или о событии в мире IT. Поэтому этот пост куда полезнее мне самой – и, может быть, проходящие мимо читатели ему порадуются.
В обучении и в прогрессе учитывается не только желание и воля, но и возможности, и силы, и окружающие, и способности, и вообще реальный мир. Человек не состоит из одной только воли (а если состоит, то не позже чем через пару недель его стоит положить в больницу, чтобы не пришлось хоронить).
Я советую не прекращать учиться на самой жизни, а не на буковках в бложиках. Где-то там, если вам интересна эта тема, найдётся место HTML, CSS, JavaScript, PHP, Python, C++ и другим страшным буквам и словам.
Symfony уже обновилась до 4.1, популярные бандлы добавляют совместимость, а вот документацию обновлять не спешат. Когда я впервые пыталась установить FOSUserBundle, серьёзно запуталась. Для профессионалов это, может, и очевидно, но мне стоило разобраться сначала, как изменилась структура папок и куда теперь смотреть.
Установка
Предполагается, что установить Symfony и нужные компоненты вы уже сможете. Требуются Doctrine, Annotations, SwiftMailer, Translation и Twig – всё это уже есть в вашем проекте, если создали его как symfony/website-skeleton, и всё это нужно добавить, если использовали symfony/skeleton. И ещё нужны настроенные в файле .env доступ к базе данных и mailer. Устанавливается FOSUserBundle просто, но шаги установки используют не те файлы, которые сейчас указаны в документации. Пройдёмся по порядку, указываю не полностью инструкцию – её найдёте в документации – а правильные папки и файлы в Symfony 4.
Обработка шаблонов
Иногда FOSUserBundle выдаёт ошибку при установке, если в файле config/packages/framework.yaml не указан обработчик шаблонов. Просто добавить туда templating: engines
Запустить в PhpStorm дебаг php-приложения, запущенного в docker-контейнере на том же компьютере, где работает PhpStorm. Уточняю особенно, что контейнер на той же машине, где IDE, потому что с задачей дебага на удалённом сервере я пока не справилась.
Настройка Docker
Я пользуюсь генератором docker-compose PHPDocker.io, возьмём его результат за основу. Не забыть в поле Extensions поставить галочку напротив XDebug. После, как обычно, скачать архив, распаковать файлы в корневую папку проекта. В папке /phpdocker/php-fpm, где уже лежит файл с настройками php-ini-overrides.ini, я создала ещё один файл - xdebug.ini.
За точными объяснениями настроек отсылаю к официальной документации. Замечу только, что порт 9000 можно изменить, но тогда его же нужно изменить в настройках PhpStorm. Кстати, remote_host можно указывать в этом же файле. Перейдём к нему вот-вот, я его указываю в docker-compose для удобства изменения.
На одной неделе дважды занималась конкретно вопросами ssl-сертификатов для сайтов. Во-первых, собственный блог – можете заметить, теперь “защищённое соединение”. Оказывается, GitHub Pages (где блог размещён) прямо в начале этого мая начали поддерживать ssl-сертификаты и перенаправление на https для других доменов. Когда я создавала блог, поддерживали только для собственных, поэтому когда я перешла на свой домен (хорошо иметь редкую фамилию))), то сначала оставалась без безопасности. Чтобы получить перенаправление на https, нужно было просто убрать из настроек custom domain и после добавить назад. Сделала это несколько дней назад, как только узнала. Стоило за новостями следить, но, честное слово, мне много чего стоило бы делать.
Во-вторых, по работе прямо сегодня возник тот же вопрос.
Это была очень глупая и очень неприятная проблема, поэтому я обязана это записать, чтобы не повторять ошибку! Задача: иметь доступ к контейнеру с базой из контейнера с php-приложением.
Допустим, у нас есть файл docker-compose.yml (пример сгенерировала в phpdocker.io):
По работе потребовалось: на некоторый период времени перенаправлять запросы на другой сайт (отправлять клиентов, которые не платят за услугу, на страницу оплаты). Используется автоматический обратный прокси-сервер nginx от jwilder. Решение кажется очевидным и простым (и, вероятно, грубым), но я определённо рада, что нашла хоть такое. Основное преимущество: настройки в отдельном файле для каждого сайта, что делает проще автоматизацию перенаправления.
Для этого при создании контейнера с nginx нужно прописать дополнительные тома для настроек: conf.d для общих настроек и vhost.d, где будут храниться файлы для каждого виртуального хоста.