Обновить
0
@Lifehack043read⁠-⁠only

Пользователь

Отправить сообщение

(Не)рушимые законы крутого кода: Law of Demeter (с примерами на TypeScript)

Время на прочтение3 мин
Охват и читатели10K
Когда я узнал об этих принципах, гибкость моего кода, по ощущениям, выросла х2, а скорость принятия решения по дизайну сущностей х5.

Если SOLID – это набор принципов написания качественного кода, то Law of Demeter (LoD) и Tell Don’t Ask (TDA) – это конкретные приемы как добиться SOLID.

Сегодня поговорим про Law of Demeter («Закон Деметры»).

Утрированно


Это принцип помогает определиться: «Как я буду получать / изменять вложенные объекты» – применим в языках, где можно определить «классы» со свойствами и методами.

Часто складывается ситуация, когда мы откуда-то (например, из HTTP запроса) получили id сущности `a`, пошли за ней в БД и из сущности `a` нам надо получить / изменить сущность `b` вызвав метод `Method`.

Так вот Википедия гласит:
Код `a.b.Method()` нарушает Закон Деметры, а код `a.Method()` является корректным.

Пример


У Пользователя есть Посты, в которых есть Комментарии. Вы хотите получить «Комментарии последнего Поста».

Можно запилить такое:
Читать дальше →

Книга «Эффективный TypeScript: 62 способа улучшить код»

Время на прочтение8 мин
Охват и читатели14K
imageПривет, Хаброжители! Книга Дэна Вандеркама окажется максимально полезена тем, кто уже имеет опыт работы с JavaScript и TypeScript. Цель этой книги — не обучать читателей пользоваться инструментами, а помочь им повысить свой профессиональный уровень. Прочитав ее, вы сформируете лучшее представление о работе компонентов TypeScript, сможете избежать многих ловушек и ошибок и развить свои навыки. В то время как справочное руководство покажет пять разных путей применения языка для реализации одной задачи, «эффективная» книга объяснит, какой из этих путей лучше и почему.
Читать дальше →

PostgreSQL Antipatterns: «Должен остаться только один!»

Время на прочтение3 мин
Охват и читатели18K
На SQL вы описываете «что» хотите получить, а не «как» это должно исполняться. Поэтому проблема разработки SQL-запросов в стиле «как слышится, так и пишется» занимает свое почетное место, наряду с особенностями вычисления условий в SQL.

Сегодня на предельно простых примерах посмотрим, к чему это может приводить в контексте использования GROUP/DISTINCT и LIMIT вместе с ними.

Вот если вы написали в запросе «сначала соедини эти таблички, а потом выкинь все дубли, должен остаться только один экземпляр по каждому ключу» — именно так и будет работать, даже если соединение вовсе не было нужно.

И иногда везет и это «просто работает», иногда — неприятно сказывается на производительности, а иногда дает абсолютно неожидаемые с точки зрения разработчика эффекты.


Ну, может, не настолько зрелищные, но…

«Сладкая парочка»: JOIN + DISTINCT


SELECT DISTINCT
  X.*
FROM
  X
JOIN
  Y
    ON Y.fk = X.pk
WHERE
  Y.bool_condition;

Как бы понятно, что хотели отобрать такие записи X, для которых в Y есть связанные с выполняющимся условием. Написали запрос через JOIN — получили какие-то значения pk по несколько раз (ровно сколько подходящих записей в Y оказалось). Как убрать? Конечно DISTINCT!
Читать дальше →

Простое объяснение делегирования событий в JavaScript

Время на прочтение5 мин
Охват и читатели43K

Приветствую. Представляю вашему вниманию перевод статьи «A Simple Explanation of Event Delegation in JavaScript», опубликованной 14 июля 2020 года автором Dmitri Pavlutin



В данной статье Дмитрий Павлутин объясняет, на чём основан один из базовых паттернов работы с DOM-событиями.

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

Нововведения CSS – Июль 2020 (Gap, Aspect ratio, Masonry, Subgrid)

Время на прочтение7 мин
Охват и читатели13K

Приветствую. Представляю вашему вниманию перевод статьи «CSS News July 2020», опубликованной 7 июля 2020 года автором Rachel Andrew



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

Как мы в Dropbox перешли с Nginx на Envoy

Время на прочтение26 мин
Охват и читатели50K

В этой статье мы будем говорить о нашей старой инфраструктуре, основанной на Nginx, ее болячках, а также выгоде, которую мы получили после миграции на Envoy. Мы сравним Nginx и Envoy различными способами. Также кратко коснемся процесса миграции, текущего состояния, а также проблем, возникших при переходе.


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

«Просто похудеть» — непросто

Время на прочтение15 мин
Охват и читатели131K

Интернет наводнен статьями о том, как похудеть "просто съедая меньше чем потратил" и отчетами об успешном опыте некоторых везунчиков. Чего нету (ну или очень мало) в интернете — это отчетов о том, как миллионы людей безрезультатно пытаются просто "съесть меньше", садясь на все новомодные диеты и неизменно возвращаясь к тому, с чего начинали, а иногда и скатываясь по шкале индекса массы тела в еще более красную зону.


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

Хакнуть свой мозг

Побег из привилегированных Docker-контейнеров

Время на прочтение4 мин
Охват и читатели20K
Перевод статьи подготовлен в преддверии старта курса «Пентест. Практика тестирования на проникновение».




Привилегированные контейнеры Docker – это такие контейнеры, которые запускаются с флагом --privileged. В отличие от обычных контейнеров, эти контейнеры имеют root-доступ к машине-хосту.

Привилегированные контейнеры часто используются, когда для выполнения задач нужен прямой доступ к аппаратной составляющей. Однако привилегированные Docker-контейнеры могут позволить злоумышленникам захватить хост-систему. Сегодня мы посмотрим, как можно выйти из привилегированного контейнера.
Читать дальше →

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

Время на прочтение3 мин
Охват и читатели10K
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него.

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

О конфликтах Sass и сравнительно новых возможностей CSS

Время на прочтение9 мин
Охват и читатели8.5K
Сравнительно недавно в CSS появилось много интересных возможностей, таких, как CSS-переменные и новые функции. Хотя всё это и может сильно упростить жизнь веб-дизайнерам, эти возможности способны неожиданными способами взаимодействовать с CSS-препроцессорами вроде Sass.



Автор материала, перевод которого мы сегодня публикуем, расскажет о том, с какими проблемами ей довелось столкнуться, о том, как она с ними справлялась, и о том, почему она считает, что без Sass в наши дни всё ещё обойтись нельзя.
Читать дальше →

В одной лодке с «ублюдком»: 11 продвинутых советов по использованию Git

Время на прочтение11 мин
Охват и читатели54K

*"ублюдок" — вольный перевод слова "git" — "an unpleasant or contemptible person", "неприятный или презренный человек".



В комментариях к статье 15 базовых советов по Git для эффективной работы каждый день развернулась дискуссия на тему эффективности использования тех или иных команд и опций. Надо признать, что git предоставляет столько различного функционала, что во-первых, за всем становится невозможно уследить, а во-вторых, его можно совершенно по-разному вписывать в рабочий процесс.


Давайте посмотрим, что можно использовать, чтобы улучшить себе жизнь. Статья предполагает, что читатель умеет пользоваться основными возможностями git и понимает что делает, когда, скажем, вводит в консоль git rebase --merge --autostash.

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

Валидация Kubernetes YAML на соответствие лучшим практикам и политикам

Время на прочтение20 мин
Охват и читатели16K

Прим. перев.: С ростом числа YAML-конфигураций для K8s-окружений всё более актуальной становится потребность в их автоматизированной проверке. Автор этого обзора не просто отобрал существующие решения для этой задачи, но и на примере Deployment'а посмотрел, как они работают. Получилось весьма информативно для тех, кому эта тема интересна.



TL;DR: В статье сравниваются шесть статических инструментов проверки и оценки YAML-файлов Kubernetes на соответствие лучшим практикам и требованиям.


Рабочие нагрузки Kubernetes, как правило, определяются в форме YAML-документов. Одна из проблем с YAML'ом — сложность задания ограничений или взаимоотношений между файлами манифестов.

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

Иван Тулуп: асинхронщина в JS под капотом

Время на прочтение24 мин
Охват и читатели59K
А вы знакомы с Иваном Тулупом? Скорее всего да, просто вы еще не знаете, что это за человек, и что о состоянии его сердечно-сосудистой системы нужно очень заботиться.

Об этом и о том, как работает асинхронщина в JS под капотом, как Event Loop работает в браузерах и в Node.js, есть ли какие-то различия и, может быть, похожие вещи рассказал Михаил Башуров (SaitoNakamura) в своем докладе на РИТ++. С удовольствием делимся с вами расшифровкой этого познавательного выступления.



О спикере: Михаил Башуров — fullstack веб-разработчик на JS и .NET из Luxoft. Любит красивый UI, зеленые тесты, транспиляцию, компиляцию, технику compiler allowing и улучшать dev experience.

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

Оливиновый песок очистит воздух от углекислого газа

Время на прочтение6 мин
Охват и читатели6K


Ученые из Project Vesta считают, что их особый зелёный песок способен замедлить изменение климата, очищая воздух на пляжах от углекислого газа. Что это за странный материал и чем он может быть полезен миру? Рассказываю подробности.
Читать дальше →

Шарманка на Ардуино

Время на прочтение9 мин
Охват и читатели9.8K

Эта публикация является переводом моей инструкции размещенной на сайте instructables.com. Проект занял первое место в DIY Arduino contest 2020 от Instructables



Привет! Это статья о том, как я делал шарманку на Arduino.

Как сбросить более 20 кг за несколько месяцев и не набрать их обратно

Время на прочтение5 мин
Охват и читатели24K
На первый взгляд статья не связана с ИТ, но для меня быть активным и все успевать не совместимо с нахождением в плохой форме и наличием лишнего веса. Как говорится: «В здоровом теле, здоровый дух». Не один раз замечал, как только я набираю определенное количество лишних килограмм, начинает падать моя активность, становится не только тяжело подняться по лестнице на пару этажей, становится тяжело даже выйти из дома.

Задача сбросить лишние килограммы для меня выглядит непросто: вкусно поесть люблю и отказываться от нормальной еды, вкусного пива и уж тем более начинать голодать – точно не мой вариант. Резкое ограничение приводило к тому, что через 1-2 недели у меня происходил срыв и быстрый возврат к прежнему весу.

Сразу хочу сказать, что я не доктор и не диетолог и не обращался к профессионалам. Я экспериментировал на себе, искал тенденции, искал, что работает в случае моего организма, а что нет. И ниже я хочу поделиться своим взглядом на процесс приведения себя в форму, рассказать о том, что помогло лично мне сбросить 30 кг за 6 месяцев в 2012 году и 23 кг за 4 месяца в 2018.

Оба раза подходы были принципиально разные, но есть несколько общих моментов, с которых хотелось бы начать.
Читать дальше →

Издательство Питер. Летняя распродажа

Время на прочтение1 мин
Охват и читатели13K
image

Привет, Хаброжители! На этой неделе у нас большие скидки. Подробности внутри.
Читать дальше →

Малоизвестные CSS-свойства

Время на прочтение5 мин
Охват и читатели29K
Существует много CSS-свойств, о которых некоторые дизайнеры просто не знают. Или — знают, но забывают использовать эти свойства там, где они способны принести большую пользу. Некоторые из этих свойств могут помочь отказаться от использования JavaScript ради достижения некоего результата, некоторые позволяют экономить время за счёт написания меньших объёмов CSS-кода. Я, занимаясь фронтенд-разработкой, постоянно натыкаюсь на подобные свойства. Однажды я подумал о том, чтобы взять и составить список CSS-свойств, интересных, но используемых редко. Так и родилась эта статья.

Здесь я расскажу о некоторых CSS-свойствах, которые, хочется надеяться, покажутся вам достойными внимания. При разговоре о некоторых из них, не отличающихся идеальной браузерной поддержкой, я расскажу о том, как применять их, используя технологию прогрессивных улучшений. Это позволит вам спокойно пользоваться этими свойствами и не беспокоиться об их поддержке браузерами.


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

PostgreSQL Antipatterns: анализируем блокировки — SELF JOIN vs WINDOW

Время на прочтение4 мин
Охват и читатели4.7K
Ранее мы уже научились перехватывать блокировки из лога сервера PostgreSQL. Давайте теперь положим их в БД и разберем, какие фактические ошибки и проблемы производительности можно допустить на примере их простейшего анализа.

В логах у нас отражается всего 3 вида событий, которые могут происходить с блокировкой:

  • ожидание блокировки
    LOG: process 38162 still waiting for ExclusiveLock on advisory lock [225382138,225386226,141586103,2] after 100.047 ms
  • получение блокировки
    LOG: process 38162 acquired ExclusiveLock on advisory lock [225382138,225386226,141586103,2] after 150.741 ms
  • взаимоблокировка
    ERROR: deadlock detected

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

Скрам умер. Да здравствует канбан

Время на прочтение7 мин
Охват и читатели54K
Я пользовался методом управления проектами Scrum (скрам) с самого начала карьеры. Я изучал скрам в колледже. Тогда он считался лучшим методом управления разработкой программного обеспечения. Когда я начал работать, мне нравилось всё, что имеет отношение к скраму: ежедневные встречи, планирование, ретроспективные совещания, спринты и так далее. В конце концов, я пользовался на практике тем, чему меня учили.



Но через несколько лет я начал кое-что замечать: в последние дни спринта все бросаются доделывать всё то, чем занимались в предыдущие две недели, стремясь избежать переноса задач на будущее. Часто те, кто так поступали, брали на себя ненужный риск.

Почему? Разве какие-то задачи не могут подождать до следующей недели? Так ли важно доделать абсолютно всё до выходных? Нет, не так уж это и важно. А всё это происходит из-за того, что «Переносы задач — это плохо».
Читать дальше →

Информация

В рейтинге
Не участвует
Работает в
Зарегистрирован
Активность