Pull to refresh
33
10
Andrey Helldar @Helldar

Senior PHP Developer

Send message

Механизмы безопасности в Laravel

Level of difficultyHard
Reading time15 min
Views7.8K

Комплексный обзор множества безопасных функций Laravel, которые могут помочь вам предотвратить болезненные ошибки.

Мы рассмотрим следующие механизмы безопасности:

Предотвращение N+1
Защита от частично гидрированных моделей
Опечатки атрибутов и переименованные столбцы
Защита от массового присвоения
Строгость модели
Принудительное выполнение полиморфного сопоставления
Мониторинг долгосрочных событий

Читать далее
Total votes 23: ↑21 and ↓2+19
Comments5

Профайлинг Laravel приложений с XDebug и PHPStorm

Level of difficultyMedium
Reading time3 min
Views4.3K

Профайлинг приложений важный этап перед релизом ресурсоёмкой фичи. Везде трубят про удобную отладку PHP-приложений при помощи XDebug и PHPStorm, однако напрочь забывают про замеры времени операций, которые, порой, превышают те самые 3 секунды, которые пользователь будет ждать на странице. Если у Вас есть метод API, который долго работает, самое время его проверить профайлером XDebug, а PHPStorm поможет красиво визуализировать и изучить файл профиля.

Начнём профайлинг
Total votes 8: ↑8 and ↓0+8
Comments9

Лови мутанта! Мутационные тесты: зачем и как

Level of difficultyMedium
Reading time5 min
Views3.9K

Я очень люблю тесты и считаю, что любой код должен быть покрыт ими, желательно качественными :)  
Поэтому хочу поделиться с вами опытом внедрения мутационных тестов в проект, рассказать зачем оно нужно и какую ценность несет. Рассмотрим пример внедрения Infection в приложение на Laravel. Но сначала немного теории.

Читать далее
Total votes 11: ↑10 and ↓1+9
Comments16

Делай нейминг как сеньор

Reading time13 min
Views114K

Это объект Pizza, там хранится инфа о латте, а заказали его в Restaurant или в Pizzeria? Неудобно? Максимально. Мы читаем код существенно больше, чем пишем. И хочется сразу понимать, что происходит, не играя в квесты «что имел в виду автор», «да как это работает» и «я снова ничего не понял». Без навыка давать хороший нейминг невозможно писать качественный и поддерживаемый код. Про нейминг говорят заодно, в рамках архитектуры и общих инженерных практик. В статье поговорим про него отдельно.

Как получается, что код становится мало понятным даже для его авторов? Почему нейминг так важен? Как придумывать названия, не применяя целые теории нейминга? Как лёгким процессом организовать работу с неймингом в команде? На все эти вопросы мы ответим в статье.

Читать далее
Total votes 186: ↑184 and ↓2+182
Comments221

Простое объяснение принципов SOLID

Reading time7 min
Views285K


Принципы SOLID — это стандарт программирования, который все разработчики должны хорошо понимать, чтобы избегать создания плохой архитектуры. Этот стандарт широко используется в ООП. Если применять его правильно, он делает код более расширяемым, логичным и читабельным. Когда разработчик создаёт приложение, руководствуясь плохой архитектурой, код получается негибким, даже небольшие изменения в нём могут привести к багам. Поэтому нужно следовать принципам SOLID.

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

Чтобы понять принципы SOLID, нужно чётко понимать, как использовать интерфейсы. Если у вас такого понимания нет, то сначала почитайте документацию.

Я буду объяснять SOLID самым простым способом, так что новичкам легче будет разобраться. Будем рассматривать принципы один за другим.
Читать дальше →
Total votes 46: ↑38 and ↓8+30
Comments201

Битовые операции в PHP на примерах

Reading time3 min
Views87K
Навеяно статьей об обработке критических ошибок в PHP. Обратил внимание, что несмотря на то, что коды ошибок в PHP специально заточены под битовые операции, тем не менее, что в примерах статьи, что в комментариях, для проверки кодов ошибок используются обычные операторы сравнения.

Например, встречались такие варианты:
if ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR){…}
или
if(in_array($error['type'], array(E_ERROR, E_PARSE,  E_COMPILE_ERROR)) {…}

В связи с этим решил написать небольшую статью о битовых операциях с примерами их использования.
Читать дальше →
Total votes 242: ↑203 and ↓39+164
Comments162

Зомби-код. Код, живущий своей жизнью

Reading time5 min
Views41K
Предлагаю читателям «Хабрахабра» перевод статьи «Zombie Code When Maintainability Goes Out Window».

Ты бодрый, проворный, быстрый и ты пишешь код, как ветер. Но ты пишешь изменяемый код, который максимально легко может быть исправлен в будущем другими.

Да, скажешь ты? Почему?

Ты не задумывался, что твой код устареет через год? Разве тебя не волнует, что какой-то будущий разработчик испортит нетронутую красоту твоего тщательно обработанного решения? Разве ты не восхищался случайно встреченным, незаменимым, но совершенно устаревшим комком грязи? Хотел бы ты скорее написать зомби-код, который никто кроме тебя не сможет понять, код, который будут расценивать со страхом и трепетом, код, который будет вечно жить в компании, потому что никто не осмелится его изменить?


Читать дальше →
Total votes 60: ↑38 and ↓22+16
Comments42

Необычное свойство Push-уведомлений — время жизни

Reading time3 min
Views7.7K


События проходят и теряют свою актуальность. Письмо, которое вы отправили человеку, сообщающее о новой акции не имеет смысла после конца акции. Как поступить? Пуш-уведомления умеют «умирать», когда в них больше нет необходимости.

TTL — (Time To Live) время жизни. Это важный термин в сети Интернет. Чаще всего он применяется к пакетам данных и означает количество «хопов», которые пакет будет «жить»

В рамках push-уведомлений TTL задает время жизни уведомления в секундах. Более того, если задать его равным 0 (в PushAll -1), то либо уведомление придет немеделенно, либо никогда. По сути, этот параметр задает сколько секунд уведомление будет ждать клиента, пока он присоединиться к пуш-серверу.

Читать дальше →
Total votes 7: ↑5 and ↓2+3
Comments2

Три мелкие но полезные плюшки в Laravel 5.2.22

Reading time1 min
Views9.1K
Совсем недавно состоялся релиз минорной версии 5.2.22 нашего любимого фреймворка Laravel. Наряду с некоторыми небольшими исправлениями, есть несколько новых функций, давайте посмотрим на них.
Читать дальше →
Total votes 16: ↑11 and ↓5+6
Comments3

Что нового ждет нас в Laravel 5.2.23

Reading time3 min
Views12K
В настоящий момент Laravel насчитывает уже 911 участников на GitHub, многие из них активно добавляют новый функционал. Давайте посмотрим что же ждет нас новенького в Laravel версии 5.2.23, которая уже на пороге.
image
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments28

Вышел Zabbix 3.0

Reading time7 min
Views107K
Долгожданная версия открытой системы мониторинга Zabbix обещает нам целый ворох новых возможностей, вставая на путь визуального обновления.
Сегодня хочу поделиться с вами тем, что принес релиз, и чем можно начать пользоваться уже сегодня, скачав новую версию с сайта. Мы также будем рады пригласить всех желающих на Zabbix Meetup в Москве, подробности о котором вы найдете в конце статьи.


Читать дальше →
Total votes 52: ↑52 and ↓0+52
Comments85

36 млн запросов в час, 10000+ постоянно работающих клиентов, на одном сервере, nginx+mysql

Reading time5 min
Views114K
Сложилась ситуация, что участвую в проекте, который работает с достаточно большой нагрузкой. Как уже написал — 36 млн запросов в час. Я много чего прочитал и перепробовал за последний месяц, настраивая сервер; хотелось бы просто сжато и компактно выдать тезисно то, что работает хорошо в такой конфигурации.

Первое, что я заметил — множество советов как все настроить под большую нагрузку. Читайте их внимательно, обычно в тексте найдете, что речь про «высокую нагрузку» в 15-20 тысяч клиентов в сутки. У нас клиентов примерно миллион, активных, ежедневных.

У нас нет денег и мы все делаем за свой счет, поэтому экономим. Итог — весь миллион клиентов обслуживается на одном сервере, вот на таком — EX-60 на hetzner.
Читать дальше →
Total votes 111: ↑96 and ↓15+81
Comments102

Создание msi-пакетов и установка любого ПО средствами групповых политик Windows

Reading time4 min
Views274K
Доброго времени суток, Хабр! Хочу представить интересный, по моему мнению, способ создания msi-инсталляторов для любого программного обеспечения и, как следствие, развертывание его средствами GPO. Подчеркну, что описанный метод не подразумевает создание «слепков» системы, а использует нативные инсталляторы софта, при чем для создания msi применяются только бесплатные для коммерческого использования продукты.
Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments26

58 признаков хорошего интерфейса

Reading time16 min
Views380K
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.

1 Один столбец вместо нескольких


Один столбец точнее отражает то, что вы хотите донести. Пользователи проходят сверху вниз по более предсказуемому пути. В дизайне с несколькими колонками есть риск отвлечения пользователя от основной задачи страницы.

image
Читать дальше →
Total votes 226: ↑182 and ↓44+138
Comments102

Получаем бесплатный SSL сертификат

Reading time4 min
Views516K
Привет, хабр!

О StartSSL я узнал от небезызвестного lissyara, в связи с чем ему очень благодарен.

Для начала расскажу, что же за зверь это. Как известно, SSL сертификаты выдаются центрами сертификации, чьи корневые сертификаты хранятся в хранилище сертификатов браузера\ОС (либо другого ПО, использующего SSL). Цена на большинство сертификатов зашкаливает, и платить приходится за каждый сертификат. Но у StartSSL весьма интересный подход — сами сертификаты у них бесплатные, вы платите только за проверку вашей личности.

Так же не может не радовать наличие русскоязычной поддержки.
Читать дальше →
Total votes 136: ↑123 and ↓13+110
Comments134

Ещё семь фич HTML5, о которых вы могли не знать

Reading time3 min
Views88K
Доброго времени суток!

Все мы достаточно наслышаны об HTML5 и его возможностях. Например, элементы audio и video, которые у всех на слуху. Но несмотря на это, существует парочка тегов, о которых знают далеко не все, и о которых не знал я до недавнего времени. Итак, вот чем я хочу с вами поделиться.
Читать дальше →
Total votes 201: ↑170 and ↓31+139
Comments96

Information

Rating
583-rd
Location
Россия
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead
From 350,000 ₽
PHP
MySQL
Git
OOP
Docker
Redis
SQL
Laravel
Elasticsearch