Получи случайную криптовалюту за регистрацию!

EazyDev

Логотип телеграм канала @eazydev — EazyDev E
Логотип телеграм канала @eazydev — EazyDev
Адрес канала: @eazydev
Категории: Технологии
Язык: Русский
Количество подписчиков: 41
Описание канала:

Канал о разработке на PHP / NodeJS / Golang, безопасности веб-приложений и т.п. Пишу не часто, но по делу. Зеркало сайта https://blog.eazy-dev.com.

Рейтинги и Отзывы

4.00

3 отзыва

Оценить канал eazydev и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

1

3 звезд

1

2 звезд

0

1 звезд

0


Последние сообщения 2

2021-01-04 16:29:36 Небольшая заметка о том, как не нужно ожидать горутины в golang. Возьмем простую ситуацию — нужно написать программу, которая раз в 2 секунды в фоне отсылает какие-то данные в сторонний сервис. Для отправки по интервалу будем использовать time.Ticker:

func main() {
ticker := time.NewTicker(2 * time.Second)

// Запускаем таймер в фоне
go func() {
for range ticker.C {
log.Printf("Sending data to external service")
}
}()

// Выполняем основную логику
go doSomeLogic();
}

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

// Входим в бесконечный цикл
for {
}

Цикл не означает, что горутина перейдет в режим ожидания или отдаст процессорное время другим горутинам. Наоборот, цикл будет постоянно крутится и нагружать CPU. Некоторые IDE, типа Goland, предупреждают об этом. Если на проекте используется версия golang < 1.14, то при одном CPU, не будет выполняться ни 1 горутина кроме бесконечного цикла.

Поправить это несколькими вариантами. Самый простой, но говнокод:

// Входим в бесконечный цикл
for {
time.Sleep(1 * time.Minute)
}

Здесь ситуация уже получше, потому что цикл будет крутиться не постоянно, а делать паузы. Если пауза будет на несколько миллисекунд, то нагрузка на CPU вернется. Плюс, это решит проблему для golang < 1.14, потому что вызов функции позволит рантайму перейти к выполнению других горутин.

Есть еще несколько способов с использованием sync.waitGroup.wait(), for с пустым select {}, но когда мы говорим о главном цикле приложения, наиболее предпочтительным вариантом в данной ситуации будет дождаться сигнала и завершиться:

func makeSignalShutdownChan() chan os.Signal {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)

return c
}

// ...

<-makeSignalShutdownChan()

Ожидание сообщений из сигналов работает на порядок эффективнее бесконечных циклов.

#golang #backend
75 views13:29
Открыть/Комментировать
2021-01-01 21:57:28 Следующая часть - Создание API на базе Symfony 5. Часть 2. Подготовка окружения.

Перед тем как начать что-то разрабатывать, нужно подготовить окружение. В этой части мы установим начальные зависимости,
настроим docker-compose, создадим конфигурации, условимся по некоторым конвенциям и т.д. Сразу оговорюсь, что я никогда
в жизни не разрабатывал на windows, только на linux или mac, поэтому какие-то вещи на винде просто тупо не взлетят.

Первое, что мы делаем при старте нового проекта, создаем .editorconfig, затем переводим локальную разработку на докер, обмазываемся линтерами, упаковываем все команды в make.

Читать полностью

#symfony #backend #php #api #tutorial
75 viewsedited  18:57
Открыть/Комментировать
2020-12-31 15:36:46 Самое время 31го декабря начать цикл статей на тему Создание API на базе Symfony 5. Это будут лонгриды, поэтому сюда буду постить только начало и ссылку на продолжение.

Проведя более сотни собеседований на разные должности связанные с php, стало понятно, что очень малое кол-во кандидатов понимают как писать API для долгосрочного проекта, чья поддержка будет длиться годами. Типичные ошибки:

- Отсутствие сервисного слоя;
- Отсутствие централизованной обработки исключений;
- Отдача сущностей напрямую клиенту;
- Толстые контроллеры;
- Отсутствие тестов (или присутствие только юнитов);
- И т.д.

Первая часть будет больше введением.

Читать полностью

#symfony #backend #php #api #tutorial
75 viewsedited  12:36
Открыть/Комментировать
2020-12-30 21:14:45 Столкнулся на днях с очень старой дыркой на одном проекте, которая раньше встречалась практически в каждом проекте на Битриксе и до сих пор актуальна Чтобы довести ситуацию до XSS, нужно:

1. Проект на php;
2. Верстальщик, решивший, что писать одинарные кавычки моднее, чем двойные;
3. Разработчик, слабо понимающий в безопасности.

Результатом этого, может быть шаблон типа такого:





Ни htmlentities ни htmlspecialchars не фильтруют одинарную кавычку по умолчанию, поэтому рабочий пейлоад должен начинаться именно с нее: ' onload=alert(1).

Для более безопасного поведения функций, нужно добавить флаг ENT_QUOTES.

Современные шаблонизаторы типа twig и blade изначально эскейпят одинарные кавычки, но если вам довелось работать с php-шаблонами, то нужно иметь это в виду.

#php #backend #frontend #security
127 viewsedited  18:14
Открыть/Комментировать
2020-12-12 22:04:33 Буквально на днях, ФБР подтвердили, что 2й шифр Зодиака удалось расшифровать, с составления которого прошел 51 год.


80 views19:04
Открыть/Комментировать
2020-12-03 19:50:32 Хоть называется и для фронтов, но посмотреть можно и бэкендерам. Очень подробно и интересно.
108 viewsedited  16:50
Открыть/Комментировать
2020-11-26 18:28:57 PHP8 наконец-то зарелизили! Изменений куча. В релиз успели донести именованные аргументы и объявление свойств сразу в конструкторе для удобного проброса зависимостей и создания DTO и Value Object.

Атрибуты и JIT, наверное, самые внушительные изменения.
Как всегда, рекомендуется подождать 8.1 перед обновлением

#php #backend
89 views15:28
Открыть/Комментировать
2020-11-19 12:11:44 Почти 10 лет прошло и сегодня тот день, когда вышла Doctrine 3.

Changelog
82 viewsedited  09:11
Открыть/Комментировать
2020-11-11 18:26:17 Чисто для ознакомления Не думаю, что стоит задумываться об использовании.

https://habr.com/ru/company/vk/blog/527420/

#backend #php
94 viewsedited  15:26
Открыть/Комментировать
2020-10-31 22:40:47 Докладик на вечер - Go Channels Internals / Егор Гришечко (Insolar)

#golang #backend
87 viewsedited  19:40
Открыть/Комментировать