Search
Write a publication
Pull to refresh
4
Евгений @Mellornread⁠-⁠only

В настоящее время занимаюсь web-разработкой

Send message

Как работать с Git и Gitflow: разбираемся на примерах

Reading time6 min
Views15K

Привет, Хабр!

Меня зовут Николай Пискунов — я руководитель направления Big Data, и в блоге beeline cloud я делюсь практическими советами по программированию. В этой статье погрузимся в увлекательный мир Git и узнаем, как он поможет эффективно управлять версиями наших проектов.

Читать далее

Не изобретайте велосипед! Или наборы утилит для Vue и React приложений

Reading time3 min
Views5.5K

Многие разработчики, когда дело заходит о стандартном веб функционале, например: хранение boolean значений, отлавливания нажатия клавиш или создания stepper, часто идут гуглить как сделать ту или иную функцию и чаще находят способ с реализацией функционала с полного нуля.

Читать далее

Гудбай Pusher, привет Laravel Websockets

Level of difficultyEasy
Reading time2 min
Views9.7K

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

Проект делается на Laravel 10 на стартере Breeze Inertia + Vue.js.

Историю как я придумывал саму логику уведомлений я оставлю как-нибудь на потом, а вот о том как я распрощался с Pusher я расскажу сейчас. Вообще Pusher, конечно, сервис хороший, но если брать бесплатные лимиты, то там всё достаточно грустно, поэтому я решил использовать что‑то другое в качестве альтернативы. Выбор пал на Laravel Websockets.

Для справки, Laravel Websockets — это такая надстройка над Laravel, которая на бэке использует Ratchet, но никаких особых настроек делать не нужно, всё работает практически «из коробки». Правда есть несколько подводных камней, о которых я тоже расскажу.

Читать далее

Модификация JSON респонсов в Laravel

Level of difficultyMedium
Reading time7 min
Views6.1K

Вчера я опубликовал перевод статьи на тему оптимизации использования респонсов в Laravel с "простейшими" данными. То есть когда в ответ нужно отдать какое-то число, строку, массив или объект. Но что делать если приложение построено на использовании Json Resource? Или ещё больше - нужно изменить уровень вложенности данных, возвращаемых коллекцией? Давайте разбираться!

Читать далее

Использование Laravel драйвера centrifugo для широковещания

Level of difficultyMedium
Reading time21 min
Views7.2K

В современных веб-приложениях используются веб-сокеты, которые служат для создания пользовательских интерфейсов, которые обновляются в реальном времени. В случае, если данные обновляются на сервере, то обычно происходит отправка сообщения, оповещения через соединение WebSocket для обработки клиентом. Вместо того, чтобы постоянно, в цикле следить за серверной частью приложения на предмет обновлений и изменения данных, которые должны быть отражены в вашем пользовательском интерфейсе, вы используете соединение Websocket, как эффективную альтернативу. Сегодня websocket порой не просто альтернатива, а необходимость в данном виде задач.

Для того чтобы помочь вам в разработке подобных функций, Laravel упрощает передачу серверных событий через соединение WebSocket. В момент трансляции ваших событий Laravel, вы можете использовать одни и те же имена событий и данные между клиентским JavaScript-приложением и серверным приложением Laravel.

Впервые столкнувшись с необходимостью обеспечить ваше приложение Laravel системой работы и сообщений в реальном времени вы начинаете с документации по широковещанию. Из нее становится ясно, что список указанных в документации драйверов не так уж широк, по умолчанию Laravel содержит два серверных драйвера трансляции на выбор: Pusher Channels и Ably. При этом основные провайдеры платные. Альтернативы есть, но они во многом завязаны на протоколе pusher и\или Laravel Echo. Поиск по другим альтернативам приводит к примерно этому неполному списку:

Читать далее

Git. Скачем между ветками как древесные лягушки

Level of difficultyEasy
Reading time6 min
Views33K

Статей на тему много, но, видимо, недостаточно. Последние 10 лет в 4-х разных компаниях время от времени слышу от коллег:

— Не могу пошарить экран с кодом, у меня другая ветка сейчас.

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

— Стаскивать ветку для просмотра ПР? Это же неудобно, надо "стэшить" изменения, ветку переключать.

Читать далее

Стоит ли бояться serializable-транзакций больше, чем труднонаходимых багов?

Level of difficultyMedium
Reading time9 min
Views8.4K

В базах данных транзакции обладают свойствами ACID, где «I» означает изоляцию транзакций при одновременном (concurrent) выполнении.

Наличие (serializable) изоляции гарантирует, что результат транзакций, выполненных параллельно, будет таким же, как если бы они были выполнены в некотором последовательном порядке.

Сериализация выполнения транзакций не бесплатна с точки зрения производительности.

Многие СУБД поддерживают более слабые уровни изоляции, оставляя за разработчиком выбор подходящего. В монолитных СУБД более слабый уровень изоляции часто используется по умолчанию. Так, в PostgreSQL и MySQL это «read committed». В распределённых СУБД чаще по умолчанию более строгие уровни: «repeatable read» в YugabyteDB и TiDB, «serializable» в CockroachDB и YDB.

Слабые уровни изоляции могут быть причиной очень труднонаходимых багов. Причём эти баги могут вызвать уязвимости в безопасности.

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

Читать далее

Как я выстрелил себе в ногу, не соблюдая паттерны

Level of difficultyEasy
Reading time8 min
Views20K

Всем привет, меня зовут Андрей, я — php-разработчик в wpp.digital.

Сегодня я поделюсь с вами историей. Она о том, как поверхностное понимание (или непонимание) паттернов проектирования отстрелило мне ногу. А еще поделюсь примером реализации простой истины: знание чего-то не равно умению это применять. Кстати, главным героем поэмы являюсь (неожиданная информация) я.

Кому будет полезен данный текст? В первую очередь, мне для рефлексии. Во вторую — той редкой породе новичков, которая умеет учиться на чужих ошибках. Ну и в последнюю очередь — опытным коллегам, которые могут поностальгировать по временам джуновых задач и огромных перспектив. Последние еще могут разнести в комментариях всё, что я здесь написал.

Теперь к задаче.

Читать далее

SQL HowTo: разные варианты работы с EAV

Reading time3 min
Views26K

Соблазн использовать модель EAV (Entity-Attribute-Value) при организации структуры БД весьма велик, особенно когда предметная область заранее плохо известна (или разработчик просто не хочет в нее углубляться). Это ведь так удобно - создать "универсальный" способ описания характеристик объектов, который больше не потребует доработок базы ни при появлении новых типов объектов, ни при возникновении новых атрибутов...

Однако, за любую универсальность приходится платить сложностью и производительностью запросов - так что json[b] может оказаться более эффективной заменой. Но если уж такая модификация невозможна - давайте попробуем выжать максимум производительности из доставшегося нам legacy на самом простом примере.

Читать далее

Быстро разворачиваем docker, nginx и certbot

Level of difficultyEasy
Reading time2 min
Views4.1K

В нашей команде мы часто сталкиваемся с необходимостью развертывания новых серверов с одинаковой конфигурацией: nginx, docker, docker-compose и certbot. nginx используем для проксирования докера и назначения человеческого DNS. Для того чтобы не повторяться мы, мы разработали набор скриптов...

Читать далее

Быстрый запуск PostgreSQL через Docker Compose

Level of difficultyEasy
Reading time3 min
Views41K

Доброго времени суток! Сегодня я продемонстрирую вам, как быстро и эффективно настроить PostgreSQL с помощью Docker Compose. Этот процесс займет всего несколько минут, но в результате вы получите полноценную базу данных PostgreSQL, работающую в изолированном Docker контейнере. Важные компоненты, такие как базы данных, таблицы и индексы, будут сохранены на вашей локальной машине благодаря использованию томов (volumes), что обеспечит надежность и доступность данных.

Читать далее

Как мы создавали AmneziaFree, и боролись с интернет-цензурой в разных странах

Reading time3 min
Views22K

Всем привет! На связи команда Amnezia. И если вы давно за нами следите, вы помните как мы были очень маленьким стартапом, который делал первые шаги по созданию более менее современного приложения с open source кодом, чтобы создавать VPN на собственном сервере. Мы понимали что подобное решение нужно, но еще не понимали на сколько нужно и что именно мы будем делать дальше.

AmneziaFree.  Начало

Наверное, мы бы и дальше  оставались просто разработчиками self-hosted клиента, если бы не массовая блокировка общественно значимых сайтов весной 2022 в России. Особенно болезненно ощущалась блокировка невероятно популярного Instagram* 

Тогда при поддержке активистов и различных медиа мы взяли самые очевидные инструменты - арендовали у партнеров серверные мощности, взяли за основу open source приложение WireGuard и создали телеграм-бота раздающего конфигурации для каждого пользователя - и уже буквально через месяц, у нас был готов бесплатный сервис для доступа к заблокированным сайтам AmneziaFree. Он стал неожиданно популярным,  практически 250 000 пользователей за короткий промежуток времени получили конфиги с помощью этого бота.  

Читать далее

Микродозинг кофеина: новый подход к потреблению кофе

Level of difficultyEasy
Reading time4 min
Views53K

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

На связи RISE: сообщество про Ноотропы и Биохакинг
Если вы любитель кофе или наоборот кофеин переносите плохо, то эта статья для вас.

Читать далее

Как мы создали приложение знакомств, чтобы находить «половинку» в 8 раз быстрее

Level of difficultyEasy
Reading time13 min
Views56K

Всем привет! Меня зовут Константин, и я основатель Radaro.

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

Читать далее

Как хэширование поможет вам оптимизировать хранение данных?

Level of difficultyMedium
Reading time3 min
Views6.2K

Хеширование – это мощный инструмент, широко используемый в различных областях IT: от защиты паролей до создания быстрых структур данных. В этой статье мы подробно рассмотрим, как хеширование помогает оптимизировать хранение данных, исключить дубликаты и улучшить работу с файлами.

Читать далее

Готовимся к вопросам по вёрстке на интервью Frontend-разработчика: «Как скрыть элемент доступно?»

Level of difficultyMedium
Reading time6 min
Views8.8K


Привет, Хабр. Я продолжаю отвечать на вопросы по вёрстке из собеседований на должность фронтендера. Если я где-то ошибаюсь, вы поправляете меня в комментариях. Таким способом я учусь у вас, а вы у меня.


Сегодня я отвечу на следующий вопрос: «Как скрыть элемент с помощью CSS доступно?»

Читать дальше →

Насколько хороши диапазонные типы и btree_gist индекс в PostgreSQL

Level of difficultyMedium
Reading time6 min
Views2.8K

В PostgreSQL есть довольно интересный функционал - диапазонные типы данных (range). Они весьма удобны в использовании. Для индексирования этих типов данных существует GIST индекс. Однако на практике часто требуется сочетание BTREE индекса с GIST, что реализуется расширением btree_gist. Насколько эффективно удобство, предоставляемое диапазонными типами данных в сочетании с btree_gist мы и разберем в этой статье.

Для ЛЛ - с производительностью при использовании btree_gist будет плохо.

Читать далее

Вечный покой .env: как эффективнее удалять закомиченный файл .env из Git-репозитория

Level of difficultyEasy
Reading time3 min
Views25K

Разрабатывая различные приложения, я часто сталкиваюсь с тем, как после очередного коммита, в репозитории я вижу один из важнейших файлов, когда я работаю с переменными окружениями, оказалась на странице репозитория на Github. Речь идет о файле .env, чья общедоступность может быть очень опасным. И для того, чтобы обезопасить хранение конфигурационных переменных и настроек моего приложения, используется данный текстовый файл.

Я работаю на VS Code, и я, to be honest, так и не понял, с какой стати .gitignore "не игнорирует" .env. Причем спокойно "игнорирует" другие файлы, директории.

Всё же, нужно действовать, исходя из конкретного кейса, но если вы не хотите, чтобы какой-нибудь John Doe воспользовался данными из вашего .env, то вы перешли по верной ссылке. Вы же не отдаете ключи грабителю с фразой "Грабьте мой дом", верно?

Читать далее

Используем REM для адаптива: комфортная резиновая вёрстка для всех устройств

Level of difficultyEasy
Reading time3 min
Views16K

Все верстальщики рано или поздно сталкивались с болью, которая заключается в адаптиве сайта под различные устройства. Существуют разные технологии, упрощающие подгонку размеров под определённые устройства, например, clamp(). Эта функция удобна, так как позволяет минимизировать использование брейкпоинтов, но у неё есть свои недостатки:

Читать далее

Долгий путь микропроцессора на рынок или учимся читать новости про российские литографы

Level of difficultyHard
Reading time10 min
Views53K

Пару дней назад Хабр в списке новостей вывел и эту - В России создали и тестируют собственный литограф . Новость не вызвала у меня особого интереса - кроме того, что на Хабре завелась особая математика, +68 – 24 = +58, и вот почему.

Читать далее

Information

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