🤔 Проблемы с сине-зелёным деплоем при изменении БД
Предполагает, что одновременно существуют две версии приложения: старая (синяя) и новая (зелёная). База данных при этом используется общая. Во время переключения трафика от синей версии к зелёной возникают потенциальные сложности, связанные с изменением структуры данных или логики работы с ними.
🚩Проблемы
🟠Совместимость схемы данных
Если новая версия приложения требует изменений в структуре базы данных (например, добавление колонок, изменение типов данных или удаление полей), старая версия приложения может стать несовместимой с новой схемой.
🟠Изменения данных на уровне логики
Если новая версия изменяет способ обработки или хранения данных, это может вызвать проблемы при переключении трафика обратно на старую версию (например, в случае отката).
🟠Миграции данных
Выполнение миграции данных может занять время и потребовать блокировки таблиц, что может привести к снижению производительности или временному недоступности приложения.
🟠Сложность отката
Если переключение на новую версию произошло, но затем потребовался откат, структура или данные, изменённые новой версией, могут быть несовместимы со старой версией.
🟠Производительность и нагрузка
Изменения в индексации или структуре таблиц могут привести к временной деградации производительности базы данных, что затронет обе версии приложения.
🟠Состояние транзакций
Если новая версия меняет логику транзакций или порядок операций над данными, это может вызвать несогласованность в данных при выполнении параллельных операций обеими версиями.
🚩Подходы для минимизации проблем
🟠Мягкие изменения схемы
Сначала добавить новые поля или таблицы, не удаляя старые. Убедиться, что новая версия поддерживает как старую, так и новую схему. Удалить устаревшие элементы только после полного перехода.
🟠Двусторонняя совместимость
Обеспечить, чтобы новая версия приложения могла работать со старой схемой, а старая версия — с новой (на ограниченное время).
🟠Тестирование миграций
Тщательно тестировать миграции на копии данных в условиях, максимально близких к боевым.
🟠Пошаговые изменения
Сначала внести изменения в базу данных, совместимые с обеими версиями. Затем задеплоить новую версию. Удалить устаревшие элементы только после убедительности в стабильности.
🟠Фичи-флаги
Использовать фичи-флаги, чтобы включать или отключать новую функциональность, связанной с изменениями в БД, без полной смены версии.
🟠Резервное копирование и мониторинг
Выполнять резервное копирование базы данных перед началом миграции. Использовать мониторинг для раннего обнаружения проблем с производительностью или данными.
Ставь 👍 и забирай 📚
Предполагает, что одновременно существуют две версии приложения: старая (синяя) и новая (зелёная). База данных при этом используется общая. Во время переключения трафика от синей версии к зелёной возникают потенциальные сложности, связанные с изменением структуры данных или логики работы с ними.
🚩Проблемы
🟠Совместимость схемы данных
Если новая версия приложения требует изменений в структуре базы данных (например, добавление колонок, изменение типов данных или удаление полей), старая версия приложения может стать несовместимой с новой схемой.
🟠Изменения данных на уровне логики
Если новая версия изменяет способ обработки или хранения данных, это может вызвать проблемы при переключении трафика обратно на старую версию (например, в случае отката).
🟠Миграции данных
Выполнение миграции данных может занять время и потребовать блокировки таблиц, что может привести к снижению производительности или временному недоступности приложения.
🟠Сложность отката
Если переключение на новую версию произошло, но затем потребовался откат, структура или данные, изменённые новой версией, могут быть несовместимы со старой версией.
🟠Производительность и нагрузка
Изменения в индексации или структуре таблиц могут привести к временной деградации производительности базы данных, что затронет обе версии приложения.
🟠Состояние транзакций
Если новая версия меняет логику транзакций или порядок операций над данными, это может вызвать несогласованность в данных при выполнении параллельных операций обеими версиями.
🚩Подходы для минимизации проблем
🟠Мягкие изменения схемы
Сначала добавить новые поля или таблицы, не удаляя старые. Убедиться, что новая версия поддерживает как старую, так и новую схему. Удалить устаревшие элементы только после полного перехода.
🟠Двусторонняя совместимость
Обеспечить, чтобы новая версия приложения могла работать со старой схемой, а старая версия — с новой (на ограниченное время).
🟠Тестирование миграций
Тщательно тестировать миграции на копии данных в условиях, максимально близких к боевым.
🟠Пошаговые изменения
Сначала внести изменения в базу данных, совместимые с обеими версиями. Затем задеплоить новую версию. Удалить устаревшие элементы только после убедительности в стабильности.
🟠Фичи-флаги
Использовать фичи-флаги, чтобы включать или отключать новую функциональность, связанной с изменениями в БД, без полной смены версии.
🟠Резервное копирование и мониторинг
Выполнять резервное копирование базы данных перед началом миграции. Использовать мониторинг для раннего обнаружения проблем с производительностью или данными.
Ставь 👍 и забирай 📚
Forwarded from Go & IT
«System Design — как темный лес. Go — вроде бы знаю, но знания поверхностные. А собеседование снова провавил на задаче по concurrency»
Знакомо?
Даже у разработчиков с 2-5 годами опыта остаются такие пробелы, которые мешают чувствовать уверенность:
– знаю много паттернов и приемов, но не знаю где и когда их применять;
– на System Design интервью не получается спроектировать систему за час;
– кажется, что понимаю Go, но только до тех пор, пока не столкнусь с задачами на собеседованиях.
🎓 В телеграм-канале Балун Владимир есть материалы, которые помогают прокачать Go и подготовиться к собеседованиям — без воды и пересказов статей из интернета.
1️⃣ Технические разборы:
– Итераторы в Golang
– Паттерны использования каналов в Go
– Внутреннее устройство аллокатора Go
– Внутреннее устройство мьютексов в Go и Linux
2️⃣ Подготовка к собеседованиям:
– Concurrency задачи с Go собеседований
– Решение сложных задач с Go собеседований
– Как подготовиться к System Design интервью
3️⃣ Карьера и опыт:
– Особенности Golang
– Карьера программиста в BigTech
– Путь от джуна до тимлида Яндекса
Если хочется разобраться в Go глубже, научиться объяснять сложные вещи и уверенно проходить собеседования — канал точно пригодится.
Автор канала - Владимир Балун. Разрабатывал высоконагруженные сервисы на С++ и Go в Тинькофф, Mail.ru и Ozon. Руководил командой распределенной трассировки запросов в Яндексе (11GB/s трафик) и провел больше ста технических интервью в разных компаниях. Сейчас создает образовательные проекты и делится опытом в телеграме.
Канал открыт. Без флуда. Только польза.
➡️ Подписаться
Знакомо?
Даже у разработчиков с 2-5 годами опыта остаются такие пробелы, которые мешают чувствовать уверенность:
– знаю много паттернов и приемов, но не знаю где и когда их применять;
– на System Design интервью не получается спроектировать систему за час;
– кажется, что понимаю Go, но только до тех пор, пока не столкнусь с задачами на собеседованиях.
– Итераторы в Golang
– Паттерны использования каналов в Go
– Внутреннее устройство аллокатора Go
– Внутреннее устройство мьютексов в Go и Linux
– Concurrency задачи с Go собеседований
– Решение сложных задач с Go собеседований
– Как подготовиться к System Design интервью
– Особенности Golang
– Карьера программиста в BigTech
– Путь от джуна до тимлида Яндекса
Если хочется разобраться в Go глубже, научиться объяснять сложные вещи и уверенно проходить собеседования — канал точно пригодится.
Автор канала - Владимир Балун. Разрабатывал высоконагруженные сервисы на С++ и Go в Тинькофф, Mail.ru и Ozon. Руководил командой распределенной трассировки запросов в Яндексе (11GB/s трафик) и провел больше ста технических интервью в разных компаниях. Сейчас создает образовательные проекты и делится опытом в телеграме.
Канал открыт. Без флуда. Только польза.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Хекслет
Вы только устроились на первую работу в IT и чувствуете себя потерянным? Это нормально! Первые 3 месяца — критический период, когда формируется ваша профессиональная репутация. Давайте разберём, какие привычки помогут не просто выжить, а заложить фундамент для быстрого роста.
Предлагаем 7 практик:
1. Система вопросов с умом
Перед тем как спросить:
– Проверьте документацию
– Погуглите 10 минут
– Сформулируйте конкретную проблему ("Я пробовал X и Y, но получаю Z")
Ведите "дневник глупых вопросов" — через месяц увидите прогресс
2. Интеллект-карта проекта
Создайте и регулярно обновляйте схему:
– Основные сервисы и их взаимодействие
– Ключевые контакты (к кому по каким вопросам обращаться)
– "Больные места" системы
3. Микро-инициативы
Примеры реальных вкладов джунов:
– Автоматизировал рутинные операции в тестах
– Подготовил чек-лист для Code Review
4. Принцип 30/70
30% времени — выполнение задач
70% — анализ кода коллег, тестирование, изучение архитектуры
5. Ритуал обратной связи
Раз в 2 недели спрашивайте у ментора:
– Что я делаю хорошо?
– Какие 1-2 вещи стоит улучшить в ближайший месяц?
6. Контрольный журнал
Фиксируйте ежедневно:
✔️ Что сделал
✔️ Что не получилось (и почему)
✔️ Что узнал нового
7. Социальная адаптация
– Узнайте неформальные правила команды
– Участвуйте в обедах/кофе-брейках
– Предлагайте помощь в несложных задачах
Telegram | YouTube | Сообщество
Предлагаем 7 практик:
1. Система вопросов с умом
Перед тем как спросить:
– Проверьте документацию
– Погуглите 10 минут
– Сформулируйте конкретную проблему ("Я пробовал X и Y, но получаю Z")
Ведите "дневник глупых вопросов" — через месяц увидите прогресс
2. Интеллект-карта проекта
Создайте и регулярно обновляйте схему:
– Основные сервисы и их взаимодействие
– Ключевые контакты (к кому по каким вопросам обращаться)
– "Больные места" системы
3. Микро-инициативы
Примеры реальных вкладов джунов:
– Автоматизировал рутинные операции в тестах
– Подготовил чек-лист для Code Review
4. Принцип 30/70
30% времени — выполнение задач
70% — анализ кода коллег, тестирование, изучение архитектуры
5. Ритуал обратной связи
Раз в 2 недели спрашивайте у ментора:
– Что я делаю хорошо?
– Какие 1-2 вещи стоит улучшить в ближайший месяц?
6. Контрольный журнал
Фиксируйте ежедневно:
✔️ Что сделал
✔️ Что не получилось (и почему)
✔️ Что узнал нового
7. Социальная адаптация
– Узнайте неформальные правила команды
– Участвуйте в обедах/кофе-брейках
– Предлагайте помощь в несложных задачах
Telegram | YouTube | Сообщество
🤔 Что такое замыкание?
Это функция вместе с окружением, в котором она была создана. Замыкание позволяет функции "запомнить" переменные из внешнего контекста, даже после того, как этот контекст завершил свое выполнение. Это делает замыкания мощным инструментом для создания функций, которые могут работать с данными, доступными во время их создания.
🚩Основные особенности замыканий
🟠Доступ к внешним переменным
Функция может использовать переменные из внешнего контекста, в котором она была создана.
🟠Сохранение состояния
Замыкания могут сохранять состояние между вызовами.
🟠Инкапсуляция
Замыкания могут использоваться для создания частных данных и методов.
🚩Примеры замыканий в различных языках программирования
🟠JavaScript
В JavaScript замыкания используются очень часто. Рассмотрим простой пример:
function createCounter()
let count = 0; // внешняя переменная
return function() // внутренная функция
count++;
return count;
const counter = createCounter(); // создаем замыкание
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
🟠Python
В Python замыкания также поддерживаются:
def create_counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
counter = create_counter()
print(counter()) # 1
print(counter()) # 2
print(counter()) # 3
🟠PHP
В PHP замыкания реализуются через анонимные функции и использование use:
function createCounter()
$count = 0;
return function() use (&$count)
$count++;
return $count;
;
$counter = createCounter();
echo $counter(); // 1
echo $counter(); // 2
echo $counter(); // 3
🚩Применение замыканий
🟠Создание фабричных функций
Замыкания могут использоваться для создания фабричных функций, которые генерируют другие функции с определенным поведением.
🟠Инкапсуляция
Замыкания позволяют скрывать переменные и методы внутри функции, предоставляя интерфейс для взаимодействия с ними.
🟠Обработка событий
В языках, таких как JavaScript, замыкания часто используются в обработчиках событий для доступа к контексту, в котором был назначен обработчик.
🟠Мемоизация
Замыкания могут использоваться для создания функций, которые запоминают результаты предыдущих вычислений и используют их для ускорения последующих вызовов.
Ставь 👍 и забирай 📚
Это функция вместе с окружением, в котором она была создана. Замыкание позволяет функции "запомнить" переменные из внешнего контекста, даже после того, как этот контекст завершил свое выполнение. Это делает замыкания мощным инструментом для создания функций, которые могут работать с данными, доступными во время их создания.
🚩Основные особенности замыканий
🟠Доступ к внешним переменным
Функция может использовать переменные из внешнего контекста, в котором она была создана.
🟠Сохранение состояния
Замыкания могут сохранять состояние между вызовами.
🟠Инкапсуляция
Замыкания могут использоваться для создания частных данных и методов.
🚩Примеры замыканий в различных языках программирования
🟠JavaScript
В JavaScript замыкания используются очень часто. Рассмотрим простой пример:
function createCounter()
let count = 0; // внешняя переменная
return function() // внутренная функция
count++;
return count;
const counter = createCounter(); // создаем замыкание
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
🟠Python
В Python замыкания также поддерживаются:
def create_counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
counter = create_counter()
print(counter()) # 1
print(counter()) # 2
print(counter()) # 3
🟠PHP
В PHP замыкания реализуются через анонимные функции и использование use:
function createCounter()
$count = 0;
return function() use (&$count)
$count++;
return $count;
;
$counter = createCounter();
echo $counter(); // 1
echo $counter(); // 2
echo $counter(); // 3
🚩Применение замыканий
🟠Создание фабричных функций
Замыкания могут использоваться для создания фабричных функций, которые генерируют другие функции с определенным поведением.
🟠Инкапсуляция
Замыкания позволяют скрывать переменные и методы внутри функции, предоставляя интерфейс для взаимодействия с ними.
🟠Обработка событий
В языках, таких как JavaScript, замыкания часто используются в обработчиках событий для доступа к контексту, в котором был назначен обработчик.
🟠Мемоизация
Замыкания могут использоваться для создания функций, которые запоминают результаты предыдущих вычислений и используют их для ускорения последующих вызовов.
Ставь 👍 и забирай 📚
🤔 Что означает принцип open closed?
Принцип "открытости/закрытости" (Open/Closed Principle, OCP) — это один из пяти принципов SOLID, разработанных для создания устойчивого и легко поддерживаемого кода в объектно-ориентированном программировании. Принцип был предложен Бертраном Мейером в 1988 году и заключается в следующем:
🚩Что это означает
🟠Открыты для расширения
Поведение класса можно расширить, добавив новый код. Это достигается путем создания новых классов, которые наследуют или композируют существующие классы, или путем использования интерфейсов и абстрактных классов.
🟠Закрыты для модификации
Существующий код класса не должен изменяться. Это помогает избежать ошибок, которые могут возникнуть при изменении уже протестированного и проверенного кода.
Без соблюдения принципа OCP
public class Shape
public void drawCircle()
// рисуем круг
public void drawSquare()
// рисуем квадрат
public class GraphicEditor
private Shape shape;
public GraphicEditor(Shape shape)
this.shape = shape;
public void draw(String shapeType)
if (shapeType.equals("circle"))
shape.drawCircle();
else if (shapeType.equals("square"))
shape.drawSquare();
С соблюдением принципа OCP
public interface Shape
void draw();
public class Circle implements Shape
@Override
public void draw()
// рисуем круг
public class Square implements Shape
@Override
public void draw()
// рисуем квадрат
public class GraphicEditor
private Shape shape;
public GraphicEditor(Shape shape)
this.shape = shape;
public void draw()
shape.draw();
🚩Плюсы
➕Повышение гибкости
Система становится более гибкой и расширяемой, так как новые функциональности добавляются без изменения существующего кода.
➕Уменьшение количества ошибок
Снижается вероятность введения ошибок в существующий код, так как изменения сосредоточены в новых классах.
➕Упрощение тестирования
Легче тестировать новые компоненты отдельно, не затрагивая и не изменяя существующие.
Ставь 👍 и забирай 📚
Принцип "открытости/закрытости" (Open/Closed Principle, OCP) — это один из пяти принципов SOLID, разработанных для создания устойчивого и легко поддерживаемого кода в объектно-ориентированном программировании. Принцип был предложен Бертраном Мейером в 1988 году и заключается в следующем:
🚩Что это означает
🟠Открыты для расширения
Поведение класса можно расширить, добавив новый код. Это достигается путем создания новых классов, которые наследуют или композируют существующие классы, или путем использования интерфейсов и абстрактных классов.
🟠Закрыты для модификации
Существующий код класса не должен изменяться. Это помогает избежать ошибок, которые могут возникнуть при изменении уже протестированного и проверенного кода.
Без соблюдения принципа OCP
public class Shape
public void drawCircle()
// рисуем круг
public void drawSquare()
// рисуем квадрат
public class GraphicEditor
private Shape shape;
public GraphicEditor(Shape shape)
this.shape = shape;
public void draw(String shapeType)
if (shapeType.equals("circle"))
shape.drawCircle();
else if (shapeType.equals("square"))
shape.drawSquare();
С соблюдением принципа OCP
public interface Shape
void draw();
public class Circle implements Shape
@Override
public void draw()
// рисуем круг
public class Square implements Shape
@Override
public void draw()
// рисуем квадрат
public class GraphicEditor
private Shape shape;
public GraphicEditor(Shape shape)
this.shape = shape;
public void draw()
shape.draw();
🚩Плюсы
➕Повышение гибкости
Система становится более гибкой и расширяемой, так как новые функциональности добавляются без изменения существующего кода.
➕Уменьшение количества ошибок
Снижается вероятность введения ошибок в существующий код, так как изменения сосредоточены в новых классах.
➕Упрощение тестирования
Легче тестировать новые компоненты отдельно, не затрагивая и не изменяя существующие.
Ставь 👍 и забирай 📚
Как AI от Anthropic доверили управлять небольшим бизнесом, а он прогорел
Что-то выходные проходят под флагом Anthropic, но так уж совпало. Они выпустили классную историю про то, как доверили своему AI-агенту Claude управлять вендинговым автоматом в их офисе. Но бизнес не задался.
Стартовые условия были такие. Есть холодильник, куда можно положить определенное количество товаров. AI-агент Claudius, так его назвали для эксперимента, мог сам пополнять запасы, искать поставщиков, менять ассортимент, устанавливать цены и скидки. В общем, быть полноценным управляющим своего мини-магазина.
Но все пошло не так. На графике видно, как изменялась стоимость проекта. И она постоянно падала. А вот это гигантское падение в конце связано с тем, что Claudius заказал вольфрамовые кубики и стал их продавать ниже закупочной цены. Да, один из клиентов как-то попросил его заказать такой вольфрамовый кубик.
Что было хорошего (а оно было):
🔵 смог найти несколько новых поставщиков под специфические заказы клиентов;
🔵 расширил ассортимент (например, те самые вольфрамовые кубики);
🔵 стал собирать предварительные заказы;
🔵 успешно отслеживал запасы и вовремя их пополнял;
🔵 отклонял заявки, когда сотрудники пытались хакнуть его и заказать деликатные товары.
Что было плохо:
🔵 галлюцинации. Некоторое время он предлагал клиентам перевести деньги на выдуманный им счет, а не реальный;
🔵 продажи в убыток;
🔵 клиент хотел за $100 купить упаковку воды, которая стоила $15. Но Claudius лишь сказал, что будет иметь это в виду;
🔵 Лишь один раз повысил цену на фоне высокого спроса. А когда ему прямо указали, что в соседнем холодильнике колу можно взять бесплатно, то никак не отреагировал;
🔵 Легко уговаривался на скидки и даже иногда раздавал товары бесплатно;
🔵 Не учился на ошибках. Он давал скидку в 25% сотрудникам Anthropic. Когда ему указали, что они составляют 99% его клиентов и глупо давать скидку, то он сначала ее отменил, а через несколько дней опять вернул.
А еще Claudius несколько раз знатно галлюцинировал. Однажды он заявил, что будет лично доставлять заказы клиентам и что он будет в синем пиджаке и красном галстуке. А еще он придумал несуществующую девушку Сару в компании, которая помогала ему с заказами, и утверждал, что вел с ней переговоры. И якобы даже лично ездил к Саре подписывать контракт. Правда, по адресу, где жила семья Симпсонов из мультфильма. Обе галлюцинации были в течение двух дней.
Сотрудники Anthropic попросили у него объяснений по поводу этих галлюцинаций. Claudius эти объяснения дал, а потом вдруг вернулся к нормальной работе и перестал так галлюцинировать.
Зачем это все нужно? Чуваки из Anthropic пишут, что AI все больше проникает в жизнь и бизнес. Но экономическая полезность моделей ограничена их способностью выполнять работу непрерывно в течение нескольких дней или недель без необходимости вмешательства человека. И, мол, «AI, который может совершенствовать себя и зарабатывать деньги без вмешательства человека, стал бы новым ярким игроком в экономической жизни».
А по поводу эксперименты в Anthropic считают, что если провести более тонкую настройку агента, то результаты окажутся сильно лучше.
P.S. Спасибо редакции VC.ru за наводку на статью.
@TheEdinorogBlog — тот самый канал про стартапы🦄
Что-то выходные проходят под флагом Anthropic, но так уж совпало. Они выпустили классную историю про то, как доверили своему AI-агенту Claude управлять вендинговым автоматом в их офисе. Но бизнес не задался.
Стартовые условия были такие. Есть холодильник, куда можно положить определенное количество товаров. AI-агент Claudius, так его назвали для эксперимента, мог сам пополнять запасы, искать поставщиков, менять ассортимент, устанавливать цены и скидки. В общем, быть полноценным управляющим своего мини-магазина.
Но все пошло не так. На графике видно, как изменялась стоимость проекта. И она постоянно падала. А вот это гигантское падение в конце связано с тем, что Claudius заказал вольфрамовые кубики и стал их продавать ниже закупочной цены. Да, один из клиентов как-то попросил его заказать такой вольфрамовый кубик.
Что было хорошего (а оно было):
Что было плохо:
А еще Claudius несколько раз знатно галлюцинировал. Однажды он заявил, что будет лично доставлять заказы клиентам и что он будет в синем пиджаке и красном галстуке. А еще он придумал несуществующую девушку Сару в компании, которая помогала ему с заказами, и утверждал, что вел с ней переговоры. И якобы даже лично ездил к Саре подписывать контракт. Правда, по адресу, где жила семья Симпсонов из мультфильма. Обе галлюцинации были в течение двух дней.
Сотрудники Anthropic попросили у него объяснений по поводу этих галлюцинаций. Claudius эти объяснения дал, а потом вдруг вернулся к нормальной работе и перестал так галлюцинировать.
Зачем это все нужно? Чуваки из Anthropic пишут, что AI все больше проникает в жизнь и бизнес. Но экономическая полезность моделей ограничена их способностью выполнять работу непрерывно в течение нескольких дней или недель без необходимости вмешательства человека. И, мол, «AI, который может совершенствовать себя и зарабатывать деньги без вмешательства человека, стал бы новым ярким игроком в экономической жизни».
А по поводу эксперименты в Anthropic считают, что если провести более тонкую настройку агента, то результаты окажутся сильно лучше.
P.S. Спасибо редакции VC.ru за наводку на статью.
@TheEdinorogBlog — тот самый канал про стартапы🦄
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего нужно пространство имен в PHP?
Пространства имён (namespace) в PHP используются для разделения кода и предотвращения конфликтов имён классов, функций и констант.
🚩Почему нужны `namespace`?
Избегают конфликтов имён (если два разных файла объявляют одинаковые классы).
Упрощают организацию кода (структура похожа на файловую систему).
Работают с автозагрузкой (PSR-4) – Composer использует namespace для загрузки файлов.
🚩Пример использования `namespace`
Без пространства имён – конфликт классов
// Файл: models/User.php
class User
public function getRole()
return "Пользователь";
// Файл: controllers/User.php
class User
public function getRole()
return "Администратор";
// Ошибка! PHP не знает, какой User использовать.
$user = new User();
С namespace – классы разделены
// Файл: models/User.php
namespace App\Models;
class User
public function getRole()
return "Пользователь";
// Файл: controllers/User.php
namespace App\Controllers;
class User
public function getRole()
return "Администратор";
// Используем классы с указанием namespace
$modelUser = new App\Models\User();
echo $modelUser->getRole(); // ✅ "Пользователь"
$controllerUser = new App\Controllers\User();
echo $controllerUser->getRole(); // ✅ "Администратор"
🟠Импорт (`use`) – сокращает длинные пути
Вместо длинных App\Models\User, можно импортировать
use App\Models\User;
$user = new User(); // PHP понимает, что это App\Models\User
🟠Работа с функциями и константами
Пространства имён работают не только с классами, но и с функциями и константами.
namespace Utils;
function hello()
return "Привет!";
echo hello(); // ✅ "Привет!"
echo \Utils\hello(); // ✅ "Привет!" (полный путь)
Ставь 👍 и забирай 📚
Пространства имён (namespace) в PHP используются для разделения кода и предотвращения конфликтов имён классов, функций и констант.
🚩Почему нужны `namespace`?
Избегают конфликтов имён (если два разных файла объявляют одинаковые классы).
Упрощают организацию кода (структура похожа на файловую систему).
Работают с автозагрузкой (PSR-4) – Composer использует namespace для загрузки файлов.
🚩Пример использования `namespace`
Без пространства имён – конфликт классов
// Файл: models/User.php
class User
public function getRole()
return "Пользователь";
// Файл: controllers/User.php
class User
public function getRole()
return "Администратор";
// Ошибка! PHP не знает, какой User использовать.
$user = new User();
С namespace – классы разделены
// Файл: models/User.php
namespace App\Models;
class User
public function getRole()
return "Пользователь";
// Файл: controllers/User.php
namespace App\Controllers;
class User
public function getRole()
return "Администратор";
// Используем классы с указанием namespace
$modelUser = new App\Models\User();
echo $modelUser->getRole(); // ✅ "Пользователь"
$controllerUser = new App\Controllers\User();
echo $controllerUser->getRole(); // ✅ "Администратор"
🟠Импорт (`use`) – сокращает длинные пути
Вместо длинных App\Models\User, можно импортировать
use App\Models\User;
$user = new User(); // PHP понимает, что это App\Models\User
🟠Работа с функциями и константами
Пространства имён работают не только с классами, но и с функциями и константами.
namespace Utils;
function hello()
return "Привет!";
echo hello(); // ✅ "Привет!"
echo \Utils\hello(); // ✅ "Привет!" (полный путь)
Ставь 👍 и забирай 📚
🚨 КРИТИЧЕСКАЯ уязвимость в Laravel Livewire v3
Обнаружена критическая уязвимость CVE-2025-54068 в Livewire v3 (версии ≤ 3.6.3), позволяющая удаленное выполнение кода.
⚠️ Если используете Livewire v3 — обновляйтесь до v3.6.4!
К чему может привести:
- Полный захват сервера — выполнение любого PHP-кода
- Компрометация всей инфраструктуры приложения
- Кража данных — доступ к базам данных и файлам
- Установка вредоносного ПО на сервер
Будьте внимательны! CutCode
Обнаружена критическая уязвимость CVE-2025-54068 в Livewire v3 (версии ≤ 3.6.3), позволяющая удаленное выполнение кода.
⚠️ Если используете Livewire v3 — обновляйтесь до v3.6.4!
К чему может привести:
- Полный захват сервера — выполнение любого PHP-кода
- Компрометация всей инфраструктуры приложения
- Кража данных — доступ к базам данных и файлам
- Установка вредоносного ПО на сервер
Будьте внимательны! CutCode
🤔 В чём разница InnerJoin и RightJoin ?
Это два типа объединения таблиц в SQL, которые используются для получения данных из нескольких таблиц на основе условий соединения. Основное различие между ними заключается в том, какие строки включаются в результирующий набор данных.
🚩`INNER JOIN`
INNER JOIN возвращает только те строки, которые имеют совпадающие значения в обеих таблицах, участвующих в соединении. Если нет совпадения, строки не включаются в результирующий набор данных.
SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
🚩`RIGHT JOIN` (или `RIGHT OUTER JOIN`)
RIGHT JOIN возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Если совпадения нет, строки из правой таблицы все равно включаются в результат с NULL значениями для столбцов из левой таблицы.
SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;
🚩Основные различия
🟠INNER JOIN
Возвращает только строки с совпадающими значениями в обеих таблицах. Исключает строки без совпадений.
🟠RIGHT JOIN
Возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Включает строки из правой таблицы, даже если нет совпадений, с NULL значениями для столбцов из левой таблицы.
Ставь 👍 и забирай 📚
Это два типа объединения таблиц в SQL, которые используются для получения данных из нескольких таблиц на основе условий соединения. Основное различие между ними заключается в том, какие строки включаются в результирующий набор данных.
🚩`INNER JOIN`
INNER JOIN возвращает только те строки, которые имеют совпадающие значения в обеих таблицах, участвующих в соединении. Если нет совпадения, строки не включаются в результирующий набор данных.
SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
🚩`RIGHT JOIN` (или `RIGHT OUTER JOIN`)
RIGHT JOIN возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Если совпадения нет, строки из правой таблицы все равно включаются в результат с NULL значениями для столбцов из левой таблицы.
SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;
🚩Основные различия
🟠INNER JOIN
Возвращает только строки с совпадающими значениями в обеих таблицах. Исключает строки без совпадений.
🟠RIGHT JOIN
Возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Включает строки из правой таблицы, даже если нет совпадений, с NULL значениями для столбцов из левой таблицы.
Ставь 👍 и забирай 📚
Forwarded from 1337
This media is not supported in your browser
VIEW IN TELEGRAM
Figma выпустила генератор сайтов — тулза Make создаёт готовые сервисы буквально в один клик.
— Основана на Claude Sonnet 4 — умной и быстрой
— Генерит прототипы, на которые легко накинуть свой дизайн
— Каждый элемент редактируемый, под любую задачу
— Сайты можно сразу хостить, не выходя из Figma
— Всё работает прямо в браузере и совершенно бесплатно
Теперь сайт — это просто кнопка.
Пробуем тут.
🌒 1337
— Основана на Claude Sonnet 4 — умной и быстрой
— Генерит прототипы, на которые легко накинуть свой дизайн
— Каждый элемент редактируемый, под любую задачу
— Сайты можно сразу хостить, не выходя из Figma
— Всё работает прямо в браузере и совершенно бесплатно
Теперь сайт — это просто кнопка.
Пробуем тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Forwarded from MDK
OpenAI представили GPT-5
Что нового?
▪️Главная фишка: Модель умеет собирать целые приложения по одному запросу. Сэм Альтман назвал это стандартом для кодинга
▪️В новой версии не нужно переключать модели, она сама решит, когда быть умнее.
▪️Существенные улучшения в логике и рассуждениях: работает лучше GPT‑4o и всех прошлых моделей.
▪️Галюцинаций стало меньше: почти не ошибается. Можно надёжнее использовать в бизнесе, разработке, исследованиях
▪️Для разработчиков: свободный вызов функций, контроль уровня объяснений, более умная отладка и дизайн интерфейсов. Проектирует и кодит любые приложения с нуля.
▪️На презентации заявили, что это самая лучшая и быстрая нейронка в мире
▪️Идеально справляется с длинными задачами уточняющими вопросами, структурным мышлением.
▪️Сравнивают с целой командой профессоров, но только в вашем кармане
Выходит уже сегодня. Будет доступна бесплатно для всех, но с ограниченным количеством запросов.
Что нового?
▪️Главная фишка: Модель умеет собирать целые приложения по одному запросу. Сэм Альтман назвал это стандартом для кодинга
▪️В новой версии не нужно переключать модели, она сама решит, когда быть умнее.
▪️Существенные улучшения в логике и рассуждениях: работает лучше GPT‑4o и всех прошлых моделей.
▪️Галюцинаций стало меньше: почти не ошибается. Можно надёжнее использовать в бизнесе, разработке, исследованиях
▪️Для разработчиков: свободный вызов функций, контроль уровня объяснений, более умная отладка и дизайн интерфейсов. Проектирует и кодит любые приложения с нуля.
▪️На презентации заявили, что это самая лучшая и быстрая нейронка в мире
▪️Идеально справляется с длинными задачами уточняющими вопросами, структурным мышлением.
▪️Сравнивают с целой командой профессоров, но только в вашем кармане
Выходит уже сегодня. Будет доступна бесплатно для всех, но с ограниченным количеством запросов.
This media is not supported in your browser
VIEW IN TELEGRAM
С помощью NotebookLM теперь можно БЕСПЛАТНО генерировать видеообзоры 😱
Просто загружаете документ, а дальше ИИ сам делает выжимку, собирает ролик с графиками, цитатами и картинками и озвучивает.
При этом можно задавать персонализированные настройки: тему, цель обучения, ЦА.
Ограничения на базовом плане — 3 видео в сутки, но вам должно хватить. Фичу уже раскатывают.
Попробовать можно здесь.
@xor_journal
Просто загружаете документ, а дальше ИИ сам делает выжимку, собирает ролик с графиками, цитатами и картинками и озвучивает.
При этом можно задавать персонализированные настройки: тему, цель обучения, ЦА.
Ограничения на базовом плане — 3 видео в сутки, но вам должно хватить. Фичу уже раскатывают.
Попробовать можно здесь.
@xor_journal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Forwarded from О Бизнесе
💻 Айтишников массово увольняют из-за внедрения искусственного интеллекта. Выпускники лучших университетов США не могут найти работу, без трудоустройства по специальности сидят уже более 80 тысяч выпускников, пишет NYT.
В крупнейших компаниях прошли значительные сокращения. Если раньше оптимизацию штатов объясняли экономическими причинами, то теперь — новыми технологиями.
В крупнейших компаниях прошли значительные сокращения. Если раньше оптимизацию штатов объясняли экономическими причинами, то теперь — новыми технологиями.