#mustread
Большой репозиторий, в котором собраны ссылки на различные инструменты, программы, утилиты, статьи, книги и видео для разработчиков. Это ваше чтение на лето.
https://github.com/trimstray/the-book-of-secret-knowledge
Большой репозиторий, в котором собраны ссылки на различные инструменты, программы, утилиты, статьи, книги и видео для разработчиков. Это ваше чтение на лето.
https://github.com/trimstray/the-book-of-secret-knowledge
GitHub
GitHub - trimstray/the-book-of-secret-knowledge: A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners…
A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners, cli/web tools and more. - 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 в представлении не нуждается, однако вызывает смешанные чувства. За сложностью реализации скрываются недочеты, некоторые неудобства, а в экспериментальной версии были баги. В целом, инструмент взрослый, можно попробовать.
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 в представлении не нуждается, однако вызывает смешанные чувства. За сложностью реализации скрываются недочеты, некоторые неудобства, а в экспериментальной версии были баги. В целом, инструмент взрослый, можно попробовать.
GitHub
GitHub - SimpleBus/message-bus: [READ ONLY] Generic classes and interfaces for messages and message buses. Full documentation can…
[READ ONLY] Generic classes and interfaces for messages and message buses. Full documentation can be found here: - SimpleBus/message-bus
Что используете для работы с отложенными сообщениями?
Anonymous Poll
32%
symfony/messenger
49%
illuminate/queue (laravel)
1%
onliner/command-bus
2%
SimpleBus/message-bus
2%
thephpleague/tactician
14%
Свой вариант в комментариях
#php
Не приняли: https://wiki.php.net/rfc/partial_function_application. А могла бы быть крутая фича в языке.
Не приняли: 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
- Модель прогноза средних цен и объемов потребления товаров (ФНС России и Росстат)
- ИИ для поиска самолетов на снимках местности при проведении поисково-спасательных операций (Росавиация)
- ИИ для распознавания категории предмета музейного фонда (Минкультуры России)
Как видите, задачи практичные и важные, на решение дается целый месяц — с 14 июля по 14 августа. В каждой из трех задач есть 25 призовых мест, за первое место дают 100 тыс. ₽. Регистрация и подробности здесь: https://proglib.io/w/2dc08b3c
#advanced #mustread
Подробнее про стримы php и их необычные возможности.
https://www.sitepoint.com/understanding-streams-in-php/
https://www.sitepoint.com/using-php-streams-effectively/
Подробнее про стримы php и их необычные возможности.
https://www.sitepoint.com/understanding-streams-in-php/
https://www.sitepoint.com/using-php-streams-effectively/
Sitepoint
PHP Master | Understanding Streams in PHP
Streams were introduced as a way of generalizing file, network, data compression, and other operations which share a common set of functions and uses.
#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
Мы часто используем коллекции элементов: коллекции строк, чисел, объектов. Коллекции предоставляют удобный 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
GitHub
GitHub - loophp/collection: A (memory) friendly, easy, lazy and modular collection class.
A (memory) friendly, easy, lazy and modular collection class. - loophp/collection
#release
PHP 8.1 уже можно потрогать в альфа версии.
https://www.php.net/archive/2021.php#2021-07-08-1
PHP 8.1 уже можно потрогать в альфа версии.
https://www.php.net/archive/2021.php#2021-07-08-1
#advanced #rabbitmq
Большой подробный туториал по основам работы с RabbitMQ.
https://proglib.io/w/c8551529
Большой подробный туториал по основам работы с RabbitMQ.
https://proglib.io/w/c8551529
ajaxblog.ru
RabbitMQ для начинающих | Ajaxblog
#cheatsheet
Находим все процессы, слушающие конкретный порт.
https://sebastiandedeyne.com/unix-things/finding-out-which-ports-are-in-use/
Находим все процессы, слушающие конкретный порт.
https://sebastiandedeyne.com/unix-things/finding-out-which-ports-are-in-use/
Sebastiandedeyne
Finding out which ports are in use
Sometimes you want to spin up a process, but the port it wants to bind to is already in use. Or a port isn't listening to a process as you expected. lsof is a debugging life saver in these situations.
lsof -i -P -n | grep LISTEN
This will list all processes…
lsof -i -P -n | grep LISTEN
This will list all processes…
Вакансия: автор образовательных курсов в сфере IT
Кого мы ищем? Профессионала c опытом создания образовательного IT-контента для специалистов уровня middle.
Обязанности:
- Составление учебной программы
- Подготовка текстовых материалов курса: методические материалы, домашние задания, программный код
Требования:
Владение инструментами разработчика, одним или несколькими языками программирования:
– Python
– HTML, CSS, JS
– Java
– SQL
Условия работы. Нам интересно длительное сотрудничество, работаем удалённо. Загрузка: 10-14 тыс. знаков в день, оплата: от 450 руб. за 1000 знаков.
В отклике на вакансию укажите образование, опыт работы и ссылки на ваши материалы.
Контакт для связи: @proglib_producer
Кого мы ищем? Профессионала 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
Кого мы ищем? Разработчиков с опытом публичных выступлений.
Обязанности:
– Запись видеокурсов по подготовленным нашими авторам материалам
– Проверка домашних заданий студентов
Требования. Нам важно, чтобы спикер обладал грамотной речью и хорошей дикцией, имел навыки программирования на одном или нескольких языках
– Python
– HTML, CSS, JS
– Java
– SQL
Условия работы. Мы рассчитываем на долгосрочное сотрудничество. Загрузка от 5 часов в неделю, оплата — от 1500 рублей за час съемки. Работа в нашей студии в Москве.
В отклике на вакансию укажите образование, опыт выступлений и разработки. Будет классно, если вы сможете записать краткий видеорассказ о себе — 30-40 секунд.
Контакт для связи: @vlad_proglib
#laravelshit
Ребята из spatie делают не только пакеты среднего уровня качества, но и рекомендуют и пишут статьи не лучше своих пакетов. Например, статья под гордым названием «5 простых советов» на самом деле рекламирует как минимум три ужасных:
1. Предлагается использовать
2. Используйтеговна плохого кода другим. Чтобы уяснить для себя, почему это плохо, советую прочитать данный тред со ссылкой на оригинальный твит, приведенный в статье, https://twitter.com/pierrejoye/status/1286441723724324864?s=21.
3. "Используйте
https://ryangjchandler.co.uk/posts/5-simple-laravel-tips-and-tricks
Ребята из 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()
, – гордо кричит автор статьи, предлагая заменить один кусок 3. "Используйте
->withDefault()
при определении отношений, чтобы в случае отсутствия модели получать пустышку". Как и автор статьи, документация заявляет, что это пример реализации паттерна Null Object
, но это не так. Null Object
нужен, чтобы соответствовать типу и ничего не делать (например, NullLogger), а null
от объекта модели только вводит в ступор: придется проверять на существование id
модели, чтобы отличить его от реальных данных, что не сильно отличается от if ($post->user === null)
. https://ryangjchandler.co.uk/posts/5-simple-laravel-tips-and-tricks
GitHub
framework/src/Illuminate/Database/Query/Builder.php at 8.x · laravel/framework
The Laravel Framework. Contribute to laravel/framework development by creating an account on GitHub.
#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, получить массив чисел или строк.Symfony
Environment Variable Processors (Symfony Docs)
Using env vars to configure Symfony applications is a common practice to make your applications truly dynamic. The main issue of env vars is that their values can only be strings and your application …
#laravelshit
В тему разговора о том, почему фасады плохие, можно вспомнить ишьюс на гитхабе, в котором разработчики жалуются на то, что фасады превращают любой сервис в синглтон, потому что кэшируют их в текущем рантайме. Можно, конечно, обойти этот баг следующим образом, но все это говорит не в пользу фасадов. Главное не вздумайте использовать фасады в долгоживущих приложениях.
https://github.com/laravel/ideas/issues/1088
В тему разговора о том, почему фасады плохие, можно вспомнить ишьюс на гитхабе, в котором разработчики жалуются на то, что фасады превращают любой сервис в синглтон, потому что кэшируют их в текущем рантайме. Можно, конечно, обойти этот баг следующим образом, но все это говорит не в пользу фасадов. Главное не вздумайте использовать фасады в долгоживущих приложениях.
https://github.com/laravel/ideas/issues/1088
GitHub
Facades always returning a singleton · Issue #1088 · laravel/ideas
Is there any reason or design decision that dictates that the use of a Facade always returns a singleton, and ignores the binding method specified in the ServiceProvider?
#advanced #video
Полезное видео о том, как правильно работать с Redis и предотвращать отказы.
https://www.youtube.com/watch?v=9qvr920dWtk
Полезное видео о том, как правильно работать с Redis и предотвращать отказы.
https://www.youtube.com/watch?v=9qvr920dWtk
YouTube
Отказоустойчивая работа с Redis - Сергей Шамбир, iSpring
Казалось бы, есть универсальный способ ускорить любой сервис: просто использовать Redis. Но всегда ли это пойдёт на пользу? В докладе мы обсудим подводные камни использования Redis, а затем рассмотрим практический опыт построения системы, устойчивой к его…
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
#symfony #advanced Все знают про мощный Dependency Injection компонент Symfony. Также он поддерживает работу с переменными окружения – не только их загрузкой, но и их валидацией и приведением к типам. Например, если вы хотите получить переменную как int…
#library #symfony
В тему поста наш подписчик сделал более усовершенствованный бандл для разбиения строки из переменных окружения в массив по разделителям и приведения его значений к любому необходимому типу.
https://github.com/nbgrp/env-bundle
В тему поста наш подписчик сделал более усовершенствованный бандл для разбиения строки из переменных окружения в массив по разделителям и приведения его значений к любому необходимому типу.
https://github.com/nbgrp/env-bundle
GitHub
GitHub - nbgrp/env-bundle: Bundle with a few useful Symfony environment variable processors.
Bundle with a few useful Symfony environment variable processors. - nbgrp/env-bundle
Хотите стать IT-специалистом крупной компании? Тогда обучающий курс «Профессия Go-разработчик» для вас!
За год обучения вы:
- получите базовые знания программирования;
- научитесь разрабатывать и тестировать приложения на Golang;
- освоите принципы работы с алгоритмами поиска и сортировки;
- научитесь взаимодействовать с файловой системой.
Переходите по ссылке и регистрируйтесь. Первые 3 месяца обучения бесплатно!▶️ https://clc.am/kABWww.
За год обучения вы:
- получите базовые знания программирования;
- научитесь разрабатывать и тестировать приложения на Golang;
- освоите принципы работы с алгоритмами поиска и сортировки;
- научитесь взаимодействовать с файловой системой.
Переходите по ссылке и регистрируйтесь. Первые 3 месяца обучения бесплатно!▶️ https://clc.am/kABWww.
#symfony #advanced
Пакет для Symfony, который необходимо использовать в долгоживущих процессах: например, очередях и консольных командах. Пакет помогает следить за используемой памятью и вовремя очищать ее, например, почистив EntityManager.
https://github.com/LongRunning/LongRunning
Пакет для Symfony, который необходимо использовать в долгоживущих процессах: например, очередях и консольных командах. Пакет помогает следить за используемой памятью и вовремя очищать ее, например, почистив EntityManager.
https://github.com/LongRunning/LongRunning
GitHub
GitHub - LongRunning/LongRunning: Mono repository for everything long running
Mono repository for everything long running. Contribute to LongRunning/LongRunning development by creating an account on GitHub.