Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.2K subscribers
1.41K photos
23 videos
26 files
4.1K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
#mustread

Большой репозиторий, в котором собраны ссылки на различные инструменты, программы, утилиты, статьи, книги и видео для разработчиков. Это ваше чтение на лето.

https://github.com/trimstray/the-book-of-secret-knowledge
#advanced

Command Bus, или Message Bus, или Event Bus – как только ни называют шину сообщений. Удобный инструмент, который позволяет иметь единую точку входа для сообщений/команд/событий и абстрагироваться от выбора обработчика и их количества. Также некоторые продвинутые шины сообщений позволяют подключать очереди для асинхронной обработки сообщений. На данный момент для php доступны неколько реализаций:

1. https://github.com/SimpleBus/message-bus – шина от Матьяса Нобака. Достаточно скромная реализация, которая тем не менее послужила вдохновением для symfony/messenger.

2. https://github.com/onliner/command-bus – молодой command bus от onliner, очень перспективный проект с хорошим кодом и возможностью использовать брокеры очередей.

3. https://github.com/thephpleague/tactician – command bus от ребят из phpleague, из коробки не умеет откладывать сообщения, но можно подключить bernard, как советуют в документации https://tactician.thephpleague.com/plugins/bernard/.

https://github.com/symfony/messenger - мессенджер Symfony в представлении не нуждается, однако вызывает смешанные чувства. За сложностью реализации скрываются недочеты, некоторые неудобства, а в экспериментальной версии были баги. В целом, инструмент взрослый, можно попробовать.
#php

Не приняли: https://wiki.php.net/rfc/partial_function_application. А могла бы быть крутая фича в языке.
Продолжаем следить за конкурсами с денежными призами. «Цифровой прорыв» совместно с Mail.Ru Group запускают IT-чемпионат по ML, AI и Data Science. Есть три задачи:

- Модель прогноза средних цен и объемов потребления товаров (ФНС России и Росстат)
- ИИ для поиска самолетов на снимках местности при проведении поисково-спасательных операций (Росавиация)
- ИИ для распознавания категории предмета музейного фонда (Минкультуры России)

Как видите, задачи практичные и важные, на решение дается целый месяц — с 14 июля по 14 августа. В каждой из трех задач есть 25 призовых мест, за первое место дают 100 тыс. ₽. Регистрация и подробности здесь: https://proglib.io/w/2dc08b3c
#github #library

Мы часто используем коллекции элементов: коллекции строк, чисел, объектов. Коллекции предоставляют удобный API по добавлению, удалению, обходу, слиянию, фильтрации элементов и многому другому. Ниже собран список самых популярных на данный момент коллекций.

https://github.com/loophp/collection

https://github.com/ramsey/collection

https://github.com/schmittjoh/php-collection

https://github.com/illuminate/collections

https://github.com/doctrine/collections
Вакансия: автор образовательных курсов в сфере IT

Кого мы ищем? Профессионала c опытом создания образовательного IT-контента для специалистов уровня middle.

Обязанности:
- Составление учебной программы
- Подготовка текстовых материалов курса: методические материалы, домашние задания, программный код

Требования:
Владение инструментами разработчика, одним или несколькими языками программирования:
– Python
– HTML, CSS, JS
– Java
– SQL

Условия работы. Нам интересно длительное сотрудничество, работаем удалённо. Загрузка: 10-14 тыс. знаков в день, оплата: от 450 руб. за 1000 знаков.

В отклике на вакансию укажите образование, опыт работы и ссылки на ваши материалы.

Контакт для связи: @proglib_producer
Вакансия: спикер (преподаватель) образовательных IT-курсов

Кого мы ищем? Разработчиков с опытом публичных выступлений.

Обязанности:
– Запись видеокурсов по подготовленным нашими авторам материалам
– Проверка домашних заданий студентов

Требования. Нам важно, чтобы спикер обладал грамотной речью и хорошей дикцией, имел навыки программирования на одном или нескольких языках
– Python
– HTML, CSS, JS
– Java
– SQL

Условия работы. Мы рассчитываем на долгосрочное сотрудничество. Загрузка от 5 часов в неделю, оплата — от 1500 рублей за час съемки. Работа в нашей студии в Москве.

В отклике на вакансию укажите образование, опыт выступлений и разработки. Будет классно, если вы сможете записать краткий видеорассказ о себе — 30-40 секунд.

Контакт для связи: @vlad_proglib
#laravelshit

Ребята из spatie делают не только пакеты среднего уровня качества, но и рекомендуют и пишут статьи не лучше своих пакетов. Например, статья под гордым названием «5 простых советов» на самом деле рекламирует как минимум три ужасных:

1. Предлагается использовать User::all()->dd() вместо dd(User::all()), ссылаясь на то, что разработчиков может раздражать необходимость заводить переменную для вызова dd. Зато разработчиков не раздражает дебажить код с помощью dd вместо xdebug и тянуть на продакшн код для дебага https://github.com/laravel/framework/blob/8.x/src/Illuminate/Database/Query/Builder.php#L3406-L3409 (🤦‍♂️).

2. Используйте Auth::id() вместо Auth::user()->id(), – гордо кричит автор статьи, предлагая заменить один кусок говна плохого кода другим. Чтобы уяснить для себя, почему это плохо, советую прочитать данный тред со ссылкой на оригинальный твит, приведенный в статье, https://twitter.com/pierrejoye/status/1286441723724324864?s=21.

3. "Используйте ->withDefault() при определении отношений, чтобы в случае отсутствия модели получать пустышку". Как и автор статьи, документация заявляет, что это пример реализации паттерна Null Object, но это не так. Null Object нужен, чтобы соответствовать типу и ничего не делать (например, NullLogger), а null от объекта модели только вводит в ступор: придется проверять на существование id модели, чтобы отличить его от реальных данных, что не сильно отличается от if ($post->user === null).

https://ryangjchandler.co.uk/posts/5-simple-laravel-tips-and-tricks
#symfony #advanced

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

Например, если вы хотите получить переменную как int, вы можете сделать так:

AppSomeService:
arguments:
$timeout: '%env(int:SOME_TIMEOUT)%'


Также он может проверить файл на существование:

%env(file:PRIVATE_KEY)%


Больше процессоров можно найти тут.

Недавно нам потребовалось из строки получать массив, где каждый элемент должен быть числом. Написали свой процессор. Можно указать любой разделитель и привести к int/float:

%env(explode:dot:integer:SOME_ENV)%
%env(explode:comma:integer:SOME_ENV)%
%env(explode:dash:float:SOME_ENV)%
%env(explode:bar:SOME_ENV)% // cast to string by default.


Теперь вы можете из такой строки 435423,923592,8235823, лежащей в env, получить массив чисел или строк.
#laravelshit

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

https://github.com/laravel/ideas/issues/1088
Хотите стать IT-специалистом крупной компании? Тогда обучающий курс «Профессия Go-разработчик» для вас!

За год обучения вы:
- получите базовые знания программирования;
- научитесь разрабатывать и тестировать приложения на Golang;
- освоите принципы работы с алгоритмами поиска и сортировки;
- научитесь взаимодействовать с файловой системой.


Переходите по ссылке и регистрируйтесь. Первые 3 месяца обучения бесплатно!▶️ https://clc.am/kABWww.
#symfony #advanced

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

https://github.com/LongRunning/LongRunning