Laravel World
State Of Laravel 2023 Стартовал ежегодный опрос ларавельщиков. https://stateoflaravel.com/
Результаты опроса State of Laravel 2023 https://stateoflaravel.com/results
Forwarded from Организованное программирование | Кирилл Мокевнин (Kirill Mokevnin)
Откатывай!
Но что делать, если все таки деплой пошел не по плану?
Правило номер один: Сначала откатываем, потом разбираемся. Не надо надеятся на то, что получится быстро пофиксить. Откат при этом должен делаться одной командой за секунды.
Правило номер два: Отката не существует. Как это? Вспомним, что при правильно настроенной системе, у нас реализован Zero Downtime Deploy с базой только вперед. Миграции только накатываются, а следующая версия базы всегда совместима с текущей. Это значит что при откате на предыдущую версию, с базой ничего не происходит. Тут все хорошо.
А что с кодом? С точки зрения системы деплоя не должно быть разницы куда мы идем, вперед или назад. Деплой это замена текущего кода, на какой-то другой, даже если это предыдущий релиз. То есть получается что мы просто выполняем еще один деплой, но предыдущей версии.
Из этого следует важный вывод. В системе не должна присутствовать особая процедура отката. Если она есть, значит в проекте есть пространство для улучшения.
Но что делать, если все таки деплой пошел не по плану?
Правило номер один: Сначала откатываем, потом разбираемся. Не надо надеятся на то, что получится быстро пофиксить. Откат при этом должен делаться одной командой за секунды.
Правило номер два: Отката не существует. Как это? Вспомним, что при правильно настроенной системе, у нас реализован Zero Downtime Deploy с базой только вперед. Миграции только накатываются, а следующая версия базы всегда совместима с текущей. Это значит что при откате на предыдущую версию, с базой ничего не происходит. Тут все хорошо.
А что с кодом? С точки зрения системы деплоя не должно быть разницы куда мы идем, вперед или назад. Деплой это замена текущего кода, на какой-то другой, даже если это предыдущий релиз. То есть получается что мы просто выполняем еще один деплой, но предыдущей версии.
Из этого следует важный вывод. В системе не должна присутствовать особая процедура отката. Если она есть, значит в проекте есть пространство для улучшения.
👍23🤔8👎3
Люблю такие залипательные видео с диаграммами популярности сквозь года: https://youtu.be/MkNnAwkvvP8?si=Tys1qStYY1rK1iSN
❤4🤔2
Новая IDE от JetBrains для языка Rust: https://www.jetbrains.com/rust/
До этого они выпускали бесплатный плагин для Idea с поддержкой Rust. Плагин теперь deprecated.
Вывод: статистика использования бесплатного плагина достигла достаточно высоких показателей, что было принято решение о запуске отдельной коммерческой IDE, а это значит использование Rust растёт и язык уже весьма успешный👍
До этого они выпускали бесплатный плагин для Idea с поддержкой Rust. Плагин теперь deprecated.
Вывод: статистика использования бесплатного плагина достигла достаточно высоких показателей, что было принято решение о запуске отдельной коммерческой IDE, а это значит использование Rust растёт и язык уже весьма успешный👍
JetBrains
RustRover: Rust IDE by JetBrains
Try the new Rust IDE from JetBrains with a debugger, on-the-fly analysis, and quick-fixes.
👍21🤡3😐3
Удивительные вещи в мире Go - достаточно серьёзное изменение в области видимости переменных в цикле! Мне казалось такие вещи - это слишком большой Breaking Change, история из разряда мажорного перехода Python 2 на Python 3 длиной в десятилетие. Но нет. 👇
Forwarded from Golang Дайджест
Fixing For Loops in Go 1.22
https://go.dev/blog/loopvar-preview
David Chase и Russ Cox в официальном блоге Go рассказывают про проблему LoopVar (переменной цикла) и приводят конкретные примеры, в том числе из реального кейса проекта - Lets Encrypt.
Затем рассказывают, как именно эта проблема решается. Если кратко:
> change for loops to make these variables have per-iteration scope instead of per-loop scope
Как вы помните, эта фича уже есть в Go v1.21, но её нужно включить:
#go_1_22 #go_official
https://go.dev/blog/loopvar-preview
David Chase и Russ Cox в официальном блоге Go рассказывают про проблему LoopVar (переменной цикла) и приводят конкретные примеры, в том числе из реального кейса проекта - Lets Encrypt.
Затем рассказывают, как именно эта проблема решается. Если кратко:
> change for loops to make these variables have per-iteration scope instead of per-loop scope
Как вы помните, эта фича уже есть в Go v1.21, но её нужно включить:
GOEXPERIMENT=loopvar go test
А в версии 1.22 она уже будет работать по-умолчанию#go_1_22 #go_official
go.dev
Fixing For Loops in Go 1.22 - The Go Programming Language
Go 1.21 shipped a preview of a change in Go 1.22 to make for loops less error-prone.
🤯4🤷♂2👍1😁1
Telegram добавил stories для каналов, однако за это должны проголосовать премиум-пользователи, обновившие клиент до последней версии.
Не факт, что для этого канала это будет актуальный формат, но пусть будет.
Проголосовать можно здесь:
https://news.1rj.ru/str/tg_5minphp?boost
Не факт, что для этого канала это будет актуальный формат, но пусть будет.
Проголосовать можно здесь:
https://news.1rj.ru/str/tg_5minphp?boost
Telegram
Пятиминутка PHP
Проголосуйте за канал, чтобы он получил больше возможностей.
🤯8👎6
Стандарты кодирования Symfony (https://symfony.com/doc/current/contributing/code/standards.html) основаны на PSR-12. Иными словами, если код удовлетворяет стандартам Symfony, то он одновременно является и отформатированным по PSR-12. Обратное неверно.
В PhpStorm есть быстрый способ настроить редактор по стандартам кодирования: Settings -> Editor -> Code Style -> PHP -> Set from...
К чему это? Раньше я писал по PSR-12, теперь пишу по Symfony Coding Standards.
P.S. помимо PhpStorm не забудьте настроить и php-cs-fixer
В PhpStorm есть быстрый способ настроить редактор по стандартам кодирования: Settings -> Editor -> Code Style -> PHP -> Set from...
К чему это? Раньше я писал по PSR-12, теперь пишу по Symfony Coding Standards.
P.S. помимо PhpStorm не забудьте настроить и php-cs-fixer
👍25❤1👎1
Олды тут? Прочитал новость про выход свежей версии баг-трекера Trac 1.6 - очень старый баг трекер написанный на Python (в свежей версии добавили поддержку Python 3 😅), и, кажется, это был первый трекер с которым я работал в профессиональной разработке когда-то в начале карьеры. А система контроля версий у нас тогда была CVSNT!
https://news.1rj.ru/str/opennews/11950
https://news.1rj.ru/str/opennews/11950
Telegram
opennet news
Доступна система управления проектами Trac 1.6
После четырёх лет разработки представлен новый стабильный выпуск системы управления проектами Trac 1.6 (ветка 1.5 была экспериментальной), предоставляющей web-интерфейс для работы с репозиториями Subversion и…
После четырёх лет разработки представлен новый стабильный выпуск системы управления проектами Trac 1.6 (ветка 1.5 была экспериментальной), предоставляющей web-интерфейс для работы с репозиториями Subversion и…
👍5🌚1
This media is not supported in your browser
VIEW IN TELEGRAM
В следующей версии Tinkerwell 4 (это REPL хорошо интегрированный с Laravel) появится интеграция с OpenAI - можно будет описать задачу на обычном языке (человеческом) и получить фрагмент кода сгенерированный AI.
На сколько я понял, нужно в настройки Tinkerwell вставить свой OpenAI ключ. Но разработчик также обдумывает вариант дополнительной подписки, тогда свой ключ не понадобится.
На сколько я понял, нужно в настройки Tinkerwell вставить свой OpenAI ключ. Но разработчик также обдумывает вариант дополнительной подписки, тогда свой ключ не понадобится.
👍8👎8💩7
Как вы разделяете директории?
Anonymous Poll
48%
/
31%
DIRECTORY_SEPARATOR
21%
Хочу просто посмотреть результаты
В git есть настройка
Если кратко, то значение
Я пишу «якобы», т.к. на деле каждый раз когда я сталкиваюсь с тем, что у кого-то на windows установлен флаг true - это приводит к проблемам:
- линтеры начинают ругаться
- фиксеры начинают фиксить все файлы проекта
Если погуглить, можно найти множество рекомендаций на stackoverflow и даже в статье выше в одном из первых комментариев: «на windows ставьте
Правильно так: всегда строго
core.autocrlf. Хорошая статья на Хабре с деталями: https://habr.com/ru/articles/703072/Если кратко, то значение
core.autocrlf=true якобы помогает разработчика на Windows с конвертацией окончания строк.Я пишу «якобы», т.к. на деле каждый раз когда я сталкиваюсь с тем, что у кого-то на windows установлен флаг true - это приводит к проблемам:
- линтеры начинают ругаться
- фиксеры начинают фиксить все файлы проекта
Если погуглить, можно найти множество рекомендаций на stackoverflow и даже в статье выше в одном из первых комментариев: «на windows ставьте
core.autocrlf=true» 🤬 Не делайте так!Правильно так: всегда строго
core.autocrlf=false ✅
Более развёрнутая аргументация: https://markentier.tech/posts/2021/10/autocrlf-true-considered-harmful/👍18🤔1
Ваше значение git config --get core.autocrlf
Anonymous Poll
19%
false
10%
true
8%
input
64%
Просто посмотреть результаты
⭐️В закладки: explainshell.com — cервис, помогающий разобраться, что значит каждый из аргументов в консольной команде.
Сервис основан на Ubuntu Manpage, спарсено 29761 инструкция. Использовать очень просто:
1) вставляем команду в текстовое поле и нажимаем Enter;
2) изучаем наглядный результат — команда и каждый аргумент описаны в отдельном блоке.
(узнал из канала https://news.1rj.ru/str/sergei_predvoditelev)
Сервис основан на Ubuntu Manpage, спарсено 29761 инструкция. Использовать очень просто:
1) вставляем команду в текстовое поле и нажимаем Enter;
2) изучаем наглядный результат — команда и каждый аргумент описаны в отдельном блоке.
(узнал из канала https://news.1rj.ru/str/sergei_predvoditelev)
👍16🔥2
Немного теории в пятницу вечером от ChatGPT:
Лямбда-куб — это фреймворк для категоризации и описания систем типов на основе трех основных осей расширения простого типизированного лямбда-исчисления. Каждая ось представляет собой различную форму полиморфизма. Рассмотрим каждую ось:
λ→: Простое типизированное лямбда-исчисление. Это базовая система, где функции имеют типы, и полиморфизма нет.
λ2 (или λP): Добавляет полиморфные типы (Система F). Это означает, что у вас могут быть функции, которые являются параметрически полиморфными, т.е. функции, которые работают с любым типом.
λω: Вводит операторы типов, которые позволяют иметь типы, которые принимают типы и возвращают другие типы.
λPω: Сочетает как полиморфные типы, так и операторы типов.
λΠ: Зависимые типы, где типы могут зависеть от значений.
λΠ2: Сочетает зависимые типы с полиморфными типами.
λΠω: Сочетает зависимые типы с операторами типов.
λΠPω: Самая общая система, сочетающая зависимые типы, полиморфные типы и операторы типов.
Теперь давайте посмотрим, где находится PHPStan:
PHPStan — это инструмент статического анализа для PHP. Он расширяет систему типов PHP, предоставляя более тонкие проверки типов, чем сам язык. Однако система типов PHP и, соответственно, PHPStan не охватывает всю выразительность лямбда-куба.
• В PHP есть базовые аннотации типов для параметров функций и возвращаемых типов, что по крайней мере соответствует уровню λ→.
• С введением обобщений (через PHPStan и другие инструменты) PHP может имитировать некоторое поведение λ2.
• В PHP нет поддержки типов высших порядков, поэтому он не затрагивает ось λω.
• PHPStan не предлагает зависимых типов, поэтому ось λΠ не затрагивается.
В итоге, PHPStan расширяет систему типов PHP и касается аспектов λ2 благодаря поддержке обобщений. Тем не менее, он не углубляется глубоко в лямбда-куб. По сравнению с более продвинутыми системами типов, такими как Haskell или Idris, система типов PHP (даже с PHPStan) относительно проста. Тем не менее, PHPStan является ценным инструментом для разработчиков PHP, стремящихся улучшить надежность своего кода.
Лямбда-куб — это фреймворк для категоризации и описания систем типов на основе трех основных осей расширения простого типизированного лямбда-исчисления. Каждая ось представляет собой различную форму полиморфизма. Рассмотрим каждую ось:
λ→: Простое типизированное лямбда-исчисление. Это базовая система, где функции имеют типы, и полиморфизма нет.
λ2 (или λP): Добавляет полиморфные типы (Система F). Это означает, что у вас могут быть функции, которые являются параметрически полиморфными, т.е. функции, которые работают с любым типом.
λω: Вводит операторы типов, которые позволяют иметь типы, которые принимают типы и возвращают другие типы.
λPω: Сочетает как полиморфные типы, так и операторы типов.
λΠ: Зависимые типы, где типы могут зависеть от значений.
λΠ2: Сочетает зависимые типы с полиморфными типами.
λΠω: Сочетает зависимые типы с операторами типов.
λΠPω: Самая общая система, сочетающая зависимые типы, полиморфные типы и операторы типов.
Теперь давайте посмотрим, где находится PHPStan:
PHPStan — это инструмент статического анализа для PHP. Он расширяет систему типов PHP, предоставляя более тонкие проверки типов, чем сам язык. Однако система типов PHP и, соответственно, PHPStan не охватывает всю выразительность лямбда-куба.
• В PHP есть базовые аннотации типов для параметров функций и возвращаемых типов, что по крайней мере соответствует уровню λ→.
• С введением обобщений (через PHPStan и другие инструменты) PHP может имитировать некоторое поведение λ2.
• В PHP нет поддержки типов высших порядков, поэтому он не затрагивает ось λω.
• PHPStan не предлагает зависимых типов, поэтому ось λΠ не затрагивается.
В итоге, PHPStan расширяет систему типов PHP и касается аспектов λ2 благодаря поддержке обобщений. Тем не менее, он не углубляется глубоко в лямбда-куб. По сравнению с более продвинутыми системами типов, такими как Haskell или Idris, система типов PHP (даже с PHPStan) относительно проста. Тем не менее, PHPStan является ценным инструментом для разработчиков PHP, стремящихся улучшить надежность своего кода.
👍17🤯11❤1
- короткие
- содержательные, без воды
- практичные, для разработчиков
- оторваться невозможно, смотрел как сериал, когда в конце очередной серии хочется смотреть следующую!
https://planetscale.com/learn/courses/mysql-for-developers/introduction/course-introduction
Please open Telegram to view this post
VIEW IN TELEGRAM
Planetscale
MySQL for Developers — PlanetScale
This free MySQL course covers everything you need to know to become an expert in MySQL. The course is geared toward application developers, and offers practical guidance to implement schema, indexes, query improvement, and more.
👍42❤1
✅ Low Coupling
✅ High Cohesion
👆знаменитые паттерны GRASP (https://ru.wikipedia.org/wiki/GRASP?wprov=sfti1). Проблема с ними возникает при переводе на русский: «связность», «связанность», «зацепление», «сопряженность», и другие варианты - попробуйте теперь угадать, что из этого Coupling, а что Cohesion?
Допустим, у вас лично есть чёткое понимание правильного перевода. Но есть ли такое же понимание у вашего собеседника? Совпадает ли оно с вашим?
Вопрос навеян случайной дискуссией в одном телеграм чате, люди спорили пока вдруг не поняли, что говорят об одном и том же, но называют вещи разными словами.
О терминах не спорят, о терминах договариваются. Но уже не первый раз замечаю, что конкретно по этим двум терминам устоявшейся общепринятой договорённости нет. Или есть? Проверим голосованием: как вы называете Cohesion на русском?
✅ High Cohesion
👆знаменитые паттерны GRASP (https://ru.wikipedia.org/wiki/GRASP?wprov=sfti1). Проблема с ними возникает при переводе на русский: «связность», «связанность», «зацепление», «сопряженность», и другие варианты - попробуйте теперь угадать, что из этого Coupling, а что Cohesion?
Допустим, у вас лично есть чёткое понимание правильного перевода. Но есть ли такое же понимание у вашего собеседника? Совпадает ли оно с вашим?
Вопрос навеян случайной дискуссией в одном телеграм чате, люди спорили пока вдруг не поняли, что говорят об одном и том же, но называют вещи разными словами.
О терминах не спорят, о терминах договариваются. Но уже не первый раз замечаю, что конкретно по этим двум терминам устоявшейся общепринятой договорённости нет. Или есть? Проверим голосованием: как вы называете Cohesion на русском?
Wikipedia
GRASP
GRASP (от англ. General Responsibility Assignment Software Patterns — общие шаблоны распределения ответственностей; также отсылает к англ. grasp — «способность быстрого восприятия, понимание, схватывание») — шаблоны, используемые в объектно-ориентированном…
Как вы называете Cohesion на русском?
Anonymous Poll
30%
Связность
21%
Связанность
8%
Сцепление
15%
Зацепление
5%
Сопряженность
31%
Другое / посмотреть ответы
👍6🤪3😱1