Pull to refresh
3
Karma
0
Rating
Дмитрий @dsrk_dev

Frontend Destroyer

Работа с пакетами в изолированной среде. Использование zfs datasets и jail’ов

Интернет Контроль Сервер corporate blog IT Infrastructure *Network technologies *DevOps *Software
В предыдущей статье мы рассказали, как работает система дистрибуции плагинов в новой версии ИКС. Сегодня речь пойдет о том, как разворачивать отдельно взятый плагин в системе.
Предпочтительнее всего, чтобы каждый плагин запускался в изолированной среде, подготовленной специально с учетом требований конкретного плагина. Причем, в среде, которая позволит взаимодействовать системе с плагином и плагинами между собой. Далее, для понимания, что это применимо к стандартной работе с пакетами, мы будем использовать термин “пакет”.
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Views 1.5K
Comments 2

Роутинг в комплексных чат-ботах с Hobot framework

Actualize Bot corporate blog Open source *JavaScript *Designing and refactoring *TypeScript *
Tutorial


Начав разрабатывать боты для Telegram несколько лет назад, я открыл для себя производительность, простоту и гибкость работы с ними как с частным случаем интерфейса командной строки. Эти характеристики, доступные сегодня многим — во многом заслуга популярного фреймворка telegraf.js и ему подобных, которые предоставляют упрощенные методы для работы с API Telegram.

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

В этой статье я хочу рассказать о небольшом фреймворке для роутинга в чат-ботах, без которого разработка нашего проекта была бы невозможна.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 2.1K
Comments 0

Как проектировать большие и сложные веб-таблицы

Edison corporate blog Interfaces *Usability *Accessibility *Design
Translation
image

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

В этом случае дизайнер сталкивается со многими проблемами. Например, сопоставление дизайна с существующими фронт-енд фреймворками или борьба с «неудобными» данными, которые разрушают макет. Мы преодолеем эти проблемы с помощью следующих шагов: систематизируем потребности, станем атомарными и определим взаимодействие.
Читать дальше →
Total votes 28: ↑28 and ↓0 +28
Views 30K
Comments 38

Обрабатываем заказы из интернет магазина с помощью RabbitMQ и TypeScript

Node.JS *TypeScript *
Sandbox


Всем привет! Популярность интернет коммерции постоянно растет, как и доля информатизации всех смежных с торговлей видов деятельности. Вместе с этим растет и сложность обработки информации. Каждый заказ, сделанный клиентом интернет магазина, порождает за собой большое количество интеграций с различными сервисами. Такими сервисами могут быть сервисы обработки платежей, доставки, системы учета и лояльности. Каждый заказ должен быть оплачен, учтен, собран и доставлен, а также доступен для последующего анализа. Эту, и так не простую ситуацию, усложняет и тот факт, что пользователь интернет магазина не хочет долго и мучительно чего-то ждать при оформлении заказа. Отклик от интернет магазина должен быть быстрым, ведь каждая миллисекунда задержки увеличивает шанс потери клиента, а в последствии и прибыли. В этой статье я хочу рассказать про брокер сообщений RabbitMQ и как с его помощью можно организовать процесс обработки заказов используя Node.js и TypeScript. Добро пожаловать под кат.

Читать дальше →
Total votes 24: ↑24 and ↓0 +24
Views 14K
Comments 4

Как заопенсорсить npm-пакет с нормальным деплоем, CI и демо (без потери радости к жизни)

TINKOFF corporate blog Open source *JavaScript *GitHub *DevOps *

Вот вы сделали что-то новое и крутое, приходит мысль — выложить в опенсорс и опубликовать в npm.


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


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


На самом деле всё это может занять у вас меньше часа. Без знаний DevOps и совершенно бесплатно.


Читать дальше →
Total votes 64: ↑64 and ↓0 +64
Views 10K
Comments 8

Переводим на DoH домашнюю сеть, или еще один щелчок по носу фильтрации

Network technologies *
Tutorial

После сравнительно недавнего анонса компанией Mozilla запуска поддержки DNS-over-HTTPS (DoH) в продакшн в сети не утихают споры, зло это или благо. По моим ощущениям, позиция "зло" базируется в основном на том, что при этом манипуляция вашими DNS-запросами даже в полезных для вас целях будет затруднена, поэтому я пока что остаюсь на позиции "благо".
image


В Российской Федерации операторы связи, поставленные в очень жесткие условия нашим законодательством, вынуждены строить изощренные многоуровневые системы блокировок доступа к запрещенному Роскомнадзором на территории РФ контенту, на одном из уровней которых более-менее успешно работает перехват DNS-запросов. Использование DoH позволит обойти этот уровень, что в совокупности с использованием VPN может несколько облегчить вам жизнь. Обратите внимание, само по себе решение не может избавить вас от блокировок, потому что вряд ли в России есть провайдер, полагающийся только на фильтрацию через DNS. Вам нужен еще какой-то вариант обойти блокировки, например VPN, один из описанных в моих предыдущих статьях.


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


Но переходить на специальный браузер, чтобы обойти перехват DNS — не наш путь. Наш путь — перевести все устройства домашней сети на DoH, быстро, эффективно и без лишних трудозатрат.

Читать дальше →
Total votes 35: ↑33 and ↓2 +31
Views 106K
Comments 67

Обход блокировок РКН с помощью DNSTap и BGP

Programming **nix *Network technologies *DNS *Network hardware
Tutorial


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


В связи с тем, что суды и РКН блокируют всё направо и налево, а провайдеры усиленно пытаются не попасть под штрафы, выписанные "Ревизорро" — сопутствующие потери от блокировок довольно велики. Да и среди "правомерно" заблокированных сайтов много полезных (привет, rutracker)


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


В этой заметке я не буду расписывать базовые сетевые вещи по шагам, а опишу общие принципы как можно реализовать эту схему. Так что знания как работает сеть вообще и в Linux в частности — must have.

Читать дальше →
Total votes 35: ↑32 and ↓3 +29
Views 50K
Comments 42

Черное Зеркало своими руками — обучаем бота на базе своей истории чатов

Machine learning *

В "Черном Зеркале" была серия (S2E1), в которой создавали роботов, похожих на умерших людей, используя для обучения историю переписок в социальных сетях. Я хочу рассказать, как я попробовал сделать что-то подобное и что из этого получилось. Теории не будет, только практика.


image


Идея была простая — взять историю своих чатов из Telegram и на их основе обучить seq2seq сеть, способную по началу диалога предсказывать его завершение. Такая сеть может работать в трех режимах:


  • Предсказывать завершение фразы пользователя с учетом истории разговора
  • Работать в режиме чат-бота
  • Синтезировать логи разговоров целиком

Вот что получилось у меня


Бот предлагает завершение фразы


image


Бот предлагает завершение диалога


image


Бот общается с живым человеком


User: привет
Bot: привет
User: как ты?
Bot: собираюсь
User: баг пофиксил?
Bot: нет
User: почему?
Bot: да не получается
User: ты сегодня когда дома будешь?
Bot: не знаю пока
User: ты занят?
Bot: в магазин еду 

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

Читать дальше →
Total votes 38: ↑36 and ↓2 +34
Views 15K
Comments 11

Храним SSH-ключи безопасно

Configuring Linux *Software
Translation


Хочу рассказать как безопасно хранить SSH-ключи на локальной машине, не боясь того, что какое-то приложение может украсть или расшифровать их.


Статья будет полезна тем, кто так и не нашел элегантного решения после паранои в 2018 и продолжает хранить ключи в $HOME/.ssh.


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


Это дает возможность безопасно хранить все ключи прямо в базе паролей и автоматически добавлять их в систему при её открытии. Как только база будет закрыта, использование SSH-ключей также станет невозможным.

Читать дальше →
Total votes 26: ↑22 and ↓4 +18
Views 28K
Comments 25

Фибоначчи на собеседовании

JavaScript *Algorithms *Mathematics *
Вычисление ряда Фибоначчи — это классическая алгоритмическая задача, потому её нередко дают на собеседованиях, когда хотят проверить, что кандидат в принципе хоть как-то умеет в алгоритмы. Предположим, вы тот самый кандидат. Вам дали задание: на языке JavaScript написать функцию fib(n), возвращающую энное число Фибоначчи. Считаем, что нулевое число Фибоначчи — это нуль. Проверка корректности аргумента не требуется. Какие у вас есть варианты?

image
Выбирай мудро
Total votes 183: ↑177 and ↓6 +171
Views 110K
Comments 134

Оптимизация node.js приложения

High performance *JavaScript *Node.JS *
Дано: старое http node.js приложение и возросшая нагрузка на него.

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

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

Всех заинтересованных добро пожаловать под кат!
Читать дальше →
Total votes 48: ↑45 and ↓3 +42
Views 15K
Comments 11

REST? Возьмите тупой JSON-RPC

PHP *JavaScript *API *
В последнее время на Хабре разгорелось много споров по поводу того, как правильно готовить REST API.

Вместо того, чтобы бушевать в комментариях, подумайте: а нужен ли вам REST вообще?
Что это — осознанный выбор или привычка?

Возможно, именно вашему проекту RPC-like API подойдет лучше?
Читать дальше →
Total votes 233: ↑229 and ↓4 +225
Views 156K
Comments 255

Профессиональная контейнеризация Node.js-приложений с помощью Docker

RUVDS.com corporate blog Website development *Virtualization *Node.JS *
Tutorial
Translation
Автор материала, перевод которого мы публикуем сегодня, работает DevOps-инженером. Он говорит, что ему приходится пользоваться Docker. В частности, эта платформа для управления контейнерами применяется на разных этапах жизненного цикла Node.js-приложений. Использование Docker, технологии, которая, в последнее время, является чрезвычайно популярной, позволяет оптимизировать процесс разработки и вывода в продакшн Node.js-проектов.

image

Сейчас мы публикуем цикл статей о Docker, предназначенных для тех, кто хочет освоить эту платформу для её использования в самых разных ситуациях. Этот же материал сосредоточен, в основном, на профессиональном применении Docker в Node.js-разработке.
Читать дальше →
Total votes 42: ↑34 and ↓8 +26
Views 57K
Comments 25

Распределённый чат на Node.JS и Redis

Instant Messaging *Node.JS *
Sandbox

Результат пошуку зображень за запитом "голубиная почта"


Небольшой вопрос/ответ:


Для кого это? Людям, которые мало или вообще не сталкивались с распределенными системами, и которым интересно увидеть как они могут строится, какие существуют паттерны и решения.


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


Постановка задачи


Как сделать чат? Это должно быть тривиальной задачей, наверное каждый второй бекендер пилил свой собственный, так же как игровые разработчики делают свои тетрисы/змейки и т. п. Я взялся за такой, но чтоб было интереснее он должен быть готов к захвату мира, чтоб мог выдерживать сотниллиарды активных пользователей и вообще был неимоверно крут. Из этого исходит ясная потребность в распределенной архитектуре, потому что вместить все воображаемое количество клиентов на одной машине — пока нереально с нынешними мощностями. Заместо того чтоб просто сидеть и ждать на появление квантовых компьютеров я решительно взялся за изучение темы распределенных систем.


Стоит отметить что быстрый отклик очень важен, пресловутый realtime, ведь это же чат! а не доставка почты голубями.


%рандомная шутка про почту россии%


Использовать будем Node.JS, он идеален для прототипирования. Для сокетов возьмем Socket.IO. Писать на TypeScript.


И так, что вообще мы хотим:


  1. Чтоб пользователи могли слать друг-другу сообщения
  2. Знать кто онлайн/оффлайн

Как мы это хотим:

Total votes 35: ↑32 and ↓3 +29
Views 32K
Comments 11

Знакомимся с микросервисным фреймворком Moleculer

Node.JS *Microservices *
Sandbox
Привет, %habrauser%!

Сегодня я хочу рассказать тебе об одном отличном, на мой взгляд, микросервисном фреймворке Moleculer.



Изначально этот фреймворк был написан на Node.js, но в последствии у него появились порты и на других языках таких как Java, Go, Python и .NET и, скорее всего, в ближайшем будущем, появятся и другие имплементации. Мы используем его в продакшене в нескольких продуктах уже около года и словами сложно описать, каким благословением он нам показался после использования Seneca и своих_велосипедов. Мы получили всё что нам нужно из коробки: сбор метрик, кэширование, балансировка, fault-tolerance, транспорты на выбор, валидация параметров, логирование, лаконичное объявление методов, несколько способов межсервисного взаимодействия, миксины и многое другое. А теперь по порядку.
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Views 14K
Comments 9

Sagи из жизни

JavaScript *ReactJS *

Доброго времени суток.


У вас тоже есть знакомый react-разработчик, который рассказывает восхитительные истории о сайд-эффектах в redux? Нет?! Могу я стать этим человеком?



Автор взял на себя смелость не писать вводную часть о том, что же из себя представляет библиотека redux saga. Он надеется, что в случае недостаточности данных великодушный читатель воспользуется поиском хабра или официальным туториалом. Приводимые примеры во многом упрощены для передачи сути.

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 14K
Comments 9

Под капотом Screeps — виртуализация в MMO-песочнице для программистов

JavaScript *Virtualization *Game development *Node.JS *

В этой статье я расскажу про одну малоизвестную технологию, которая нашла ключевое применение в нашей онлайн-игре для программистов. Чтобы долго не тянуть резину, сразу спойлер: кажется, что такого шаманства в нативном коде Node.js, к которому мы пришли после нескольких лет разработки, до нас еще никто не делал. Движок изолированных виртуальных машин (опенсорсный), который работает под капотом проекта, был написан специально для его нужд, и на данный момент используется в продакшене нами и еще одним стартапом. А возможности изоляции, которые он дает, не имеют аналогов и заслуживают, чтобы о них рассказали.


Но давайте обо всем по порядку.


Предыстория


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



Жаль лишь, что совсем немного реальных проектов, связанных с каждодневным заработком, могут предложить своим разработчикам такие чувства. Чаще всего для того, чтобы не терять страсть к программированию, энтузиастам приходится затевать интрижку на стороне: программистское хобби, пет-проект, модный open-source, просто скрипт на питоне по автоматизации своего умного дома… или поведения персонажа в какой-нибудь популярной онлайн-игре.

Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Views 14K
Comments 13

Для тех, кто познаёт ушами: подкасты для разработчиков

VK corporate blog IT systems testing *Programming *Development of mobile applications *


Кто сказал, что разработчики могут учиться новому только через книги, видео и анализ чужого кода? Ведь у нас и другие каналы получения информации из окружающего мира. Конечно, речь не о том, чтобы попробовать знания на вкус, пощупать их или понюхать. А вот послушать — самое оно. Мы собрали для вас коллекцию действующих русскоязычных подкастов для разработчиков. Хороший способ дать глазам отдых или занять себя в пробках.
Читать дальше →
Total votes 83: ↑80 and ↓3 +77
Views 50K
Comments 57

JSON API – работаем по спецификации

Конференции Олега Бунина (Онтико) corporate blog Website development *Open source *JavaScript *Programming *
В последнее время веб-разработка разделилась. Теперь мы все не full-stack программисты — мы фронтендеры и бэкендеры. А самое сложное в этом, как и везде, это проблема взаимодействия и интеграции.

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

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


Total votes 71: ↑68 and ↓3 +65
Views 125K
Comments 110

Изучая go: пишем p2p мессенджер со сквозным шифрованием

Decentralized networks *Go *
Sandbox

Yet another P2P Messenger


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


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


Пример UI чата на ReactJs


Статья ориентирована на новичков интересующихся языком go и пиринговыми сетями.
И для профессионалов, умеющих предлагать разумные идеи или конструктивно критиковать.

Читать дальше →
Total votes 59: ↑56 and ↓3 +53
Views 40K
Comments 25

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity