Saloon
Saloon — это библиотека PHP, которая предоставляет вам инструменты для создания простых интеграций API и SDK. Saloon перемещает ваши запросы API в повторно используемые классы, чтобы вы могли хранить все свои конфигурации API в одном месте. Его можно легко настроить с помощью плагинов, но он поставляется предварительно настроенным для вас, поэтому вы можете сразу же приступить к отправке запросов API. Saloon поставляется со множеством интересных функций, таких как запись запросов в ваших тестах, кеширование, OAuth2 и нумерация страниц.
Saloon — это библиотека PHP, которая предоставляет вам инструменты для создания простых интеграций API и SDK. Saloon перемещает ваши запросы API в повторно используемые классы, чтобы вы могли хранить все свои конфигурации API в одном месте. Его можно легко настроить с помощью плагинов, но он поставляется предварительно настроенным для вас, поэтому вы можете сразу же приступить к отправке запросов API. Saloon поставляется со множеством интересных функций, таких как запись запросов в ваших тестах, кеширование, OAuth2 и нумерация страниц.
GitHub
GitHub - saloonphp/saloon: 🤠 Build beautiful API integrations and SDKs with Saloon
🤠 Build beautiful API integrations and SDKs with Saloon - saloonphp/saloon
👍5🥱5
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Технократия и hh.ru проанализировали спрос на ИТ-специалистов в России за период с сентября 2022 года по сентябрь 2023 года. Одни из самых востребованных вакансий — системные и бизнес аналитики, менеджеры проектов и продуктов, а также Java-разработчики.
◆Спрос на ИТ-специалистов за год вырос: в сентябре 2022 года на портале hh.ru было открыто 64 тыс. вакансий, а в сентябре 2023 года компании разместили 76 тыс. вакансий. Годовой прирост составил 18%, согласно статистике hh.ru.
◆Активнее других бизнес начал искать аналитиков (системных и бизнесовых), а также менеджеров проектов. За год число размещенных вакансий для этих позиций увеличилось практически в 2 раза.
◆В среднем каждый месяц компании размещают более 9 тысяч вакансий для разработчиков. Практически каждая шестая вакансия — Java-разработчик. Их доля от общего числа вакансий для разработчиков составляет 16%. В первой тройке востребованных стеков также расположились PHP и Python разработчики — 12% и 11% соответственно.
◆Самые активные наниматели айтишников — компании из сферы «Информационные технологии». Но при этом, в первой тройке нанимателей Сбер, Тинькофф и Иннотех — компании из сферы «финансы».
◆Специалистов грейда Junior стали искать на 101% чаще, но в абсолютных значениях бизнесу интересны опытные специалисты уровня Senior — на момент сентября этого года 2,7 тыс. вакансий для Senior против 0,6 тыс. для Junior.
◆По медианным зарплатам лидируют разработчики Ruby on rails — компании готовы платить им 252 000 рублей в месяц. За ними следуют Golang и Java разработчики.
◆Свердловская область в тройке среди регионов нанимателей. Компании из Екатеринбурга и области расположились после Москвы и Санкт-Петербурга.
◆Почти каждая вторая вакансия для ИТ-специалистов предполагает формат удаленной работы: с 25% в 2021 году до 40% в 2023 году.
#карьера #инфографика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱5❤1
Как выдавать себя за пользователей в вашем приложении Laravel
Статья рассказывает о функциональности Laravel Nova, которая позволяет администраторам входить в систему от имени других пользователей для проверки ошибок или исследования проблем.
Здесь описывается установка и использование Laravel Impersonate пакета, который упрощает этот процесс. Чтобы настроить имперсонацию в Laravel приложении, необходимо установить и подключить пакет, добавить несколько маршрутов для имперсонации пользователей, а также использовать Blade хелперы для реализации функционала.
Статья также предоставляет советы по продвинутой настройке, такие как ограничение возможности имперсонации исключительно для администраторов. Автор также дает рекомендацию для использования пакета вместе с Laravel Jetstream и предостерегает от возможных проблем при настройке. В целом, Laravel Impersonate пакет представляет собой удобное решение для входа в систему от имени других пользователей в Laravel приложениях.
Статья рассказывает о функциональности Laravel Nova, которая позволяет администраторам входить в систему от имени других пользователей для проверки ошибок или исследования проблем.
Здесь описывается установка и использование Laravel Impersonate пакета, который упрощает этот процесс. Чтобы настроить имперсонацию в Laravel приложении, необходимо установить и подключить пакет, добавить несколько маршрутов для имперсонации пользователей, а также использовать Blade хелперы для реализации функционала.
Статья также предоставляет советы по продвинутой настройке, такие как ограничение возможности имперсонации исключительно для администраторов. Автор также дает рекомендацию для использования пакета вместе с Laravel Jetstream и предостерегает от возможных проблем при настройке. В целом, Laravel Impersonate пакет представляет собой удобное решение для входа в систему от имени других пользователей в Laravel приложениях.
Laravel News
Learn how to impersonate users in your Laravel app - Laravel News
Laravel Impersonate is a package to allow you to easily set up user impersonation in your Laravel app.
🥱5👍2❤1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🥱4❤1
🔍Здесь рассматривается проблема типизации в приложениях, использующих Query Bus. Query Bus — это шаблон проектирования, который позволяет обрабатывать запросы и возвращать результаты. Проблема заключается в том, что возвращаемый тип данных из Query Bus неопределен, что затрудняет типизацию в приложении.
🔧Для решения этой проблемы автор предлагает использовать дженерики. Они позволяют связывать тип возвращаемого значения Query с типом, который возвращает соответствующий QueryHandler. Таким образом, он предлагает определить интерфейс Query как generic, указав переменный тип T.
Затем типизируется интерфейс QueryBus, указывая, что он принимает объекты типа Query и возвращает объекты типа T. Это позволяет явно указать тип возвращаемого значения из Query Bus.
🔑Наконец, показывается пример конкретного запроса, который также типизируется с использованием generics. Это позволяет автоматически определять тип возвращаемого значения из Query Bus в среде разработки, такой как PHPStorm, облегчая работу с кодом.
🔧Для решения этой проблемы автор предлагает использовать дженерики. Они позволяют связывать тип возвращаемого значения Query с типом, который возвращает соответствующий QueryHandler. Таким образом, он предлагает определить интерфейс Query как generic, указав переменный тип T.
Затем типизируется интерфейс QueryBus, указывая, что он принимает объекты типа Query и возвращает объекты типа T. Это позволяет явно указать тип возвращаемого значения из Query Bus.
🔑Наконец, показывается пример конкретного запроса, который также типизируется с использованием generics. Это позволяет автоматически определять тип возвращаемого значения из Query Bus в среде разработки, такой как PHPStorm, облегчая работу с кодом.
DEV Community
Type hint a Query Bus in PHP
Introduction If we use a Query Bus1 in our application, we usually have an interface that...
👍11🥱4
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Новое в Symfony 6.4: Профилировщик команд и CHIPS сookie
🔎Здесь рассказывается о значительном улучшении Symfony Profiler, одной из любимых функций разработчиков Symfony. Профилировщик собирает всю информацию о HTTP-запросах, позволяя анализировать эти данные при поиске ошибок. В Symfony 6.4 (и 7.0) профилировщик был улучшен таким образом, что теперь он также может профилировать команды, выполняемые в консоли.
👨💻Эта статья объясняет изменения в поддержке сторонних куки в веб-браузерах, начиная с середины 2024 года. Она представляет новую альтернативу под названием CHIPS (Cookies Having Independent Partitioned State), предлагая детали об использовании атрибута Partitioned в HTTP-заголовке Set-Cookie. Этот атрибут Partitioned позволяет хранить куки с использованием двух ключей: ключа хоста (host key) и нового ключа разделения (partition key). Такой подход предотвращает доступ к кукам между различными ресурсами, встроенными в один и тот же сайт, что обеспечивает большую конфиденциальность данных пользователей.
🔎Здесь рассказывается о значительном улучшении Symfony Profiler, одной из любимых функций разработчиков Symfony. Профилировщик собирает всю информацию о HTTP-запросах, позволяя анализировать эти данные при поиске ошибок. В Symfony 6.4 (и 7.0) профилировщик был улучшен таким образом, что теперь он также может профилировать команды, выполняемые в консоли.
👨💻Эта статья объясняет изменения в поддержке сторонних куки в веб-браузерах, начиная с середины 2024 года. Она представляет новую альтернативу под названием CHIPS (Cookies Having Independent Partitioned State), предлагая детали об использовании атрибута Partitioned в HTTP-заголовке Set-Cookie. Этот атрибут Partitioned позволяет хранить куки с использованием двух ключей: ключа хоста (host key) и нового ключа разделения (partition key). Такой подход предотвращает доступ к кукам между различными ресурсами, встроенными в один и тот же сайт, что обеспечивает большую конфиденциальность данных пользователей.
👍7
Как вы понимаете Special Case / Null Object и где его следует применять?
Special Case / Null Object — это шаблон проектирования, который используется для обработки специальных случаев или значений отсутствия объекта. Он позволяет разработчику избежать проверок на null и обрабатывать такое отсутствие объекта по-особенному.
Null Object — это класс, который реализует интерфейс или абстрактный класс, используемый вместо null. Он предоставляет реализацию методов, которые обрабатываются для отсутствующего объекта, и возвращает пустые значения или выполняет пустые действия.
Null Object можно применять, когда требуется обработать отсутствие объекта без использования проверок на null. Он может быть полезен в таких ситуациях:
1. Вместо проверки на null, можно использовать Null Object, чтобы избежать возникновения исключений или ошибок, связанных с отсутствием объекта и его методов.
2. Null Object может упростить код и избавить от необходимости писать дополнительные условия для обработки null значений.
3. Он также может быть полезен в шаблонном методе, когда необходимо иметь базовую реализацию методов, которые могут быть переопределены в подклассах, и одновременно обрабатывать отсутствие объекта.
В этом примере, если использовать NullLogger, то метод log не выполняет никаких действий и не вызывает ошибок при отсутствии файла или других ресурсов, которые могут быть связаны с реальным логгером.
#вопросы_с_собеседований
Special Case / Null Object — это шаблон проектирования, который используется для обработки специальных случаев или значений отсутствия объекта. Он позволяет разработчику избежать проверок на null и обрабатывать такое отсутствие объекта по-особенному.
Null Object — это класс, который реализует интерфейс или абстрактный класс, используемый вместо null. Он предоставляет реализацию методов, которые обрабатываются для отсутствующего объекта, и возвращает пустые значения или выполняет пустые действия.
Null Object можно применять, когда требуется обработать отсутствие объекта без использования проверок на null. Он может быть полезен в таких ситуациях:
1. Вместо проверки на null, можно использовать Null Object, чтобы избежать возникновения исключений или ошибок, связанных с отсутствием объекта и его методов.
2. Null Object может упростить код и избавить от необходимости писать дополнительные условия для обработки null значений.
3. Он также может быть полезен в шаблонном методе, когда необходимо иметь базовую реализацию методов, которые могут быть переопределены в подклассах, и одновременно обрабатывать отсутствие объекта.
В этом примере, если использовать NullLogger, то метод log не выполняет никаких действий и не вызывает ошибок при отсутствии файла или других ресурсов, которые могут быть связаны с реальным логгером.
#вопросы_с_собеседований
👍12
FrankenPHP
FrankenPHP — это современный сервер приложений для PHP, построенный на базе веб-сервера Caddy .
FrankenPHP дает новые возможности вашим приложениям
FrankenPHP работает с любым PHP-приложением и делает ваши проекты Symfony быстрее, чем когда-либо, благодаря интеграции с рабочим режимом (появляется поддержка Laravel Octane).
FrankenPHP также можно использовать как отдельную библиотеку Go для встраивания PHP в любое приложение, использующее net/http.
FrankenPHP — это современный сервер приложений для PHP, построенный на базе веб-сервера Caddy .
FrankenPHP дает новые возможности вашим приложениям
FrankenPHP работает с любым PHP-приложением и делает ваши проекты Symfony быстрее, чем когда-либо, благодаря интеграции с рабочим режимом (появляется поддержка Laravel Octane).
FrankenPHP также можно использовать как отдельную библиотеку Go для встраивания PHP в любое приложение, использующее net/http.
GitHub
GitHub - php/frankenphp: 🧟 The modern PHP app server
🧟 The modern PHP app server. Contribute to php/frankenphp development by creating an account on GitHub.
🥱8👍6❤1🌚1
Что такое гексагональная архитектура. Разделение бизнес-логики и инфраструктуры с помощью портов и адаптеров
❗Современные проекты сталкиваются с рядом сложностей, связанных с тестированием, поддержкой и масштабируемостью. Подходы, основанные на традиционных архитектурных шаблонах, часто не способны эффективно решить эти проблемы.
🔎Здесь рассматривается гексагональная архитектура — инновационный подход, предложенный Алистером Кокберном, который переворачивает традиционное представление о структуре приложений.
Этот подход позволяет разрабатывать и тестировать приложения в изоляции, не завися от внешних технологий, и обеспечивает гибкость и легкость в поддержке.
❗Современные проекты сталкиваются с рядом сложностей, связанных с тестированием, поддержкой и масштабируемостью. Подходы, основанные на традиционных архитектурных шаблонах, часто не способны эффективно решить эти проблемы.
🔎Здесь рассматривается гексагональная архитектура — инновационный подход, предложенный Алистером Кокберном, который переворачивает традиционное представление о структуре приложений.
Этот подход позволяет разрабатывать и тестировать приложения в изоляции, не завися от внешних технологий, и обеспечивает гибкость и легкость в поддержке.
Хабр
Что такое гексагональная архитектура. Разделение бизнес-логики и инфраструктуры с помощью портов и адаптеров
Гексагональная архитектура — это архитектурный паттерн, представленный Алистером Кокберном и описанный у него в блоге в 2005 году. Основная идея заключается в том, чтобы структурировать приложение...
👍5
Какую диагональ монитора чаще всего используете на работе?
⬇️⬇️⬇️⬇️
⬇️⬇️⬇️⬇️
🥱2💯1
Новое в Symfony 6.4: маршруты на основе FQCN и Обработчик подпроцесса
Первая статья представляет новую возможность автоматического именования маршрутов в Symfony при использовании контроллеров. Теперь разработчики могут определять уникальные имена маршрутов на основе FQCN (полного имени класса) контроллера и имени метода. Это снижает вероятность ошибок и делает код более читаемым, избегая использования «магических строк» для определения имен маршрутов.
Вторая статья представляет новый класс PhpSubprocess в Symfony 6.4, который решает проблему передачи конфигурационных настроек от родительского процесса к подпроцессам в PHP. Это обеспечивает надежность и предсказуемость работы с подпроцессами, такими как консольные команды, унаследовав конфигурацию от родительского процесса.
Первая статья представляет новую возможность автоматического именования маршрутов в Symfony при использовании контроллеров. Теперь разработчики могут определять уникальные имена маршрутов на основе FQCN (полного имени класса) контроллера и имени метода. Это снижает вероятность ошибок и делает код более читаемым, избегая использования «магических строк» для определения имен маршрутов.
Вторая статья представляет новый класс PhpSubprocess в Symfony 6.4, который решает проблему передачи конфигурационных настроек от родительского процесса к подпроцессам в PHP. Это обеспечивает надежность и предсказуемость работы с подпроцессами, такими как консольные команды, унаследовав конфигурацию от родительского процесса.
👍9
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🎙️ТОП-14 подкастов о карьере в ИТ
Делимся подкастами, которые помогут вам подготовиться к собеседованиям и лучше понять, как устроен процесс найма в ИТ. Ниже — небольшая подборка, остальные читайте в статье.
👉 NEWHR и СОБЕС — два подкаста от Киры Кузьменко, рекрутера с 20-летним опытом
👉 Хочу в айти — подкаст для новичков, в котором не так много выпусков, но они короткие, ёмкие и интересные.
👉 Выхожу с понедельника — подкаст про разные направления в ИТ
👉 Moscow Python — подкаст о карьере, личном опыте и не только
👉 Podlodka Podcast — популярный подкаст с очень разнообразными и интересными темами, связанными с карьерой в ИТ и другими айтишными направлениями
#подкасты
Делимся подкастами, которые помогут вам подготовиться к собеседованиям и лучше понять, как устроен процесс найма в ИТ. Ниже — небольшая подборка, остальные читайте в статье.
👉 NEWHR и СОБЕС — два подкаста от Киры Кузьменко, рекрутера с 20-летним опытом
👉 Хочу в айти — подкаст для новичков, в котором не так много выпусков, но они короткие, ёмкие и интересные.
👉 Выхожу с понедельника — подкаст про разные направления в ИТ
👉 Moscow Python — подкаст о карьере, личном опыте и не только
👉 Podlodka Podcast — популярный подкаст с очень разнообразными и интересными темами, связанными с карьерой в ИТ и другими айтишными направлениями
#подкасты
👍3
А был ли баг? Может бага и не было? Зачем, как и чем тестировать PHP код
В статье рассматриваются основные подходы к тестированию бэкенда на PHP, обсуждаются преимущества и проблемы, связанные с этим процессом. Также о методах обнаружения и устранения багов, инструментах и книгах для более глубокого изучения тестирования. Материал будет полезен как начинающим тестировщикам, так и разработчикам, которые хотят освоить тестирование бэкенда, но не знают с чего начать.
В статье рассматриваются основные подходы к тестированию бэкенда на PHP, обсуждаются преимущества и проблемы, связанные с этим процессом. Также о методах обнаружения и устранения багов, инструментах и книгах для более глубокого изучения тестирования. Материал будет полезен как начинающим тестировщикам, так и разработчикам, которые хотят освоить тестирование бэкенда, но не знают с чего начать.
Хабр
А был ли баг? Может бага и не было? Зачем, как и чем тестировать PHP код
В статье рассмотрим основные подходы к тестированию бэкенда на PHP, обсудим преимущества и проблемы, связанные с этим процессом. Также узнаем о методах обнаружения и устранения багов, инструментах и...
👍4🥱4
Resonance — новый PHP-фреймворк, созданный на основе Swoole
Здесь представлен новый PHP-фреймворк под названием Resonance, который ориентирован на асинхронное программирование и включает в себя функции Fibers, Coroutines и библиотеку Swoole. Фреймворк позволяет создавать модульные приложения, где все компоненты могут легко заменяться, расширяться или модифицироваться. Проект бесплатный и open source, с документацией и исходным кодом доступными на GitHub. Автор приглашает присоединиться к сообществу и оценить проект на GitHub.
Здесь представлен новый PHP-фреймворк под названием Resonance, который ориентирован на асинхронное программирование и включает в себя функции Fibers, Coroutines и библиотеку Swoole. Фреймворк позволяет создавать модульные приложения, где все компоненты могут легко заменяться, расширяться или модифицироваться. Проект бесплатный и open source, с документацией и исходным кодом доступными на GitHub. Автор приглашает присоединиться к сообществу и оценить проект на GitHub.
DEV Community
Resonance: A New Async PHP Framework
New PHP Framework I spent the last year working on the new PHP framework to push this...
👍12❤5👾1
Борьба с Login CSRF
Статья обсуждает уязвимости Cross-Site Request Forgery (CSRF) в веб-приложениях, фокусируясь на менее известном типе — Login CSRF. CSRF эксплуатирует функционал сеансов в браузере, позволяя злоумышленникам выполнять неавторизованные запросы с использованием сеанса пользователя. В традиционной атаке CSRF злоумышленник может манипулировать пользователем для выполнения действий от их имени, таких как изменение пароля или проведение транзакций.
Login CSRF, с другой стороны, включает в себя принуждение аутентифицированного сеанса действовать от имени пользователя, сначала инициируя выход и затем вход с учетными данными злоумышленника. В статье подчеркивается, что несмотря на передовые технологии, такие как флаги безопасности и SameSite в куки, атаки CSRF, включая Login CSRF, по-прежнему представляют угрозу для веб-приложений.
Автор предоставляет рекомендации по защите от Login CSRF в Symfony, фреймворке веб-приложений. Рекомендуемый подход включает в себя включение защиты CSRF в конфигурации аутентификации и внедрение случайного токена в форму входа, который может быть автоматизирован аутентификатором form_login Symfony. Для более старых версий Symfony предлагается использовать csrf_token_generator.
Защита распространяется также на выход, с использованием опции enable_csrf в конфигурации logout. Статья завершается акцентом на важности обеспечения защиты действий входа и выхода от атак CSRF, даже при наличии улучшенных мер безопасности куки.
Статья обсуждает уязвимости Cross-Site Request Forgery (CSRF) в веб-приложениях, фокусируясь на менее известном типе — Login CSRF. CSRF эксплуатирует функционал сеансов в браузере, позволяя злоумышленникам выполнять неавторизованные запросы с использованием сеанса пользователя. В традиционной атаке CSRF злоумышленник может манипулировать пользователем для выполнения действий от их имени, таких как изменение пароля или проведение транзакций.
Login CSRF, с другой стороны, включает в себя принуждение аутентифицированного сеанса действовать от имени пользователя, сначала инициируя выход и затем вход с учетными данными злоумышленника. В статье подчеркивается, что несмотря на передовые технологии, такие как флаги безопасности и SameSite в куки, атаки CSRF, включая Login CSRF, по-прежнему представляют угрозу для веб-приложений.
Автор предоставляет рекомендации по защите от Login CSRF в Symfony, фреймворке веб-приложений. Рекомендуемый подход включает в себя включение защиты CSRF в конфигурации аутентификации и внедрение случайного токена в форму входа, который может быть автоматизирован аутентификатором form_login Symfony. Для более старых версий Symfony предлагается использовать csrf_token_generator.
Защита распространяется также на выход, с использованием опции enable_csrf в конфигурации logout. Статья завершается акцентом на важности обеспечения защиты действий входа и выхода от атак CSRF, даже при наличии улучшенных мер безопасности куки.
Wouter J
Combatting Login CSRF with Symfony
Cross-site Request Forgery (CSRF) is one of the traditional vulnerabilities
that web applications have to deal with. Every web framework - including
Symfony - supports CSRF protection out of the box. A lesser known
vulnerability is Login CSRF, a special kind…
that web applications have to deal with. Every web framework - including
Symfony - supports CSRF protection out of the box. A lesser known
vulnerability is Login CSRF, a special kind…
🥱8👍6❤1