Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
💰⬆️ 10 факторов, влияющих на зарплату программиста
Узнайте 10 факторов, как превратиться из рядового программиста в высокооплачиваемого специалиста и научиться аргументированно запрашивать зарплату выше рынка.
Читать статью
#новость
Узнайте 10 факторов, как превратиться из рядового программиста в высокооплачиваемого специалиста и научиться аргументированно запрашивать зарплату выше рынка.
Читать статью
#новость
❤1👍1
По локоть в легаси: пошагово перезапускаем устаревший портал на PHP
Статья описывает проблемы, с которыми столкнулся владелец сайта Fishingsib.ru, старого ресурса о рыбной ловле, написанного на устаревшем PHP и фреймворке CakePHP 2. Сайт страдал от долгих сроков разработки и трудностей с наймом новых специалистов из-за устаревшего стека технологий. Предлагается два пути решения проблемы: полное переписывание сайта с нуля или постепенную модернизацию существующего кода.
Команда выбрала второй вариант и приступила к постепенной модернизации кодовой базы. Они начали с написания тестов для старого приложения на CakePHP 2, а затем постепенно обновляли PHP, внедряли Symfony компоненты и создавали новое приложение на базе Symfony параллельно с существующим. Чтобы обеспечить совместимость и плавный переход, были разработаны общие точки входа и функционал Middleware.
Каждый этап модернизации включал подробный план действий и использование инструментов, таких как Codeception для тестирования и Rector для автоматической замены устаревшего кода. Как результат, сайт был успешно обновлен, внедрены новые функции, и команда разработчиков теперь может работать с актуальными технологиями, такими как Symfony 6.
Статья описывает проблемы, с которыми столкнулся владелец сайта Fishingsib.ru, старого ресурса о рыбной ловле, написанного на устаревшем PHP и фреймворке CakePHP 2. Сайт страдал от долгих сроков разработки и трудностей с наймом новых специалистов из-за устаревшего стека технологий. Предлагается два пути решения проблемы: полное переписывание сайта с нуля или постепенную модернизацию существующего кода.
Команда выбрала второй вариант и приступила к постепенной модернизации кодовой базы. Они начали с написания тестов для старого приложения на CakePHP 2, а затем постепенно обновляли PHP, внедряли Symfony компоненты и создавали новое приложение на базе Symfony параллельно с существующим. Чтобы обеспечить совместимость и плавный переход, были разработаны общие точки входа и функционал Middleware.
Каждый этап модернизации включал подробный план действий и использование инструментов, таких как Codeception для тестирования и Rector для автоматической замены устаревшего кода. Как результат, сайт был успешно обновлен, внедрены новые функции, и команда разработчиков теперь может работать с актуальными технологиями, такими как Symfony 6.
Хабр
По локоть в легаси: пошагово перезапускаем устаревший портал на PHP
PHP — один из самых популярных языков веб-разработки уже около 20 лет, а самому языку скоро стукнет 30. За это время на нем написали огромное количество больших и маленьких проектов. Некоторые сайты,...
👍9❤3🔥3
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
❤2👍1🔥1
9 сред выполнения PHP: тест производительности
Условия испытаний:
Каждый runtime работает в 1 или 2 контейнерах Docker.
Каждый контейнер имеет 1 ЦП и 1 ГБ ОЗУ.
Инструмент нагрузочного тестирования находится в той же сети Docker.
Тестируемое приложение:
Symfony 7 с 1 контроллером и 1 представлением, без базы данных или других внешних сервисов.
Symfony разрабатывался с учетом возможности использования различных рантаймов, таких как Swoole, AMPHP и ReactPHP, хотя последние два были исключены из конкурса.
Инструмент нагрузочного тестирования:
Используется K6 для выполнения тестов нагрузки.
Тесты запускались 3 раза для каждого runtime с 10, 100 и 1000 одновременными подключениями в течение 30 секунд.
Настройки PHP и Symfony:
Используется php.ini-production (поставляется с официальными контейнерами Docker).
Включен Opcache и JIT.
Настроен предварительный загрузчик.
Symfony работает в режиме production.
Кэш Symfony прогрет во время сборки контейнера.
Результаты испытаний:
🟠Apache + mod_php и Apache + PHP-FPM показали практически одинаковые результаты.
🟠Nginx + PHP-FPM очень близок к Apache + mod_php и Apache + PHP-FPM при низкой нагрузке (10 и 100 одновременных подключений).
🟠Nginx + PHP-FPM смог обслужить около вдвое больше запросов, чем стеки, основанные на Apache, при нагрузке 1000 одновременных подключений.
🟠Nginx Unit был примерно в 3 раза быстрее, чем традиционный и наиболее популярный Nginx + PHP-FPM.
🟠Не было большой разницы между Roadrunner и Nginx + Roadrunner.
🟠Roadrunner на основе стеков работал в более чем в 2 раза быстрее, чем Nginx + PHP-FPM.
🟠FrankenPHP (не в режиме worker) был довольно близок к Nginx + PHP-FPM с точки зрения производительности.
🟠В режиме worker FrankenPHP был более чем в 10 раз быстрее, чем Nginx + PHP-FPM.
🟠Swoole практически так же быстр, как и FrankenPHP в режиме worker.
Полную версию можно увидеть здесь. Заходить с VPN
Условия испытаний:
Каждый runtime работает в 1 или 2 контейнерах Docker.
Каждый контейнер имеет 1 ЦП и 1 ГБ ОЗУ.
Инструмент нагрузочного тестирования находится в той же сети Docker.
Тестируемое приложение:
Symfony 7 с 1 контроллером и 1 представлением, без базы данных или других внешних сервисов.
Symfony разрабатывался с учетом возможности использования различных рантаймов, таких как Swoole, AMPHP и ReactPHP, хотя последние два были исключены из конкурса.
Инструмент нагрузочного тестирования:
Используется K6 для выполнения тестов нагрузки.
Тесты запускались 3 раза для каждого runtime с 10, 100 и 1000 одновременными подключениями в течение 30 секунд.
Настройки PHP и Symfony:
Используется php.ini-production (поставляется с официальными контейнерами Docker).
Включен Opcache и JIT.
Настроен предварительный загрузчик.
Symfony работает в режиме production.
Кэш Symfony прогрет во время сборки контейнера.
Результаты испытаний:
🟠Apache + mod_php и Apache + PHP-FPM показали практически одинаковые результаты.
🟠Nginx + PHP-FPM очень близок к Apache + mod_php и Apache + PHP-FPM при низкой нагрузке (10 и 100 одновременных подключений).
🟠Nginx + PHP-FPM смог обслужить около вдвое больше запросов, чем стеки, основанные на Apache, при нагрузке 1000 одновременных подключений.
🟠Nginx Unit был примерно в 3 раза быстрее, чем традиционный и наиболее популярный Nginx + PHP-FPM.
🟠Не было большой разницы между Roadrunner и Nginx + Roadrunner.
🟠Roadrunner на основе стеков работал в более чем в 2 раза быстрее, чем Nginx + PHP-FPM.
🟠FrankenPHP (не в режиме worker) был довольно близок к Nginx + PHP-FPM с точки зрения производительности.
🟠В режиме worker FrankenPHP был более чем в 10 раз быстрее, чем Nginx + PHP-FPM.
🟠Swoole практически так же быстр, как и FrankenPHP в режиме worker.
Полную версию можно увидеть здесь. Заходить с VPN
👍9🔥2🤔2🌚2❤1
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #phpdevjob
Вакансии недели для Москвы 👨🏻🏫
PHP-разработчик в ABCP
Москва. Разработка облачного решения для предпринимателей в сфере торговли.
Подробнее
PHP Developer в Market Team
Москва. Розничная торговля, маркетинг, реклама.
Подробнее
PHP-разработчик в netPrint.ru
Москва. Онлайн-сервис цифровой фотопечати.
Подробнее
PHP разработчик в Брискли
Москва. Создание IT-продуктов для ритейла.
Подробнее
PHP разработчик в Tilda Publishing
Москва. Платформа для создания сайтов.
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии недели для Москвы 👨🏻🏫
PHP-разработчик в ABCP
Москва. Разработка облачного решения для предпринимателей в сфере торговли.
Подробнее
PHP Developer в Market Team
Москва. Розничная торговля, маркетинг, реклама.
Подробнее
PHP-разработчик в netPrint.ru
Москва. Онлайн-сервис цифровой фотопечати.
Подробнее
PHP разработчик в Брискли
Москва. Создание IT-продуктов для ритейла.
Подробнее
PHP разработчик в Tilda Publishing
Москва. Платформа для создания сайтов.
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
hh.ru
Вакансия PHP-разработчик middle+ (удаленно) в Москве, работа в компании ABCP (вакансия в архиве c 4 апреля 2024)
Зарплата: от 270000 ₽ за месяц. Москва. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 27.03.2024.
🤔3👍1
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
👏3
Легко управляйте временными файлами в Laravel
Пакет spatie/temporary-directory создан для управления временными файлами и каталогами в PHP. Вместо использования стандартных функций для работы с временными файлами, автор предлагает использовать этот пакет, который предоставляет удобный объектно-ориентированный интерфейс для создания и управления временными файлами и каталогами.
Пакет позволяет легко создавать временные директории, загружать файлы в них, обрабатывать файлы и автоматически удалять временные директории при завершении работы с ними. Он также предоставляет другие удобные методы, такие как изменение имени и местоположения директории и очистка директории от всех файлов.
Пакет spatie/temporary-directory создан для управления временными файлами и каталогами в PHP. Вместо использования стандартных функций для работы с временными файлами, автор предлагает использовать этот пакет, который предоставляет удобный объектно-ориентированный интерфейс для создания и управления временными файлами и каталогами.
Пакет позволяет легко создавать временные директории, загружать файлы в них, обрабатывать файлы и автоматически удалять временные директории при завершении работы с ними. Он также предоставляет другие удобные методы, такие как изменение имени и местоположения директории и очистка директории от всех файлов.
Laravel News
Easily Manage Temporary Files in Laravel - Laravel News
Learn how Spatie's temporary-files PHP package makes working with temporary file paths a breeze in Laravel and other PHP projects.
👍2😁2🤔1
Каково назначение транзакций? Расскажите о принципе работы.
Назначение транзакций в базах данных состоит в обеспечении атомарности, целостности, согласованности и изолированности операций, которые изменяют данные.
Принцип работы транзакций обычно основан на следующих концепциях:
Атомарность (Atomicity): Транзакция должна считаться атомарной, то есть либо все ее операции должны быть успешно выполнены, либо ни одна из них не должна быть выполнена. Не должно быть промежуточных состояний, где часть операций выполнена, а часть нет.
Согласованность (Consistency): Транзакция должна обеспечивать соблюдение всех ограничений целостности данных. Если данные нарушают целостность, транзакция должна быть отменена, чтобы не допустить записи некорректных данных.
Изолированность (Isolation): Транзакции должны выполняться так, будто они являются единственными операциями, выполняемыми в базе данных. Это означает, что результаты одной транзакции не должны быть видны другим транзакциям до того момента, пока первая транзакция не будет завершена.
Устойчивость (Durability): После успешного завершения транзакции изменения данных должны быть надежно сохранены и доступны в случае сбоя системы или перезагрузки.
Принцип работы транзакций обычно включает в себя следующие этапы:
1️⃣Начало транзакции (BEGIN): Объявляется начало последовательности операций, которые должны быть выполнены атомарно.
2️⃣Выполнение операций: В этом этапе выполняются операции чтения и записи, которые являются частью транзакции.
3️⃣Фиксация (COMMIT): Если все операции выполнились успешно, транзакция завершается путем фиксации, и все изменения применяются к базе данных.
4️⃣Откат (ROLLBACK): Если в процессе выполнения транзакции произошла ошибка или нарушение условий целостности, транзакция отменяется путем отката, и все изменения, сделанные до этого момента, отменяются.
#вопросы_с_собеседований
Назначение транзакций в базах данных состоит в обеспечении атомарности, целостности, согласованности и изолированности операций, которые изменяют данные.
Принцип работы транзакций обычно основан на следующих концепциях:
Атомарность (Atomicity): Транзакция должна считаться атомарной, то есть либо все ее операции должны быть успешно выполнены, либо ни одна из них не должна быть выполнена. Не должно быть промежуточных состояний, где часть операций выполнена, а часть нет.
Согласованность (Consistency): Транзакция должна обеспечивать соблюдение всех ограничений целостности данных. Если данные нарушают целостность, транзакция должна быть отменена, чтобы не допустить записи некорректных данных.
Изолированность (Isolation): Транзакции должны выполняться так, будто они являются единственными операциями, выполняемыми в базе данных. Это означает, что результаты одной транзакции не должны быть видны другим транзакциям до того момента, пока первая транзакция не будет завершена.
Устойчивость (Durability): После успешного завершения транзакции изменения данных должны быть надежно сохранены и доступны в случае сбоя системы или перезагрузки.
Принцип работы транзакций обычно включает в себя следующие этапы:
1️⃣Начало транзакции (BEGIN): Объявляется начало последовательности операций, которые должны быть выполнены атомарно.
2️⃣Выполнение операций: В этом этапе выполняются операции чтения и записи, которые являются частью транзакции.
3️⃣Фиксация (COMMIT): Если все операции выполнились успешно, транзакция завершается путем фиксации, и все изменения применяются к базе данных.
4️⃣Откат (ROLLBACK): Если в процессе выполнения транзакции произошла ошибка или нарушение условий целостности, транзакция отменяется путем отката, и все изменения, сделанные до этого момента, отменяются.
#вопросы_с_собеседований
👍14😁2❤1
Планирование задач с помощью Symfony Scheduler
На SymfonyLive Paris 2023 был представлен Scheduler в Symfony, предназначенный для управления периодическими задачами, и стал стабильным с выпуском Symfony 6.4. Он заменяет crontab и интегрируется непосредственно в приложение.
Объясняется установка компонента через Composer и его основные функции, включая создание задач, управление расписанием, обработку коллизий и ошибок, а также использование консольных команд в качестве задач Scheduler. Рассматриваются возможности настройки расписания, управления коллизиями, множественными воркерами и отладкой расписаний.
Также обсуждаются инструменты для обработки ошибок и использование консольных команд в качестве задач Scheduler.
На SymfonyLive Paris 2023 был представлен Scheduler в Symfony, предназначенный для управления периодическими задачами, и стал стабильным с выпуском Symfony 6.4. Он заменяет crontab и интегрируется непосредственно в приложение.
Объясняется установка компонента через Composer и его основные функции, включая создание задач, управление расписанием, обработку коллизий и ошибок, а также использование консольных команд в качестве задач Scheduler. Рассматриваются возможности настройки расписания, управления коллизиями, множественными воркерами и отладкой расписаний.
Также обсуждаются инструменты для обработки ошибок и использование консольных команд в качестве задач Scheduler.
JoliCode
Master task scheduling with Symfony Scheduler
Introduction Nowadays, using a crontab for our recurring tasks is quite common, but not very practical because it's completely disconnected from our application. The Scheduler component is an
👍8
Построитель SQL запросов на основе мета-информации миграций БД
Статья представляет библиотеку Sql Query Builder, которая использует пакет версионирования shasoft/db-schema для работы с запросами к базе данных. Эта библиотека обеспечивает прямую работу с драйвером PDO и поддерживает различные команды SQL, такие как SELECT, INSERT, UPDATE, DELETE, а также операции JOIN, фильтрацию, удаление дубликатов, сортировку, группировку, агрегатные функции и ограничение выборки.
Приводятся примеры использования библиотеки для создания объекта Query Builder, указания условий фильтрации и соединения, а также выполнения запросов с учетом кэширования. Особое внимание уделяется использованию контекста таблицы для определения связей и работы с данными различных таблиц. Также обсуждаются некоторые ограничения и особенности работы библиотеки.
Статья представляет библиотеку Sql Query Builder, которая использует пакет версионирования shasoft/db-schema для работы с запросами к базе данных. Эта библиотека обеспечивает прямую работу с драйвером PDO и поддерживает различные команды SQL, такие как SELECT, INSERT, UPDATE, DELETE, а также операции JOIN, фильтрацию, удаление дубликатов, сортировку, группировку, агрегатные функции и ограничение выборки.
Приводятся примеры использования библиотеки для создания объекта Query Builder, указания условий фильтрации и соединения, а также выполнения запросов с учетом кэширования. Особое внимание уделяется использованию контекста таблицы для определения связей и работы с данными различных таблиц. Также обсуждаются некоторые ограничения и особенности работы библиотеки.
Хабр
Построитель SQL запросов на основе мета-информации миграций БД
В век когда ORM шагает по планете обычный построитель запросов выглядит откатом назад. Однако тут есть нюанс — Sql Query Builder использует пакет версионирования shasoft/db-schema и владеет всей...
👍5🤔3
Поделитесь, где вам комфортнее работается?
Anonymous Poll
29%
В офисе. Как можно работать без холиваров?
9%
Дома, в кровати. А что, есть другие варианты?
46%
Дома, за рабочим столом
1%
В кофейне
5%
Коворкинг — залог продуктивности
42%
Дома за своим рабочим местом
1%
Свой вариант (напишу в комментариях)
10%
Посмотреть результаты
Статистика версий PHP: январь 2024 г.
Регулярный обзор используемых версий PHP на основе данных, которые клиенты отправляют на packagist.org (например, когда они запускают composer update команду).
Основные моменты, охваченные в статистике, включают:
Статистика использования: В статье представлено сравнение использования версий PHP за разные периоды времени, подчеркивая постепенное снижение старых версий PHP (например, PHP 7.1) и увеличение принятия более новых версий (например, PHP 8.3).
Эволюция использования версий: Визуальные представления, такие как диаграммы, иллюстрируют тенденции в использовании версий PHP со временем, демонстрируя ускоренное принятие более новых версий PHP, таких как PHP 8.3, по сравнению с их предшественниками.
Требуемые версии: В статье анализируется минимально требуемые версии PHP для топ-1000 пакетов композитора, показывая, как выборы сделанные сами авторами пакетов влияют на требования к версиям PHP для проектов, использующих эти пакеты.
Регулярный обзор используемых версий PHP на основе данных, которые клиенты отправляют на packagist.org (например, когда они запускают composer update команду).
Основные моменты, охваченные в статистике, включают:
Статистика использования: В статье представлено сравнение использования версий PHP за разные периоды времени, подчеркивая постепенное снижение старых версий PHP (например, PHP 7.1) и увеличение принятия более новых версий (например, PHP 8.3).
Эволюция использования версий: Визуальные представления, такие как диаграммы, иллюстрируют тенденции в использовании версий PHP со временем, демонстрируя ускоренное принятие более новых версий PHP, таких как PHP 8.3, по сравнению с их предшественниками.
Требуемые версии: В статье анализируется минимально требуемые версии PHP для топ-1000 пакетов композитора, показывая, как выборы сделанные сами авторами пакетов влияют на требования к версиям PHP для проектов, использующих эти пакеты.
👍10🤔3❤1
#дайджест новостей по PHP за неделю:
🔎Загрузите более 1500 шрифтов Google в свой проект Laravel. — Laravel Webfonts — это пакет, который позволяет вам легко загружать, устанавливать и предварительно загружать более 1500 шрифтов Google локально в ваш проект Laravel.
🔎Выпущена Symfony 7.0.3 — Вот список наиболее важных изменений с версии 7.0.2.
🔎Laravel 10.42 — глобальные параметры по умолчанию для HTTP-клиента - На этой неделе команда Laravel выпустила версию 10.42 с глобальными параметрами по умолчанию для HTTP-клиента, правилом максимальной проверки для объекта правила пароля, строкой помощник по развертыванию и многое другое.
🔎Неделя Symfony #891 (22–28 января 2024 г.)
🔎Загрузите более 1500 шрифтов Google в свой проект Laravel. — Laravel Webfonts — это пакет, который позволяет вам легко загружать, устанавливать и предварительно загружать более 1500 шрифтов Google локально в ваш проект Laravel.
🔎Выпущена Symfony 7.0.3 — Вот список наиболее важных изменений с версии 7.0.2.
🔎Laravel 10.42 — глобальные параметры по умолчанию для HTTP-клиента - На этой неделе команда Laravel выпустила версию 10.42 с глобальными параметрами по умолчанию для HTTP-клиента, правилом максимальной проверки для объекта правила пароля, строкой помощник по развертыванию и многое другое.
🔎Неделя Symfony #891 (22–28 января 2024 г.)
👍2❤1🔥1