Pull to refresh
-8
0

Тестер

Send message

Tinc — настройка VPN в Ubuntu

Reading time4 min
Views13K
Tinc — это открытый сетевой протокол и программная реализация, используемая для сжатых и зашифрованных виртуальных частных сетей. Это проект был начат в 1998 году Гусом Слипеном, Иво Тиммермансом и Весселем Данкерсом под лицензией GPL.

К его основным достоинствам относится:
1) Распределенная топология (нет необходимости в мощном сервере VPN).
2) Работет поверх сетей любой топологии, в том числе за NAT и поверх других VPN.
3) Поддерживает активное соединение даже после переключения сети (например с wi-fi на 4g) или при входе и выходе из других VPN.
4) Работет в большинстве операционных систем, в том числе Windows XP.

К этому можно добавить, что tinc входит во все дистирбутивы Linux, то есть его можно установить и сразу пользоваться.

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

В этом сообщении я опишу конфигурацию tinc VPN в операционной истеме Ubuntu.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments15

DDoS атаки на 7 уровень — защита сайтов

Reading time6 min
Views10K
DDoS атаки на 7 уровень (на уровень приложения) наиболее простой способ привести в нерабочее состояние сайт и навредить бизнесу. В отличие от атак на другие уровни, когда для отказа сайта необходимо организовать мощный поток сетевого трафика, атаки на 7 уровень могут проходить без превышения обычного уровня сетевого трафика. Как это происходит, и как от этого можно защищаться я рассмотрю в этом сообщении.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments1

Fastify.js — не только самый быстрый веб-фреймворк для node.js

Reading time8 min
Views34K
Последние 10 лет среди веб-фреймворков для node.js самой большой популярностью пользуется Express.js. Всем, кто с ним работал, известно, что сложные приложения на Express.js бывает сложно структурировать. Но, как говорится, привычка — вторая натура. От Express.js бывает сложно отказаться. Как, например, сложно бросить курить. Кажется, что нам непременно нужна эта бесконечная цепь middleware, и если у нас забрать возможность создавать их по любому поводу и без повода — проект остановится.

Отрадно, что сейчас, наконец, появился достойный претендент на место главного веб-фреймворка всех и вся — я имею в виду не Fastify.js, а, конечно же, Nest.js. Хотя по количественным показателям популярности, до Express.js ему очень и очень далеко.

Таблица. Показатели популярности пакетов по данным npmjs.org, github.com
Пакет Количество загрузок Количество «звезд»
1 connect 4 373 963 9 100
2 express 16 492 569 52 900
3 koa 844 877 31 100
4 nestjs 624 603 36 700
5 hapi 389 530 13 200
6 fastify 216 240 18 600
7 restify 93 665 10 100
8 polka 71 394 4 700
9 loopback 28 501 13 300
10 Adonis.js 3 825 10 100


Express.js по-прежнему работает в более чем в 2/3 веб-приложений для node.js. Более того, 2/3 наиболее популярных веб-фреймворков для node.js используют подходы Express.js. (Точнее было бы сказать, подходы библиотеки Connect.js, на которой до версии 4 базировался Express.js).

В предлагаемом сообщении обсуждаются особенности основных веб-фреймворков для node.js, и что делает Fastify.js фреймворком другого уровня, что позволяет выбрать его как фреймворк для разработки Вашего следующего проекта.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments32

ArangoDB в реальном проекте

Reading time5 min
Views12K

ArangoDB мультимодельная (документная и графовая) база данных. К ее положительным сторонам относятся:


  • мощный и удобный язык запросов AQL
  • JOIN (даже более мощный чем в реляционных базах данных)
  • репликация и шардинг
  • ACID (в кластере работает только в платной версии)

Из менее существенных, но не менее удобных возможностей:


  • нечеткий поиск
  • встроенный в базу данных движок микросервисов Foxx
  • работа в режиме подписки на изменения в базе данных

Справедливости ради отмечу и недостатки:


  • отсутствие ODM
  • низкая популярность (в сравнении например с MongoDB)

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

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

Демистификация JWT

Reading time5 min
Views14K

Вокруг JWT сложилась много распространенных заблуждений. Одно из них, например, что JWT зашифровано (на самом деле только подписано и закодировано base64url). На практике, я часто встречаюсь с довольно странными решениями, когда в JWT хранится только один идентификатор сессии (на самом деле если вы работаете с сессией то JWT вам не нужен). Или же в JWT хранится только один идентификатор пользователя, профайл которого запрашивается при каждом запросе из базы данных (на самом деле JWT имеет смысл, если Вы хотите уменьшить количество запросов в базу данных). Или, что еще более странно — сами JWT хранятся в базе данных.


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


Желание написать об этом у меня возникло уже давно. И после просмотра очередного проекта с немного странным использованием JWT я все же решился.

Читать дальше →
Total votes 12: ↑9 and ↓3+6
Comments41

Haproxy — программирование и конфигурирование средствами Lua

Reading time9 min
Views8.2K

Сервер Haproxy имеет встроенные средства для выполнения скриптов Lua.


Язык программирования Lua для расширения возможностей различных серверов используется очень широко. Например, на Lua можно программировать для серверов Redis, Nginx (nginx-extras, openresty), Envoy. Это вполне закономерно, так как язык программирования Lua как раз и был разработан для удобства встраивания в приложения в качестве скриптового языка.


В этом сообщении я рассмотрю варианты использования Lua для расширения возможностей Haproxy.

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

Marko.js — фронтенд от ebay.com

Reading time6 min
Views8.9K
Marko.js не так популярен, как Angular, React.js, Vue.js или Svelte. Marko.js — это проект ebay.com, который с 2015 года стал достоянием opensource. Собственно, именно на этой библиотеке построен фронтенд ebay.com, что позволяет сделать заключение о её практической ценности для разработчиков.

Ситуация с Marko.js, немного напоминает ситуацию с фреймворком Ember.js, который, несмотря на то что работает в качестве фронтенда нескольких высоко-нагруженных сайтов (например Linkedin) — о нем мало знает среднестатистический разработчик. В случае с Marko.js — можно утверждать, что совсем не знает.

Marko.js неистово быстр, особенно при серверном рендеринге. Что касается серверного рендеринга, то скорость Marko.js, скорее всего, останется недосягаемой для его неторопливых собратьев, и этому есть объективные причины. О них и поговорим в предлагаемом материале.
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments32

Инструменты Node.js разработчика. Какие ODM нам нужны

Reading time6 min
Views7.7K

ODM - Object Document Mapper - используется преимущественно для доступа к документоориенриирвоанным базам данных, к которым относятся MongoDB, CouchDB, ArangoDB, OrientDB (последние две базы данных гибридные) и некоторые другие.

Прежде чем перейти к рассмотрению вопроса, озвученного в названии сообщения, приведу статистику скачивания пакетов из публичного регистра npm.

Читать далее
Total votes 13: ↑10 and ↓3+7
Comments4

Web Push и Vue.js, еще раз о работе с веб-пуш сообщениями на фронтенде

Reading time8 min
Views9.3K
Проработав в очередном проекте функционал с веб-пуш сообщениями, я обнаружил, что информации для того, чтобы сделать это быстро и без вопросов по-прежнему не хватает. Поэтому, пока все еще не выветрилось из памяти, спешу оформить этот опыт в виде статьи.

Можно найти статьи, датированные 2017...2018 годом, ориентированные на использование сравнительно низкоуровневых средств для отправки и получения веб-пуш сообщений, например, при помощи библиотеки web-push-libs/web-push. Эта библиотека по-прежнему развивается, однако в настоящее время гораздо проще работать с библиотеками от firebase.
Читать дальше →
Total votes 1: ↑1 and ↓0+1
Comments12

NestJS. Загрузка файлов в S3 хранилище (minio)

Reading time6 min
Views14K
NestJS — фреймворк для создания эффективных, масштабируемых серверных приложений на платформе Node.js. Вы можете встретить утверждение, что NestJS является платформо-независимым фреймворком. Имеется в виду, что он может работать на базе одного из двух фрейморков по Вашему выбору: NestJS+Express или NestJS+Fastify. Это действительно так, или почти так. Эта платформо-независимость заканчивается, на обработке запросов Content-Type: multipart/form-data. То есть практически на второй день разработки. И это не является большой проблемой, если Вы используете платформу NestJS+Express — в документации есть пример работы для Content-Type: multipart/form-data. Для NestJS+Fastify такого примера нет, и примеров в сети не так уж и много. И некоторые из этих примеров идут по весьма усложненному пути.

Выбирая между платформой NestJS+Fastify и NestJS+Express я сделал выбор в сторону NestJS+Fastify. Зная склонность разработчиков в любой непонятной ситуации вешать на объект req в Express дополнительные свойства и так общаться между разными частями приложения, я твердо решил что Express в следующем проекте не будет.
Читать дальше →
Total votes 4: ↑3 and ↓1+2
Comments6

Зал Трудовой Славы JavaScript, часть 2

Reading time5 min
Views3.8K
Первая часть обзора была посвящена библиотекам Prototype.js и requirejs. Уже в процессе написания, возникла необходимость рассматривать не только библиотеки, которые существенно повлияли на современное состояние JavaScript, но и идеи, которые публиковались в статьях, прорабатывались в спецификациях, например: ajax, commonjs, универсальные/изоморфные веб-приложения.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments1

Зал Трудовой Славы JavaScript

Reading time4 min
Views6.2K
С появлением библиотек JavaScript, которые разрабатываются большими коллективами, таких как Angular, React, Vue, — безвозвратно ушли с арены гении-одиночки, которые разрабатывали всю или, по крайней мере, основную часть библиотеки самостоятельно. Предлагаю вместе вспомнить названия этих библиотек, и, наконец, узнать имена их разработчиков.
Total votes 15: ↑11 and ↓4+7
Comments15

Универсальный роутинг для React приложений

Reading time5 min
Views14K
Если попытаться в двух словах описать, в чем заключается функция роутинга на фронтэнде веб-приложений, то можно придти к выводу, что каждый популярный фреймоворк совершенно по-разному представляет это себе. Даже, сравнивая версии одного и того же фреймоворка, можно придти к выводу, что функции и API роутинга наиболее подвержены изменениям (часто без обратной совместимости). Например 4-я версия роутинга в React была переработана настолько радикально, что некоторые популярные проекты на githab.com так и не перешли на эту версию.

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

В этом сообщении я рассмотрю некоторые исторические моменты, которые привели к такому положению дел с роутингом, а также использование библиотеки universal-router, совместно с React.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments13

REST API должен основываться на гипертексте

Reading time6 min
Views7.7K
image

– И вы ему поверили? – с упреком сказал уполномоченный по копытам. – Ну, как вы думаете, разве я без вашего разрешения взял бы эти гири?

– Так это вы взяли гири? – закричал Остап. – Зачем же?

– Паниковский сказал, что они золотые.

Остап посмотрел на Паниковского. Только сейчас он заметил, что под его пиджаком нет уже полтинничной манишки и оттуда на свет божий глядит голая грудь. Не говоря ни слова, великий комбинатор свалился на стул. Он затрясся, ловя руками воздух. Потом из его горла вырвались вулканические раскаты, из глаз выбежали слезы, и смех, в котором сказалось все утомление ночи, все разочарование в борьбе с Корейко, так жалко спародированной молочными братьями.

Этим фрагментом из классики я хотел бы предварить перевод блог-поста Роя Т. Филдинга REST APIs must be hypertext-driven. Отдельное спасибо habr.com/users/arthuriantech за ссылку на материал.

Эта неделя на Хабре ознаменовалась как неделя REST(Full) API. Меня в этом смысле всегда смущало наличие приставки REST в этом термине. И, как оказалась, не одного меня. Сегодня я прочитаю сам и предлагаю всем желающим узнать что об этом думал Рой Т. Филдинг в 2008 году. Конечно, кто-то нервно заерзает на стулке и скажет: передайте Рою, Беня знает за REST API. И тем не менее начнем.
Начнем
Total votes 16: ↑10 and ↓6+4
Comments22

Занимательное планирование

Reading time9 min
Views8.7K
Я захожу в супермаркет и наблюдаю: как все же далеко шагнула автоматизация. Все продукты снабжены штрих-кодами. Для весового товара есть весы с функцией печати штрих-кода, которыми без проблем пользуются покупатели от мала до велика. Я — доволен.

Однако, откуда эти горы продукции на последних днях срока годности? Почему хлеб, который я покупаю уже закончился, а одноразовые станки для бритья, которые я предпочитаю другим — периодически пропадают на 2-3 месяца. Мы же рынок! Да кто это вообще планирует? И планирует ли?

С такими вот мыслями я решил написать этот пост, в котором расскажу о некоторых базовых методах планирования. В надежде, что это может кому-то быть также интересным, как интересно мне.
Total votes 13: ↑13 and ↓0+13
Comments3

Локализация пуш-сообщений в мобильных приложениях

Reading time2 min
Views3.2K
Получив на поддержку очередной проект бэкенда мобильного приложения, я, к сожалению, столкнулся с тем, что массовая рассылка пуш-сообщений в топики (topics) не локализована. В интернете я также не нашел подробного материала по этому вопросу. И все, что я нашел, относилось к локализации на стороне клиента, а это не всегда удобно, т.к. требует заранее определить все возможные варианты сообщений и создать для них ресурсные файлы со всеми возможными переводами.

В своем сообщении я расскажу, как можно сделать локализацию пуш-сообщений в топиках на стороне бэкенда мобильного приложения.
Читать дальше →
Total votes 11: ↑7 and ↓4+3
Comments4

Инструменты Node.js разработчика. Протокол mqtt для работы с веб-сокетами

Reading time5 min
Views18K
Технология веб-сокет позволяет в веб-приложении или в мобильном приложении реализовать отправку сообщений с сервера на клиент, что невозможно сделать средствами REST-API. Для работы с веб-сокетами часто используют библиотеку socket.io, или же разработчики работают с нативными объектами веб-сокет браузеров. В этом сообщении я попытаюсь показать, что оба пути не решают всех проблем, и гораздо лучше использовать для работы с веб-сокетами специализированные серверы, например mqtt-сервер (раньше его назвали mqtt-брокер).

Справедливости ради, и чтобы избежать ненужных споров, замечу, что кроме mqtt-сервера может быть использован еще целый ряд серверов, например rabbitmq.
Читать дальше →
Total votes 12: ↑8 and ↓4+4
Comments12

Инструменты Node.js разработчика. Удаленный вызов процедур на веб-сокетах

Reading time7 min
Views6.2K
О технологии websocket часто рассказывают страшилки, например что она не поддерживается веб-браузерами, или что провайдеры/админы глушат трафик websocket — поэтому ее нельзя использовать в приложениях. С другой стороны, разработчики не всегда заранее представляют подводные камни, которые имеет технология websocket, как и любая другая технология. По поводу мнимых ограничений сразу скажу, что технологию websocket сегодня поддерживают 96.8% веб-браузеров. Вы можете сказать, что оставшиеся за бортом 3,2% — это много, это миллионы пользователей. Я с Вами вполне соглашусь. Только все познается в сравнении. Тот же XmlHttpRequest, который все и уже не первый год используют в технологии Ajax, поддерживается 97.17% веб-браузеров (не сильно больше, правда?), а fetch — вообще, 93.08% веб-браузеров. В отличие от websocket, такой процент (а раньше он был еще меньше) уже давно никого не останавливает при использовании технологии Ajax. Так что использовать в настоящее время fallback на long polling не имеет никакого смысла. Хотя бы потому, что веб-браузеры, которые не поддерживают websocket — это те же самые веб-браузеры, которые не поддерживают XmlHttpRequest, и в реальности никакого fallback не произойдет.

Вторая страшилка, про бан на websocket со стороны провайдеров или админов корпоративных сетей — также необоснована, так как сейчас все используют протокол https, и понять что открыто соединение websocket (не взломав https) невозможно.

Что же касается реальных ограничений и способах их преодоления, я расскажу в этом сообщении, на примере разработки веб-админки приложения.
Читать дальше →
Total votes 13: ↑10 and ↓3+7
Comments13

Иструменты Node.js разработчика. Очереди заданий (job queue)

Reading time7 min
Views31K
При реализации бэка веб-приложений и мобильных приложений, даже самых простых, уже стало привычным использование таких инструментов как: базы данных, почтовый (smtp) сервер, redis-сервер. Набор используемых инструментов постоянно расширяется. Например, очереди сообщений, судя по количеству установок пакета amqplib (650 тыс. установок в неделю), используется наравне с реляционными базами данных (пакет mysql 460 тыс. установок в неделю и pg 800 тыс. установок в неделю).

Сегодня я хочу рассказать об очередях заданий (job queue), которые пока используются на порядок реже, хотя необходимость в них возникает, практически, во всех реальных проектах
Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments2

Правила выбора JS-фреймворка

Reading time13 min
Views6.5K
TL;DR

  • В статье не рассматриваются JS-фреймворки из списка TOP-3
  • При разработке на JS-фреймворке не из списка TOP-3 приходится решать на порядок больше технических вопросов, чем это ожидается в начале разработки
  • История основана на реальных событиях
Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments32

Information

Rating
Does not participate
Registered
Activity