Pull to refresh
0
0
Evgeny Zaytsev @FasSsko

Senior Front-End Developer

Send message

PostgreSQL Antipatterns: делаем группировку быстрее от 0.1 до 5 раз

Reading time2 min
Views12K

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

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

Читать далее
Total votes 13: ↑12 and ↓1+13
Comments5

Что вам нужно знать про молочные зубы у детей (и современный медицинский подход)

Reading time7 min
Views43K
image
Дети просто полны зубами. Зубы как-то помещаются в черепе, но всё равно почти торчат в ноздрях и глазницах. Тут, например, 48 зубов одновременно, и это абсолютно здоровый пациент.

Молочные зубы очень важны. Мы уже не раз сталкивались с реакцией родителей в ситуации, когда они приводят ребёнка с запущенным множественным кариесом. «Сколько-сколько будет стоить вылечить восемь зубов? Нет, не буду, нам по ОМС всё бесплатно вырвут». К сожалению, родители часто не понимают, что потеря (или утрата) молочных зубов очень критична для формирования здорового ортогнатического прикуса.

Цепочка довольно простая:

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

Поэтому сегодня я буду рассказывать, что нужно делать из бесплатного с ребёнком на старте, чтобы потом не тратить кучу денег и сил на лечение в будущем.
Читать дальше →
Total votes 92: ↑88 and ↓4+111
Comments58

Дайджест свежих материалов из мира фронтенда за последнюю неделю №402 (10 — 16 февраля 2020)

Reading time4 min
Views12K
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него.

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

Объясняя необъяснимое

Reading time11 min
Views61K
Друзья, мы с радостью продолжаем публикацию интересных материалов, посвященных самым разнообразным аспектам работы с PostgreSQL. Сегодняшний перевод открывает целую серию статей за авторством Hubert Lubaczewski, которые наверняка заинтересуют широкий круг читателей.



Одна из первых вещей, которую слышит новоиспеченный администратор баз данных – «используй EXPLAIN». И при первой же попытке он сталкивается c непостижимым:

                                                        QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------
 Sort  (cost=146.63..148.65 rows=808 width=138) (actual time=55.009..55.012 rows=71 loops=1)
   Sort Key: n.nspname, p.proname, (pg_get_function_arguments(p.oid))
   Sort Method: quicksort  Memory: 43kB
   ->  Hash Join  (cost=1.14..107.61 rows=808 width=138) (actual time=42.495..54.854 rows=71 loops=1)
         Hash Cond: (p.pronamespace = n.oid)
         ->  Seq Scan on pg_proc p  (cost=0.00..89.30 rows=808 width=78) (actual time=0.052..53.465 rows=2402 loops=1)
               Filter: pg_function_is_visible(oid)
         ->  Hash  (cost=1.09..1.09 rows=4 width=68) (actual time=0.011..0.011 rows=4 loops=1)
               Buckets: 1024  Batches: 1  Memory Usage: 1kB
               ->  Seq Scan on pg_namespace n  (cost=0.00..1.09 rows=4 width=68) (actual time=0.005..0.007 rows=4 loops=1)
                     Filter: ((nspname <> 'pg_catalog'::name) AND (nspname <> 'information_schema'::name))

Что бы это могло значить?
Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments23

Как сделать ваш HTML отзывчивым, добавив одну строку кода на CSS

Reading time4 min
Views64K
Привет, Хабр! представляю вашему вниманию перевод статьи «How to make your HTML responsive by adding a single line of CSS» автора Per Harald Borgen.



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

Самое крутое, что для добавления отзывчивости потребуется написать одну строчку кода на CSS
Читать дальше →
Total votes 79: ↑69 and ↓10+59
Comments38

Лучшие практики Node.js — советы по структуре проектов

Reading time8 min
Views42K

Привет, Хабр! Представляю вашему вниманию адаптированный перевод первой главы "Node.js Best Practices" автора Yoni Goldberg. Подборка рекомендаций по Node.js размещена на github, имеет почти 30 т. звезд, но до сих пор никак не упоминалась на Хабре. Предполагаю, что эта информация будет полезна, как минимум, для новичков.
Глава 1. Советы по структуре проектов
Total votes 38: ↑32 and ↓6+26
Comments6

Battle royale: секреты дизайна самого популярного игрового жанра

Reading time8 min
Views12K

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

Разумеется, это battle royale — новый тип онлайн-шутеров, в которые играет более 200 миллионов людей по всему миру. Это безумие началось с Day Z: Battle Royale, модификации зомби-выживалки DayZ, в одиночку разработанной дизайнером Бренданом Грином, которая позже превратилась в PlayerUnknown’s Battle Royale. Её популярность привлекла внимание корейского разработчика Bluehole, нанявшей Грина для руководства разработкой полномасштабной игры. Бета-версия PUBG была выпущена в начале 2017 года, а к декабрю в неё играли 30 миллионов игроков.

Заметив этот успех, Epic Games выпустила в жанре battle royale бесплатную версию своей кооперативной игры Fortnite с мультяшным графическим стилем и возможностью строительства в стиле Minecraft. Это случилось в сентябре 2017 года. За следующий год игра заработала на покупках игроков 2,4 миллиарда долларов. В прошлом октябре Activision добавила режим battle royale под названием Blackout в Call of Duty: Black Ops 4, а 4 февраля этого года Respawn Entertainment выпустила Apex: Legends. Всего за неделю игра привлекла 10 миллионов игроков, заставив взлететь до небес акции её издателя Electronic Arts.

Хотя визуальный стиль и антураж этих игр сильно отличаются, все четыре гиганта жанра придерживаются строгого набора правил. По островам разбросаны города, деревни и промышленные комплексы, на всех них есть реки, мосты и небольшие островки, и все они имеют примерно одинаковую форму. Но что же в них такого увлекательного? Почему новое поколение детей лучше ориентируется в маршруте от Tilted Towers к Paradise, чем от дома до магазина?
Total votes 18: ↑15 and ↓3+12
Comments9

Гугология (это не опечатка) для программистов

Reading time4 min
Views30K
О математике (так, чтобы было интересно) писать сложнее, чем о физике. Однако я надеюсь, что вы дочитаете хотя бы до примеров сумасшедших программ на C.

image
Читать дальше →
Total votes 55: ↑54 and ↓1+53
Comments63

Секретные хаки VS Code

Reading time5 min
Views140K
Не имеет значения, новичок вы или профессионал, удобные инструменты программирования важны для любого человека, который хочет писать код продуктивно.

image

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

Улучшаем внешний вид


1. Material Theme & Icons

Это прямо зверь в темах VS Code. Я думаю, что материальная тема наиболее близка к написанию ручкой на бумаге в редакторе (особенно при использовании неконтрастной темы). Ваш редактор выглядит практически гладко, переходя от встроенных инструментов к текстовому редактору.

Представьте себе эпическую тему в сочетании с эпическими иконами. Material Theme Icons — отличная альтернатива для замены значков VSCode по умолчанию. Большой каталог иконок плавно вписывается в тему, делая ее красивее. Это поможет легко найти файлы в проводнике.

image
Читать дальше →
Total votes 58: ↑47 and ↓11+36
Comments46

Screenplay — не Page Object'ом единым

Reading time9 min
Views18K

Со временем вносить изменения в любой продукт становится сложнее, и растёт риск не только зарелизить новые фичи, но и сломать старые. Часто вместо того, чтобы руками проверять весь проект, этот процесс стараются автоматизировать. Если поговорить с людьми, которые занимаются тестированием интерфейсов, походить по конференциями, становится понятно, что в мире веб-тестирования правит Selenium, а в качестве организации кода подавляющее большинство используют Page Object.


Вот только мне, как программисту, этот паттерн и код, который я видел у разных команд, почему-то никогда не нравился — в голове звучали буквы SOLID. Но я уже был готов смириться с тем, что тестировщики пишут код, как им удобно, из-за отсутствия альтернатив, как где-то год назад, на Angular Connect, услышал я доклад, посвящённый тестированию Angular приложений c использованием Screenplay паттерна. Теперь хочу поделиться.


Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments1

Оптимизация реляционных баз данных без даунтайма на примере самой нагруженной БД в Badoo

Reading time9 min
Views26K


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

Недавно мы рассказали, как мы оптимизировали PHP-код нашего приложения. Теперь же пришёл черёд статьи про то, как мы полностью изменили внутреннюю структуру самой нагруженной и важной базы данных в Badoo, не потеряв при этом ни одного запроса.
Читать дальше →
Total votes 65: ↑65 and ↓0+65
Comments22

Эффективная работа с памятью в Node.js

Reading time8 min
Views17K
Программы, в ходе работы, пользуются оперативной памятью компьютеров. На JavaScript, в среде Node.js, можно писать серверные проекты самых разных масштабов. Организация работы с памятью — это всегда непростая и ответственная задача. При этом, если в таких языках, как C и C++, программисты довольно плотно занимаются управлением памятью, в JS имеются автоматические механизмы, которые, как может показаться, полностью снимают с программиста ответственность за эффективную работу с памятью. Однако на самом деле это не так. Плохо написанный код для Node.js может помешать нормальной работе всего сервера, на котором он выполняется.



В материале, перевод которого мы сегодня публикуем, речь пойдёт об эффективной работе с памятью в среде Node.js. В частности, здесь будут рассмотрены такие концепции, как потоки, буферы и метод потоков pipe(). В экспериментах будет использован Node.js v8.12.0. Репозиторий с кодом примеров можно найти здесь.
Читать дальше →
Total votes 54: ↑49 and ↓5+44
Comments12

Кротовые норы в JavaScript

Reading time5 min
Views22K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Wormholes in JavaScript" автора Mathius Buus.



Компьютеры — интересные машины. В теории они представляются нам идеальными механическими математиками работающими с цифрами и хорошо выполняющими операции сложения, умножения и вычитания.


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


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

Читать дальше →
Total votes 44: ↑40 and ↓4+36
Comments29

Борьба с грязными побочными эффектами в чистом функциональном JavaScript-коде

Reading time25 min
Views22K
Если вы пробуете свои силы в функциональном программировании, то это значит, что вы довольно скоро столкнётесь с концепцией чистых функций. Продолжая занятия, вы обнаружите, что программисты, предпочитающие функциональный стиль, похоже, прямо-таки одержимы этими функциями. Они говорят о том, что чистые функции позволяют рассуждать о коде. Они говорят, что чистые функции — это сущности, которые вряд ли будут работать настолько непредсказуемо, что приведут к термоядерной войне. Ещё вы можете узнать от таких программистов, что чистые функции обеспечивают ссылочную прозрачность. И так — до бесконечности.

Кстати, функциональные программисты правы. Чистые функции — это хорошо. Но есть одна проблема…


Автор материала, перевод которого мы представляем вашему вниманию, хочет рассказать о том, как бороться с побочными эффектами в чистых функциях.
Читать дальше →
Total votes 36: ↑35 and ↓1+34
Comments18

Оптимизация работы с прототипами в JavaScript-движках

Reading time15 min
Views8K
Материал, перевод которого мы сегодня публикуем, подготовили Матиас Байненс и Бенедикт Мейрер. Они занимаются работой над JS-движком V8 в Google. Эта статья посвящена некоторым базовым механизмам, которые характерны не только для V8, но и для других движков. Знакомство с внутренним устройством подобных механизмов позволяет тем, кто занимается JavaScript-разработкой, лучше ориентироваться в вопросах производительности кода. В частности, здесь речь пойдёт об особенностях работы конвейеров оптимизации движков, и о том, как осуществляется ускорение доступа к свойствам прототипов объектов.


Читать дальше →
Total votes 29: ↑28 and ↓1+27
Comments0

Добро пожаловать на борт: вводим новых разработчиков в команду

Reading time11 min
Views48K

Привет, Хабр! Меня зовут Андрей Гоменюк, я тимлид одной из команд серверной разработки Badoo.

На майском Badoo Techleads Meetup, посвящённом управлению разработкой, я поделился опытом интеграции новичков в команду. А сегодня делюсь текстовым дополненным и улучшенным вариантом своего доклада.

Представьте, что сегодня ваш первый рабочий день в Badoo. Каких же знаний и умений ждёт от вас отдел и в частности я, руководитель? Как минимум таких:
Читать дальше →
Total votes 112: ↑103 and ↓9+94
Comments52

Как работает JS: сетевая подсистема браузеров, оптимизация её производительности и безопасности

Reading time13 min
Views19K
[Советуем почитать] Другие 19 частей цикла
Часть 1: Обзор движка, механизмов времени выполнения, стека вызовов
Часть 2: О внутреннем устройстве V8 и оптимизации кода
Часть 3: Управление памятью, четыре вида утечек памяти и борьба с ними
Часть 4: Цикл событий, асинхронность и пять способов улучшения кода с помощью async / await
Часть 5: WebSocket и HTTP/2+SSE. Что выбрать?
Часть 6: Особенности и сфера применения WebAssembly
Часть 7: Веб-воркеры и пять сценариев их использования
Часть 8: Сервис-воркеры
Часть 9: Веб push-уведомления
Часть 10: Отслеживание изменений в DOM с помощью MutationObserver
Часть 11: Движки рендеринга веб-страниц и советы по оптимизации их производительности
Часть 12: Сетевая подсистема браузеров, оптимизация её производительности и безопасности
Часть 13: Анимация средствами CSS и JavaScript
Часть 14: Как работает JS: абстрактные синтаксические деревья, парсинг и его оптимизация
Часть 15: Как работает JS: классы и наследование, транспиляция в Babel и TypeScript
Часть 16: Как работает JS: системы хранения данных
Часть 17: Как работает JS: технология Shadow DOM и веб-компоненты
Часть 18: Как работает JS: WebRTC и механизмы P2P-коммуникаций
Часть 19: Как работает JS: пользовательские элементы

В переводе двенадцатой части серии материалов о JavaScript и его экосистеме, который мы сегодня публикуем, речь пойдёт о сетевой подсистеме браузеров и об оптимизации производительности и безопасности сетевых операций. Автор материала говорит, что разница между хорошим и отличным JS-разработчиком заключается не только в уровне освоения языка, но и в том, насколько хорошо он разбирается в механизмах, не входящих в язык, но используемых им. Собственно говоря, работа с сетью — это один из таких механизмов.

image
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments1

Микросервисы (Microservices)

Reading time22 min
Views682K
От переводчика: некоторые скорее всего уже читали этот титанический труд от Мартина Фаулера и его коллеги Джеймса Льюиса, но я все же решил сделать перевод этой статьи. Тренд микросервисов набирает обороты в мире enterprise разработки, и эта статья является ценнейшим источником знаний, по сути выжимкой существующего опыта работы с ними.

Термин «Microservice Architecture» получил распространение в последние несколько лет как описание способа дизайна приложений в виде набора независимо развертываемых сервисов. В то время как нет точного описания этого архитектурного стиля, существует некий общий набор характеристик: организация сервисов вокруг бизнес-потребностей, автоматическое развертывание, перенос логики от шины сообщений к приемникам (endpoints) и децентрализованный контроль над языками и данными.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments45

Почему Agile не работает и что с этим делать

Reading time6 min
Views20K
В одном из наших постов мы уже рассказывали о некоторых гибких методологиях. В этом материале предлагаем посмотреть на причины провалов agile-проектов и узнать, что думают о гибких методологиях руководители компаний и разработчики.

Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments17

Новый V8 и скорость Node.js: техники оптимизации сегодня и завтра

Reading time19 min
Views27K
Node.js, с момента появления, зависит от JS-движка V8, который обеспечивает исполнение команд языка, который мы все знаем и любим. V8 — это виртуальная машина JavaScript, написанная Google для браузера Chrome. С самого начала V8 создавали для того, чтобы сделать JavaScript быстрым, по крайней мере — обеспечить большую скорость, чем конкурирующие движки. Для динамического языка без строгой типизации достижение высокой производительности — задача непростая. V8 и другие движки развиваются, всё лучше решая эту задачу. Однако, новый движок — это не просто «рост скорости исполнения JS». Это — и необходимость в новых подходах к оптимизации кода. Не всё то, что было сегодня самым быстрым, будет радовать нас максимальной производительностью в будущем. Не всё, что считалось медленным, останется таким.

Как характеристики TurboFan V8 повлияют на то, как будут оптимизировать код? Как техники, считающиеся оптимальными сегодня, покажут себя в недалёком будущем? Как ведут себя «убийцы производительности V8» в наши дни, и чего от них можно ожидать? В этом материале мы постарались найти ответы на эти и многие другие вопросы.

Перед вами — плод совместного труда Дэвида Марка Клементса и Маттео Коллины. Материал проверили Франциска Хинкельманн и Бенедикт Мейрер из команды разработчиков V8.


Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments16
1

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity