Pull to refresh
-4
0
Send message

Игра по правилам Event loop в Node.js

Reading time 11 min
Views 21K

Я пришел в компанию Lineate работать именно на Node.js. В процессе выполнения проектов мне приходилось обращаться к более опытным коллегам и выяснять ответы на возникающие у меня вопросы, но, как оказалось, никто не был уверен в своих ответах на 100%. C Event loop разобраться сложно и не всегда понятно, зачем это нужно на практике. Поэтому даже у опытных коллег знания по этой технологии часто только теоретические — в рабочих условиях ее применяют редко. Опрос, созданный мной в Google Form, прошли около 25 человек, вопросы были совершенно стандартные, из тех, что обычно задают на собеседованиях. Правильных ответов было очень мало, около 23-24%. 

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

Результаты публикуем на Хабре. Если мы хотим добиться производительности, нам нужно отойти от стандартных идей и играть по правилам Node.js. 

Читать далее
Total votes 10: ↑9 and ↓1 +8
Comments 31

Подходы к контролю доступа: RBAC vs. ABAC

Reading time 5 min
Views 151K
В этой теме хотелось бы познакомить читателей с относительно новым подходом к контролю доступа под названием Attribute-based access control. Знакомство будет происходить на примере сравнения с популярным нынче Role-based access control.
Читать дальше →
Total votes 32: ↑31 and ↓1 +30
Comments 45

Документирование API сервисов с помощью Swagger на примере фреймворков Express.js и Gin

Level of difficulty Medium
Reading time 41 min
Views 37K

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

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

Основное внимание в статье будет уделено автоматизации процесса создания документации API сервисов, которые разрабатываются с помощью фреймворков Express.js и Gin, используя подходящий для этой задачи инструмент - Swagger.

Читать далее
Total votes 5: ↑3 and ↓2 +1
Comments 4

Кому принадлежит время

Reading time 13 min
Views 11K
image

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

Интернет зависит от времени так, что малейшая ошибка ведет к масштабным проблемам: падению серверов, сбоям в DNS, зависанию приложений. Из-за проблем со временем системы зацикливаются и потребляют излишние ресурсы CPU.

Конечно, программисты знают, откуда берется время. UNIX-time, timestamp, datetime, tzdata, NTP и другие решения дают четкое ощущение контроля времени. Однако кому на самом деле время принадлежит, кто несет за него ответственность?

Это история о бесконечном поиске консенсуса, талантливых одиночках, работающих без зарплаты, крушении «Титаника», увлеченном слепом программисте и смелых решениях, ведущих к новым ошибкам. Это история про время.

Читать дальше →
Total votes 54: ↑52 and ↓2 +50
Comments 17

Поиск в глубину, поиск в ширину, алгоритмы Дейкстры и А* — это один и тот же алгоритм

Reading time 7 min
Views 15K

В алгоритмических задачах на графах мы часто используем четыре известных алгоритма: Поиск в ширину или глубину, алгоритмы Дейкстры и А*. Разбираемся, почему на деле это один и тот же алгоритм.

Читать далее
Total votes 39: ↑34 and ↓5 +29
Comments 21

Security микросервисов с помощью Spring Cloud Gateway и TokenReley

Reading time 8 min
Views 21K

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

Читать далее
Total votes 3: ↑3 and ↓0 +3
Comments 12

Что есть обоснование функциональных требований (или что такое «Чтобы что»)

Reading time 26 min
Views 8.5K

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

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

25 правил разработки программных интерфейсов [издание третье, дополненное и расширенное]

Reading time 33 min
Views 9K

Это — очередная (уже третья) ревизия главы 11 мой книги о разработке API. Если вы найдёте этот текст полезным, я буду очень благодарен за рейтинг на Амазоне.

Читать далее
Total votes 14: ↑14 and ↓0 +14
Comments 41

О самодельном тепловизоре

Reading time 8 min
Views 36K

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

Читать дальше →
Total votes 80: ↑75 and ↓5 +70
Comments 48

12 схем архитектуры английской грамматики

Reading time 12 min
Views 36K

Я предприняла попытку смоделировать в 12 схемах и 16 пунктах пояснительных заметок английский как систему: общую структуру его уровней, логику и принципы, по которым он, в рамках моего подхода, функционирует. Мне хотелось, насколько это возможно, в своём описании грамматики придерживаться формата технической документации.

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

Читать далее
Total votes 36: ↑28 and ↓8 +20
Comments 86

Понимаем соединения и пулы

Reading time 20 min
Views 33K

Прим. перев.: автор этой статьи — технический архитектор Sudhir Jonathan — рассказывает об одном из тех базовых механизмов, с которым сталкивается каждый пользователь, разработчик и системный администратор. Однако до возникновения определённых (и иногда довольно специфичных) проблем многие не задумываются о том, как всё работает «под капотом». Автор устраняет этот пробел, используя популярные фреймворки, серверы БД и приложений в качестве понятных примеров.

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

Читать далее
Total votes 34: ↑33 and ↓1 +32
Comments 3

Работа с базами данных глазами разработчика

Level of difficulty Easy
Reading time 20 min
Views 12K

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

Написание SQL миграции → написание кода → тестирование → релиз → мониторинг.

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

Поскольку мы в компании работаем с PostgreSQL, а серверный код пишем на Java, то примеры будут основаны на этом стеке, хотя большинство идей не зависят от используемой БД и языка программирования.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Comments 17

Основы масштабирования

Reading time 10 min
Views 62K
Прочитав в этом блоге о балансировке на стороне клиента, решил опубликовать свою статью, в которой описаны основные принципы масштабирования для web-проектов. Надеюсь, хабралюдям будет интересно почитать.

Основы масштабирования



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

Обычно о масштабировании начинают думать тогда, когда один
сервер не справляется с возложенной на него работой. С чем именно он не
справляется? Работа любого web-сервера по большому счету сводится к основному
занятию компьютеров — обработке данных. Ответ на HTTP (или любой другой) запрос
подразумевает проведение некоторых операций над некими данными. Соответственно,
у нас есть две основные сущности — это данные (характеризуемые своим объемом) и
вычисления (характеризуемые сложностью). Сервер может не справляться со своей
работой по причине большого объема данных (они могут физически не помещаться на
сервере), либо по причине большой вычислительной нагрузки. Речь здесь идет,
конечно, о суммарной нагрузке — сложность обработки одного запроса может быть
невелика, но большое их количество может «завалить» сервер.

Читать дальше →
Total votes 68: ↑67 and ↓1 +66
Comments 49

Почему современная наука основана на вере?

Reading time 12 min
Views 45K

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

Проблема неполной индукции

Знаменитый древнегреческий философ Аристотель в своем трактате «Аналитика» выделяет два вида возможных умозаключений - индуктивное и дедуктивное.

Дедуктивное умозаключение - это логический вывод о частных случаях исходя из общего правила. Индуктивное умозаключение - это логический вывод об общем правиле исходя из частных случаев.

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

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

Читать далее
Total votes 122: ↑99 and ↓23 +76
Comments 623

Фундаментальная теория тестирования

Reading time 15 min
Views 992K
В тестировании нет четких определений, как в физике, математике, которые при перефразировании становятся абсолютно неверными. Поэтому важно понимать процессы и подходы. В данной статье разберем основные определения теории тестирования.


Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Comments 5

Собеседование Backend-Java-разработчика: вопросы и где искать ответы. Часть 1

Reading time 34 min
Views 84K

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


Точно установить сложность всех вопросов не берусь — на разном уровне их потребуется раскрыть с различной степенью подробности. Я написал ответы где-то на плюс-минус middle, щедро приправив ссылками для дальнейших изысканий. На самые популярные вопросы сразу перенаправляю в источники с готовыми ответами. Заодно посмотрим по ссылкам в статье, насколько Хабр может помочь в подготовке к собесам.


Текста получилось много, поэтому пришлось разбить на две части. В первой поговорим про Java и Spring, а обо всём остальном — во второй. Вторая часть тут

Погнали
Total votes 17: ↑15 and ↓2 +13
Comments 7

Собеседование Backend-Java-разработчика: вопросы и где искать ответы. Часть 2

Reading time 30 min
Views 77K

Публикую продолжение сборника вопросов-ответов с собеседований на Backend-Java-разработчика. В первой части мы прошлись по Java и Spring. А в этой поговрим о Hibernate, базах данных, паттернах и практиках разработки, об одной популярной библиотеке, поддержке и сопровождении наших приложений, а также посмотрим на альтернативные шпаргалки и подведём итоги.

Потопали
Total votes 21: ↑18 and ↓3 +15
Comments 14

Электронная почта и работа с ней в Java-приложениях

Reading time 14 min
Views 39K

Disclaimer
Статья написана для новичков и тех, кому хочется шаг за шагом понять как устроена работа с электронной почтой из Java-приложений. Желающие быстро понять как отправлять электронные письма из Spring-приложений могут сразу переходить к 3 части.


Эту статью я решил написать, потому что не нашел русскоязычных источников про работу c электронной почтой из Java, описывающих имеющиеся библиотеки достаточно полно. На хабре существует статья, посвященная очень узкой задаче по чтению писем (и выводу их содержимого в консоль) и статья с how-to по отправлению
письма с вложениями при помощи Spring Email. Также существует несколько статей (например) на тематических ресурсах, которые приводят порядок действий при работе
с электронной почтой. В этих источниках мне не хватало объяснения основ, на которых стоит
электронная почта и взгляда с высоты на существующие библиотеки для работы с почтой в Java.


Для таких же лапкообразных, как я, написана эта статья. Она дает общие представления о работе электронной почты, разъясняет основные сущности библиотеки Jakarta Mail и дает советы о том, как работать с электронной почтой в Spring-приложениях.

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

Цвет в современных фильмах

Reading time 11 min
Views 102K

Всем привет, меня зовут Денис. Я работаю художником по свету (Lighting Artist) в игровой индустрии. Часто читаю Хабр просто потому что интересно и вот сегодня увидел статью Дефицит цветов в современных фильмах которая меня немного ошарашила. Ведь в кино существуют целые отделы композитинга, которые занимаются цветокоррекцией изображения, чтобы конечный результат выглядел красиво, а также вызывал определённые эмоции. Поэтому меня сильно удивило, что кто-то видит в этом отрицательную сторону.

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

Давайте разбираться, почему же в кино цветовая палитра сводится к нескольким конкретным цветам, а не представляет полный спектр. Хочу заметить, что всё нижеупомянутое применимо и к современным играм.
Читать дальше →
Total votes 331: ↑326 and ↓5 +321
Comments 286
1

Information

Rating
Does not participate
Registered
Activity