Pull to refresh
10
0
Назаров Сергей @MrMYSTIC

wed-developer

Send message

Решение проблемы N+1 запроса без увеличения потребления памяти в Laravel

Reading time 6 min
Views 25K

Одна из основных проблем разработчиков, когда они создают приложение с ORM — это N+1 запрос в их приложениях. Проблема N+1 запроса — это не эффективный способ обращения к базе данных, когда приложение генерирует запрос на каждый вызов объекта. Эта проблема обычно возникает, когда мы получаем список данных из базы данных без использования ленивой или жадной загрузки (lazy load, eager load). К счастью, Laravel с его ORM Eloquent предоставляет инструменты, для удобной работы, но они имеют некоторые недостатки.
В этой статье рассмотрим проблему N+1, способы ее решения и оптимизации потребления памяти.

Читать дальше →
Total votes 26: ↑25 and ↓1 +24
Comments 26

Создание собственного пакета для Laravel Nova: OptimalImage

Reading time 7 min
Views 4K

Работая над новым проектом, для администрирования которого используется Laravel Nova, я его проверил в инструментах для веб-мастеров от Google. Оказалось что некоторые фотографии на ресурсе были не оптимизированными — размер их можно было существенно сократить. Те, что идут в проекте, можно обработать при сборке проекта используя node.js. Для этого существует множество готовых пакетов. Остаются ещё изображения, загружаемые пользователем непосредственно из панели администрирования сайтом. Можно конечно оптимизировать каждое изображение перед загрузкой на сайт, но почему бы не делать эту процедуру автоматической. Так и родилась идея сделать пакет для Laravel Nova: OptimalImage.

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 2

Создание CI/CD-цепочки и автоматизация работы с Docker

Reading time 15 min
Views 49K
Я написала мои первые сайты в конце 90-х. Тогда приводить их в рабочее состояние было очень просто. Был Apache-сервер на каком-нибудь общем хостинге, на этот сервер можно было войти по FTP, написав в браузерной строке нечто вроде ftp://ftp.example.com. Потом надо было ввести имя и пароль и выгрузить файлы на сервер. Другие были времена, всё тогда было проще, чем сейчас.



За прошедшие с тех пор два десятилетия всё изрядно изменилось. Сайты стали сложнее, их, перед выпуском в продакшн, надо собирать. Один единственный сервер стал множеством серверов, работающих за балансировщиками нагрузки, обычным делом стало использование систем контроля версий.

Для моего персонального проекта у меня была особая конфигурация. И я знала, что мне нужна возможность разворачивать сайт в продакшне, выполняя всего одно действие: запись кода в ветку master на GitHub. Я, кроме того, знала, что мне, для обеспечения работы моего маленького веб-приложения, не хочется заниматься управлением огромным кластером Kubernetes, или пользоваться технологией Docker Swarm, или поддерживать парк серверов с подами, агентами и всякими другими сложностями. Для того чтобы достичь цели по максимальному упрощению работы, мне понадобилось познакомиться с CI/CD.

Если у вас имеется маленький проект (в нашем случае речь идёт о Node.js-проекте) и вам хотелось бы узнать о том, как автоматизировать развёртывание этого проекта, сделав при этом так, чтобы то, что хранится в репозитории, в точности соответствовало бы тому, что работает в продакшне, то, полагаю, вас может заинтересовать эта статья.
Читать дальше →
Total votes 31: ↑31 and ↓0 +31
Comments 4

Самодельный рекуператор для загородного дома с КПД 80%

Reading time 2 min
Views 107K

image


Наступила зима, и я решил усовершенствовать систему вентиляции в моем загородном доме. До этого момента ее практически не было, все вентилирование осуществлялось за счет открывания окон, выбрасывания теплого отработанного воздуха и впускания холодного свежего с улицы. Я что-то слышал о системах рекуперации (recuperatio — обратное получение, возвращение), позволяющих не просто выбрасывать тепло вместе с воздухом, а использовать его для нагревания входящего свежего воздуха с заметной экономией энергии на отоплении. Подумав — а почему бы и нет, я решил попробовать сделать такую систему самостоятельно.

Читать дальше →
Total votes 101: ↑101 and ↓0 +101
Comments 324

Лазерный станок своими руками

Reading time 4 min
Views 101K


Привет, Хабр! Сегодня расскажу о своем лазерном станке для резки фанеры и гравировки кожи. Цель была как всегда – максимум функционала за минимум денег).
Читать дальше →
Total votes 126: ↑125 and ↓1 +124
Comments 194

Адаптивная фоновая подсветка для телевизора на Raspberry Pi – аналог Ambilight

Reading time 21 min
Views 45K
image

Это телевизор с диагональю 50” и 37 RGB точками адаптивной фоновой подсветки по верхней и боковым сторонам экрана. Как сделать аналогичную адаптивную фоновую подсветку для любого экрана или ТВ — тема избитая, но вполне актуальная по ряду причин.

Во-первых, все меняется. Пару лет назад еще не было проекта, работающего без программных или аппаратных костылей. Во всяком случае мне не встречались такие публикации. Те, что описаны на просторах рунета – либо потеряли актуальность в связи с устареванием программных или аппаратных платформ, либо реализуют данную технологию только применительно к мониторам, подключенным к ПК.

Во-вторых, на рынке нет и не будет самсунгов, сони, элджи и прочих ТВ с поддержкой данной технологии, так как она запатентована на многие годы вперед компанией Philips. И наконец — все решения «из коробки», доступные на али и иже с ним – имеют ряд ограничений в гибкости настроек и адаптации к размеру кадра видеоконтента, корректировок цветовой гаммы и т. д, являясь при этом всего лишь аппаратным костылем, анализирующим внешний сигнал и работающий только на формирование подсветки.
Total votes 35: ↑35 and ↓0 +35
Comments 38

Методики уменьшения размеров образов Docker

Reading time 10 min
Views 35K
Задавались ли вы когда-нибудь вопросом о том, почему размер Docker-контейнера, содержащего всего одно приложение, может находиться в районе 400 Мб? Или, может быть, вас беспокоили немаленькие размеры образа Docker, содержащего единственный бинарник размером в несколько десятков Мб?



Автор статьи, перевод которой мы сегодня публикуем, хочет разобрать основные факторы, влияющие на размеры контейнеров Docker. Он, кроме того, собирается поделиться рекомендациями по уменьшению размеров контейнеров.
Читать дальше →
Total votes 61: ↑60 and ↓1 +59
Comments 11

Сохраняем данные в EEPROM на Arduino транзакционно

Reading time 6 min
Views 17K
Наличие EEPROM дает разработчикам удобный инструмент для сохранения конфигурационных параметров или медленно меняющегося состояния, которое должно переживать выключение питания. В этой статье мы рассмотрим, как это делать максимально безопасно и удобно, чтобы ничего не забывать и не вспоминать того, чего не было.
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Comments 50

Шпаргалка по SOLID-принципам с примерами на PHP

Reading time 10 min
Views 439K
Тема SOLID-принципов и в целом чистоты кода не раз поднималась на Хабре и, возможно, уже порядком изъезженная. Но тем не менее, не так давно мне приходилось проходить собеседования в одну интересную IT-компанию, где меня попросили рассказать о принципах SOLID с примерами и ситуациями, когда я не соблюл эти принципы и к чему это привело. И в тот момент я понял, что на каком-то подсознательном уровне я понимаю эти принципы и даже могут назвать их все, но привести лаконичные и понятные примеры для меня стало проблемой. Поэтому я и решил для себя самого и для сообщества обобщить информацию по SOLID-принципам для ещё лучшего её понимания. Статья должна быть полезной, для людей только знакомящихся с SOLID-принципами, также, как и для людей «съевших собаку» на SOLID-принципах.

Читать дальше →
Total votes 110: ↑100 and ↓10 +90
Comments 67

Видеозвонки под капотом: от миллионов в сутки до 100 участников в одной конференции

Reading time 21 min
Views 10K
Сейчас, кажется, невозможно найти мессенджер без функции звонков. Это удобно для пользователей, потому что все коммуникации можно вести в одном приложении. Если объединить всю доступную в СМИ статистику, то получится, что люди разговаривают через интернет более миллиарда минут в день. И по мере развития технологий растет доля видеосвязи, потому что видео лучше передает эмоции собеседника и позволяет создать эффект присутствия.

Новый вызов для сервиса видеозвонков — собрать в одной конференции сразу всю семью или компанию друзей, находящихся в разных частях света, или коллег, работающих удаленно над одним проектом, на планерку.

Руководитель разработки платформ Видео и Лента Александр Тоболь (alatobol) покажет, что под капотом у сервиса видеозвонков, какие технологии и хаки применить, чтобы сделать свой сервер конференций, и как правильно передавать видео. Заходите под кат и узнаете, как перевести сервис звонков один на один к групповым звонкам на 100 человек и зачем вообще нужна поддержка такого количества участников.
Total votes 47: ↑46 and ↓1 +45
Comments 2

Датчики для умного дома

Reading time 8 min
Views 23K
Сделали мы шкаф управления для дома вот тут , разработали контроллер и тут.

Свет можно включить/выключить с телефона, в телеграм приходят нотификации об утечке воды, включении полива и бог ещё знает что.

Но вся эта система далеко не умный дом, это лишь продолжение ваших рук и ног, и единственная помощь от неё только лишь в том, что не надо вставать с кровати, чтобы выключить свет.
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 37

JSON-RPC? Возьмите хитрый REST

Reading time 6 min
Views 31K


Уверен, что заголовок вызвал здоровую реакцию — “ну опять началось…” Но позвольте завладеть вашим вниманием на 5-10 минут, и я постараюсь не обмануть ожидания.


Структура статьи будет такова: берется стереотипное утверждение и раскрывается “природа” возникновения этого стереотипа. Надеюсь, это позволит взглянуть на выбор парадигмы обмена данными в ваших проектах под новым углом.


Для того, чтобы была ясность в том, что такое RPC, предлагаю рассматривать стандарт JSON-RPC 2.0. C REST ясности нет. И не должно быть. Все, что нужно знать о REST — он неотличим от HTTP.

Читать дальше →
Total votes 52: ↑41 and ↓11 +30
Comments 118

Уровни изолированности транзакций для самых маленьких

Reading time 5 min
Views 234K


Сегодня хотел бы довести крайне интересный, но часто покрытый тайнами для обычных смертных программистов раздел базы данных (БД) — уровни изолированности транзакций. Как показывает практика, многие люди, связанные с IT, в частности с работой с БД, слабо понимают зачем нужны эти уровни и как их можно использовать себе во благо.

Немного теории


Сами транзакции особых объяснений не требуют, транзакция — это N (N≥1) запросов к БД, которые выполнятся успешно все вместе или не выполнятся вовсе. Изолированность же транзакции показывает то, насколько сильно влияют друг на друга параллельно выполняющиеся транзакции.
Выбирая уровень транзакции, мы пытаемся прийти к консенсусу в выборе между высокой согласованностью данных между транзакциями и скоростью выполнения этих самых транзакций.
Стоит отметить, что самую высокую скорость выполнения и самую низкую согласованность имеет уровень read uncommitted. Самую низкую скорость выполнения и самую высокую согласованность — serializable.
Читать дальше →
Total votes 42: ↑36 and ↓6 +30
Comments 17

Организация маршрутов в Laravel

Reading time 3 min
Views 18K
Здравствуй, Habr. Недавно я согласился на ревью сайта, заказанного на фрилансе. Я ожидал увидеть контроллеры, которые делают вообще все и занимают 200+ строк (и прочие проявления плохого кода), но все было вполне прилично. Валидация не лежала в контроллере, что встречается достаточно часто. Иногда, конечно, встречались некоторые несоответствия PSR-2, но все выглядело нормально, пока я не заглянул в файл с маршрутами. Он занимал несколько экранов и имел комментарии о группах маршрутов. Я связался с разработчиком и он сказал, что все немного «разрослось» и согласился поправить. В следующей версии я увидел, что он создал несколько классов со статическими методами, в которые переложил код и вызвал их, как это обычно делается, с авторизацией. Тут я вспомнил, что уже сталкивался с подобным и встречал такую аргументацию: «В документации ничего не говорится о вынесении маршрутов в разные файлы». Буквально через пару минут я нашел статью и отправил разработчику. Через пол часа я получил маршруты в нормальном виде и принял решение, что многим новичкам эта статья будет полезна. Так родился этот вольный перевод.

Если вы ни разу не правили файл RouteServiceProvider, добро пожаловать под кат.
Читать дальше →
Total votes 28: ↑27 and ↓1 +26
Comments 29

Соглашение о неконкуренции: главное – не бояться

Reading time 3 min
Views 22K

Как выглядит идеальный работник с точки зрения работодателя?


Портрет можно описывать довольно долго, но, в конечном счете, все сводится к простым истинам:

  • Квалифицированный сотрудник
  • Который любит перерабатывать
  • Бесплатно, конечно же
  • При этом переработки не означают, что работник не понимает, как решить ту или иную задачу
  • Просто работник очень предан своей компании
  • И работает годами
  • И никогда не уходит к конкурентам

Про уход к конкурентам мы как раз и поговорим


Каждый уважающий себя работодатель сегодня считает своим долгом при подписании трудового договора с работником дать последнему на подпись не только трудовой договор, но и большое количество дополнений к нему. А еще – ознакомить с кучей локальных нормативно-правовых актов.

В числе таких дополнений – соглашение о неконкуренции (non-compete agreement, NCA или non-compete clause, NCC).
Читать дальше →
Total votes 23: ↑21 and ↓2 +19
Comments 32

Docker + php-fpm + PhpStorm + Xdebug

Reading time 8 min
Views 63K
Не так давно тимлид нашей команды сказал: ребята я хочу, чтобы у всех была одинаковая среда разработки для наших боевых проектов + мы должны уметь дебажить всё — и web приложения, и api запросы, и консольные скрипты, чтобы экономить свои нервы и время. И поможет нам в этом docker.

Сказано — сделано. Подробности под катом.
Читать дальше →
Total votes 31: ↑27 and ↓4 +23
Comments 80

Простые эксперименты с микроконтроллером STM32F103 («Голубая таблетка»)

Reading time 6 min
Views 34K
image

Часть 2 < — Часть 1

Продолжим эксперементировать с микроконтроллером STM32F103C8T6, подключим некоторые датчики/дисплеи с интерфейсом I2C к «голубой таблетке».

Реализована поддержка популярных дисплеев I2C:

  • LCD 1602
  • SSD1306

Реализована поддержка следующих датчиков:

  • BH1750 — датчик освещенности
  • BME280 — датчик температуры, давления, влажности
  • CCS811 — датчик СО2, ЛОВ ( Летучие Органические Вещества )
Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Comments 33

40 лучших инструментов и ресурсов Laravel

Reading time 16 min
Views 29K
image
Привет, Хабр! Представляю вашему вниманию подборку, которая является переводом моей оригинальной статьи.

Если есть идеи что добавить в подборку — буду рад пообщаться в комментах. Наслаждайтесь!
Читать дальше →
Total votes 26: ↑25 and ↓1 +24
Comments 24

Как собеседовать работодателя?

Reading time 4 min
Views 46K
У программистов обычно принято обсуждать собеседования с точки зрения (около)технических вопросов, которые им задает интервьювер.

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

Я хотел бы зайти в этой статье с другого конца и обсудить, во-первых, не техническую часть, а, во-вторых, вопросы, которые сам кандидат должен задать интервьюверу.

Читать дальше →
Total votes 85: ↑77 and ↓8 +69
Comments 63

Coroutines в PHP и работа с неблокирующими функциями

Reading time 18 min
Views 79K
Одним из самых больших нововведений в PHP 5.5 будет поддержка генераторов и корутин (сопрограмм). Генераторы уже достаточно были освещены в документации и в нескольких других постах (например в этом или в этом). Сопрограммы же получили очень мало внимания. Это гораздо более мощный, но и более сложный для понимания и объяснения, инструмент.

В этой статье я покажу как реализовать планировщик задач с использованием корутин, чтобы вы поняли, что с ними можно делать и как их применять. Начнем с нескольких вступительных слов. Если вы считаете, что вы уже достаточно хорошо знаете как работают генераторы и корутины, тогда можете сразу перейти к разделу «Совместная многозадачность».

Генераторы


Суть генератора в том, что это функция, которая возвращает не просто одно значение, а последовательность значений, где каждое значение выброшено одно за другим. Или, другими словами, генераторы позволяют вам реализовать итератор, без лишнего кода.
Читать дальше →
Total votes 111: ↑103 and ↓8 +95
Comments 57

Information

Rating
Does not participate
Location
Ульяновск, Ульяновская обл., Россия
Date of birth
Registered
Activity