Если вы работаете с Javascript, то скорее всего вы заметили много шума об уязвимости в npm-пакете event-stream. (На Хабре тоже опубликовали пост об этом — пер.) К сожалению, детальный анализ ситуации похоронен под более чем 600 комментариями в issue на Github, большая часть которых – флейм о состоянии npm, open-source в целом и т.д. Я подумал, что это плохо, потому что нам самом деле бэкдор исключительно умный и интересный с технической точки зрения, а также преподает нам важный урок о том, как поддерживать безопасность в приложениях на Javascript. Так что я решил написать пост с детальным объяснением, как сработала эта атака и что может сделать Javascript сообщество, чтобы лучше защититься от подобных атак в будущем.
Рубрика «node.js» - 20
Объясняем бэкдор в event-stream
2018-11-28 в 11:30, admin, рубрики: javascript, node.js, информационная безопасность, может, опциональными, пора, сделать, тегиЖадный гном: Как я писал аналитику рынка в Lineage 2
2018-11-26 в 2:42, admin, рубрики: analytics, devops, docker, Grafana, kotlin, Ktor, lineage 2, node.js, nodejs, prometheus, Puppeteer, Игры и игровые приставки, монетизация игрВот и наступила осенне-зимняя пора. За окном дожди и желания проводить время на открытом воздухе все меньше и меньше. И вот приходит мне сообщение от товарища "А давай поиграем в Lineage 2?". И опять я, поддавшись ностальгии, согласился. Выбрали мы свеженький сервер на ру-офе и создали персонажей.
В отличии от World of Warcraft в Lineage 2 совершенно другая система добычи игровой валюты. Нужно круглыми сутками охотиться на монстров с целью получения наживы. Для меня было даже открытием, что для некоторых людей RMT (Real money trading) является чем то вроде работы. Также, в игре присутствует экономика, которую формируют игроки. Иными словами, можно заработать на купи-продай или же покупать дешевые ресурсы, из них делать вещи и продавать с наценкой. Так как для нас игра остается чем то вроде отдыха именно такой способ получения игровой валюты был выбран нами.
Чтобы покупать и продавать предметы игрок должен находиться online (Скриншот сверху). Соответсвенно, кто-то хочет побыстрее продать (дешевле) а кто-то побыстрее купить (дороже). А что если разница продать — купить положительная? Как раз этот пример и будет рассмотрен в статье как итог.
Однако, цены на рынке достаточно нестабильны и часто меняются. По этому существует вероятность купить что то "дешево" и потом еще дешевле продать и отрицательной прибылью. Этого мы и стараемся избежать. В общем было решено написать систему аналитики рынка и разобраться с парочкой интересных мне технологий.
Spoiler:
В статье будут использованы следующие технологии
Docker, DigitalOcean, NodeJs, Ktor, Prometheus, Grafana, Telegram bot notification
node.js serverside — работа над ошибками. Часть 1
2018-11-25 в 9:02, admin, рубрики: javascript, node.js, npmДобрый день.
Эта статья ориентирована на разработчиков, имеющих представление о node.js.
Недавно готовил материал по фактам, которые полезно знать разработчикам под node.js в нашей конторе. Проекты, над которыми мы работаем — это API сервисы, использующие модуль node.js express в качестве веб-сервера. Материал основан на реальных случаях, в которых код работал неправильно или логика в нём была тщательно скрыта или он провоцировал ошибки при расширении. На основе этого материала был проведён семинар по повышению квалификации сотрудников.
Вот, решил поделиться. Пока только первая часть, это около 30%. Если будет интересно, последует продолжение!
Я старался предоставить возможность быстрого ознакомления, поэтому примеры, рассуждения и комментарии спрятал в спойлерах. Если утверждения очевидны, "воду" можно пропустить. Хотя наши "грабли" в спойлерах тоже могут быть интересны.
Один коллега при проведении семинара задал мне вопрос, зачем об этом говорить, если всё и так есть в той или иной документации. Мой ответ был следующий. Несмотря на то, что посыл верен, всё действительно есть в документации, мы по-прежнему делаем досадные ошибки, связанные с непониманием или незнанием базовых вещей.
Приступим!
Виртуальная машина node.js
Однопоточность
В отличие от javavm, nodejs-vm является однопоточной**.
[в закладки] PDF-версия руководства по Node.js и новое руководство по JavaScript
2018-11-08 в 9:00, admin, рубрики: javascript, Node, node.js, Блог компании RUVDS.com, Разработка веб-сайтовНедавно мы опубликовали серию материалов, представляющую собой перевод руководства по Node.js. В первой публикации мы интересовались мнением аудитории о целесообразности перевода этого руководства и говорили, что планируется подготовить его PDF-версию.
PDF-версия документа состоит более чем из 120 страниц, содержит оглавление, немного картинок и всё необходимое форматирование. Просто закидывайте файлик в читалку и готово. Или в папочку с литературой. Или… решать вам.
Скачать PDF-версию [ 1.8 Мб ]
⬝ Часть 2: JavaScript, V8, некоторые приёмы разработки
⬝ Часть 3: Хостинг, REPL, работа с консолью, модули
⬝ Часть 4: npm, файлы package.json и package-lock.json
⬝ Часть 5: npm и npx
⬝ Часть 6: цикл событий, стек вызовов, таймеры
⬝ Часть 7: асинхронное программирование
⬝ Часть 8: протоколы HTTP и WebSocket
⬝ Часть 9: работа с файловой системой
⬝ Часть 10: стандартные модули, потоки, базы данных, NODE_ENV
Сегодня мы хотим представить вашему вниманию новое руководство того же автора, посвящённое JavaScript.
- Общая характеристика языка и его стандартизация
- Особенности стандартов ES6, ES7, ES8, ES9
- Оформление кода, руководства по стилю
- Лексическая структура языка
- Переменные
- Типы данных
- Выражения
- Логические выражения
- Прототипное наследование
- Классы
- Исключения
- Функции и замыкания
- Массивы
- Циклы
- События
- Асинхронное программирование
- Таймеры
- Строгий режим
- Математические вычисления
- Модули
Мы планируем это руководство перевести, но, прежде чем приняться за работу, хотели бы предложить вам поучаствовать в небольшом опросе
Читать полностью »
Оффлайн брокер на JavaScript
2018-11-06 в 19:57, admin, рубрики: javascript, node.js, nodejs, offline broker, queueВ своем проекте, мне понадобился функционал, который позволил бы не терять внесенные данные, в случае разрыва интернет соединения и я придумал очень простой «Брокер», который позволял не терять данные при потере соединения, а отправлять их когда соединение будет снова восстановлено. Возможно «Брокер» для него не очень хорошее название, но не судите строго. Хочется поделиться, может кому-то станет полезным.
Читать полностью »
Функции высшего порядка в JavaScript: что это такое?
2018-11-02 в 13:08, admin, рубрики: function, html, java, javascript, node.js, software development, web-разработка, Блог компании Plarium, новичкам, новичок java, обучение, Программирование, функции высшего порядкаПредставляем вам перевод статьи Sukhjinder Arora, опубликованной на ресурсе Bits and Pieces. Узнайте под катом о функциях высшего порядка в JavaScript и о некоторых других функциях, встроенных в этот язык.
Фото NESA by Makers с сайта Unsplash
Читать полностью »
Бэкенд для фронтенда, или Как в Яндекс.Маркете создают API без костылей
2018-11-01 в 7:29, admin, рубрики: api, BFF, graphql, node.js, rest, swagger, Блог компании Яндекс, документация, Проектирование и рефакторинг, Разработка веб-сайтовПочему некоторыми API удобнее пользоваться, чем другими? Что мы как фронтендеры можем сделать на своей стороне, чтобы работать с API приемлемого качества? Сегодня я расскажу читателям Хабра как о технических вариантах, так и об организационных мерах, которые помогут фронтендерам и бэкендерам найти общий язык и наладить эффективную работу.
Этой осенью Яндекс.Маркету исполняется 18 лет. Все это время развивается партнерский интерфейс Маркета. Если кратко, то это админка, с помощью которой магазины могут загружать каталоги, работать с ассортиментом, следить за статистикой, отвечать на отзывы и т.д. Специфика проекта такова, что приходится очень много взаимодействовать с различными бэкендами. При этом данные не всегда можно получить в одном месте, из одного конкретного бэкенда.
Медленный regexp, умирающий Node.js
2018-10-29 в 19:07, admin, рубрики: javascript, node.js, Разработка веб-сайтов
Наверное каждый слышал выражение, что если ты решаешь проблему с помощью регулярных выражение, то у тебя становится две проблемы.
Недавно и сам столкнулся с проблемой производительности регулярок на Node.js, и к чему это может привести.
В один прекрасный момент все инстансы сервиса на Node.js один за одним перестали отвечать на health-check, слать логи и метрики. Пришлось остановить эти контейнеры (мы запускаем Node.js в Docker) и запустить новые.
Как не нужно использовать Node.js Stream API
2018-10-26 в 17:46, admin, рубрики: javascript, node.js, nodejs, stream apiВ интернете опять кто-то не прав – во вчерашнем Node Weekly была ссылка на пост в котором автор пытается измерить и сравнить с "аналогами" производительность Stream API в Node.js. Грусть вызывает, то как автор работает со стримами и какие он выводы он пытается на основе этого сделать:
...this worked pretty well on smaller files, but once I got to the biggest file, the same error happened. Although Node.js was streaming the inputs and outputs, it still attempted to hold the whole file in memory while performing the operations
Давайте попробуем разобраться, что не так с выводами и кодом автора.
100 видео-лекций по программированию
2018-10-26 в 1:01, admin, рубрики: javascript, JS, node.js, nodejs, обучение программированию, Программирование, Разработка веб-сайтов
Товарищи инженеры, уже четвертый год пошел, как я взялся преподавать в Киевском политехническом институте. За это время у меня накопилось огромное количество примеров кода и материалов, примерно на 90 лекций. Должен сказать, что за весь период своей профессиональной деятельности (а это 24 года почти ежедневного написания кода), я никогда не подымал свой уровень программирования, как за последние годы, работая со студентами. Если раньше мне казалось, что написать кратко, сложно и внушительно — это верх мастерства, то теперь я осознал, что мой код должны понимать студенты после минимальных объяснений, иначе он никуда не годится. Я пришел к выводу, что способность эту можно и нужно распространить не только на обучающий код, но и на весь рабочий код. Более того, обучающий код не должен существенно отличаться от рабочего кода, потому, что мы учим будущих инженеров делать настоящие системы, а не учебные. А после многочисленных просьб, я решил записывать все лекции в виде скринкастов, которые сразу после завершения лекции отправляются на ютюб. За этот учебный год я планирую записать 100 лекций, из которых уже опубликованы 23, готовы материалы еще для 67 лекций и новых 10 лекций еще в процессе подготовки.