SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Frontend Meetup
with ❤ by
REPL в Node.js: улучшаем быт разработчика
Ваня Пухтин
vk.com/it_61
2
Что такое REPL
REPL — это штука, которая позволяет запускать код
покомандно и мгновенно видеть результат его выполнения.
Инструменты разработчика в браузерах:
●
Chrome DevTools
●
Firefox DevTools
●
FireBug
Командные строки многих ЯП:
●
Python
●
PHP (php -a)
●
Node.js
●
Clojure (lein repl)
●
Ruby (irb)
…и десятки других.
3
Chrome Developer Tools Console
4
читаем:
Read
выводим:
Print
prompt
Read
Eval
Print
Loop
выполняем:
Eval
…и всё это повторяем:
Loop
Chrome Developer Tools Console // explained
5
Вот что делает REPL:
while (noExit())
{
print(eval(read()))
}
Если у языка нет REPL, то его, как правило,
можно реализовать самостоятельно.
(и это довольно просто)
6
Почему это так важно?
s/Perl/любой язык
xkcd #519
7
Почему это так важно?
В изучении чего-либо очень важна быстрая обратная связь.
Bret Victor — Inventing on Principle
(https://vimeo.com/36579366)
(есть субтитры http://geektimes.ru/post/183394/).
Код ↔ Результат
REPL предоставляет мгновенную обратную связь.
Очень удобен в изучении языка,
в экспериментах с библиотеками,
для всяких вычислений
…ну и просто по фану.
8
REPL в Node.js
Можно:
1. работать с выражениями
2. подгружать модули (require())
3. видеть все global-ы (нодовские: process, JS-ные: setTimeout, eval, Math, …)
4. неплохо форматировать вывод
5. делать автокомплит!
6. korovans.rob()
$ node
?
9
Как что-то изучать:
неинтерактивный режим интерактивный режим (REPL)
$ node test.js
нужно что-то поправить…
$ node test.js
а вот ещё…
$ node test.js
…
$ node
>
скучный бойлерплейт …
начинаем эксперименты…
>
…
10
interactive mode?
$ python -i -c 'x = 1337'
выполняем код
и входим в интерактивный режим
>>> x
1337
…
-i When a script is passed as first argument
or the -c option is used, enter interactive mode
after executing the script or the command.
Это то что нужно!
11
В ноде должно быть что-то подобное!…
А вот и нет.
https://github.com/nodejs/node-v0.x-archive/issues/3985
12
В ноде должно быть что-то подобное…?
issue, конечно, закрыли :)
но дали пару ценных советов
require('repl').start({})
Стандартный нодовский REPL это по сути:
Эту штуку можно неплохо прокачать и добавить
в неё всё, что захочется.
13
Node.js, стандартный модуль REPL
Что можно кастомизировать:
1. prompt
2. потоки input/output (нодовские Stream)
3. evaler (eval)
4. writer (print)
5. будет ли repl крутиться в global-е
https://nodejs.org/api/repl.html
Из коробки есть все фичи, как и при запуске node без параметров.
В документации есть интересный пример как можно
(благодаря потокам ;)) слушать Unix-сокет и подключаться
к repl работающей ноды.
(в Эрланг такое есть для любого сервиса: $ ./erlang_app attach)
14
repl.js: Попробуем сделать REPL поприятней
Попытка запилить флаг --interactive на произвольном коде
поначалу не удалась (тогда я ещё не знал про vm).
План Б: попытаться решить частный случай этой задачи,
научиться подгружать модули и затем входить в repl.
Парето доволен, 20% усилий дало 80% результата.
$ repl.js path lodash Promise=bluebird ./file.js file=./other_file.js
15
Пару слов про автокомлит
Автокомплит — дело непростое.
> var object = { … }
> object. <Tab> // можно
> object.pr <Tab> // можно
> object.doStuff(). <Tab> // нельзя
> object.prop. <Tab> // «как бы» можно
Object.keys(target),
Object.getOwnPropertyNames(target)
16
Пару слов про автокомлит
Автокомплит — дело непростое.
> var object = { … }
> object.prop. <Tab> // «как бы» можно
// но лучше не надо
Object.defineProperty(object, 'prop', {
get: function () {
console.log('side effects!')
return this._prop
}
})
17
Работаем с промисами
Если выводить промисы в «сыром» виде, то получается белиберда.
Вместо этого нужно дождаться, когда промис разрезолвится
и показать его внутреннее значение.
18
Улучшаем вывод
Для функций можно
показывать их сигнатуры,
вместо [Function].
Можно выводить код
фукции целиком (src).
19
Node.js, стандартный модуль vm
https://nodejs.org/api/vm.html
Позволяет запускать код в контролируемом окружении.
var sandbox = vm.createContext(target) // target global в песочнице→
vm.runInContext(code, sandbox) // code — строка с кодом на JS
Можно использовать для пользовательского скриптинга,
когда источник кода ненадёжен. Позволяет контролировать
контекст выполнения кода, чего не может старый-добрый eval().
20
Резюмируя
REPL— это круто и полезно.
Модуль repl можно использовать для создания
интерактивных оболочек своих сервисов.
Модуль vm позволяет запускать код в песочнице
с контролируемым контекстом.
repl.js это совместимый с repl модуль, который позволяет:
1. подгружать модули на старте
2. дожидаться ответа от промисов
3. красиво форматировать
4. показывать сигнатуры и сорцы функций
5. … и всё то же, что и стандартный repl
21
Ссылки
●
github.com/StreetStrider/repl.js
●
repl.it — коллекция REPLов
●
tonicdev.com — Node.js REPL с графиками
●
vimeo.com/36579366 — Inventing on Principle
●
github.com/StreetStrider/console-ultimate
●
fredkschott.com/post/2014/06/require-and-the-module-system
●
nodejs.org/api/repl.html — node repl
●
nodejs.org/api/vm.html — node vm
●
nodejs.org/api/modules.html — node Modules
Где мне можно написать:
●
vk.com/StreetStrider
Где можно меня почитать:
●
github.com/StreetStrider
●
habrahabr.ru/users/streetstrider/topics/
Что ещё я веду:
●
vk.com/it.depot
Frontend Meetup
22
That's all, folks!
Frontend Meetup

Contenu connexe

Tendances

Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст примененияNikita Baksalyar
 
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Moscow.pm
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Minsk Linux User Group
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"QA Dnepropetrovsk Community (Ukraine)
 
"Внутренности" CPython, часть II
"Внутренности" CPython, часть II"Внутренности" CPython, часть II
"Внутренности" CPython, часть IIPython Meetup
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonMaxim Kulsha
 
Разница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментомРазница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментомTatyanazaxarova
 
Увеличиваем мощь фреймворка Kdt & code`s generator
Увеличиваем мощь фреймворка   Kdt & code`s generatorУвеличиваем мощь фреймворка   Kdt & code`s generator
Увеличиваем мощь фреймворка Kdt & code`s generatorSQALab
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven7bits
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoAzamat Tokhtaev
 

Tendances (20)

Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст применения
 
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
 
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
 
Пакет future
Пакет futureПакет future
Пакет future
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
 
Base php 1
Base php 1Base php 1
Base php 1
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
 
"Внутренности" CPython, часть II
"Внутренности" CPython, часть II"Внутренности" CPython, часть II
"Внутренности" CPython, часть II
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Perl in da shell
Perl in da shellPerl in da shell
Perl in da shell
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" Python
 
Разница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментомРазница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментом
 
Увеличиваем мощь фреймворка Kdt & code`s generator
Увеличиваем мощь фреймворка   Kdt & code`s generatorУвеличиваем мощь фреймворка   Kdt & code`s generator
Увеличиваем мощь фреймворка Kdt & code`s generator
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + Django
 
Html лаб 2
Html лаб 2Html лаб 2
Html лаб 2
 

En vedette

Clase Modelo Blended Learning
Clase Modelo Blended LearningClase Modelo Blended Learning
Clase Modelo Blended LearningLili21on
 
Conocimiento del derecho
Conocimiento del derechoConocimiento del derecho
Conocimiento del derechoDEYSITATIANAIB
 
Small Small Catch Monkey:The Success Story of Laurelwood
 Small Small Catch Monkey:The Success Story of Laurelwood Small Small Catch Monkey:The Success Story of Laurelwood
Small Small Catch Monkey:The Success Story of Laurelwoodvakunta
 
My last vacation
My last vacationMy last vacation
My last vacationYasmid Mora
 
Fitri artikel unpam_pertemuan3
Fitri artikel unpam_pertemuan3Fitri artikel unpam_pertemuan3
Fitri artikel unpam_pertemuan3Ayu2602
 
Trabajos segunda parcial de deontologia
Trabajos segunda parcial de deontologiaTrabajos segunda parcial de deontologia
Trabajos segunda parcial de deontologiaDEYSITATIANAIB
 
Reading the Camfranglais Novel: Some Pedagogical Models
  Reading the Camfranglais Novel: Some Pedagogical Models  Reading the Camfranglais Novel: Some Pedagogical Models
Reading the Camfranglais Novel: Some Pedagogical Modelsvakunta
 
Question 6
 Question 6 Question 6
Question 6bengxbbs
 
Data Warehousing Solution
Data Warehousing SolutionData Warehousing Solution
Data Warehousing SolutionTushan Jain
 
Параллельное управление, Елена Сибилева (Жмек дизайн)
Параллельное управление, Елена Сибилева (Жмек дизайн)Параллельное управление, Елена Сибилева (Жмек дизайн)
Параллельное управление, Елена Сибилева (Жмек дизайн)IT61
 
Nd teknologi forum2016-sosi – gml – json
Nd teknologi forum2016-sosi – gml – jsonNd teknologi forum2016-sosi – gml – json
Nd teknologi forum2016-sosi – gml – jsonJan Kristian Jensen
 
Linked inslideshare
Linked inslideshareLinked inslideshare
Linked inslidesharecvargaszara
 
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and Play
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and PlaySaltex 2016, Fields in Trust: Guidance for Outdoor Sport and Play
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and PlayFields in Trust
 
геометрична прогресія
геометрична прогресіягеометрична прогресія
геометрична прогресіяkristina_chepil
 

En vedette (20)

DOCENTE
DOCENTEDOCENTE
DOCENTE
 
Clase Modelo Blended Learning
Clase Modelo Blended LearningClase Modelo Blended Learning
Clase Modelo Blended Learning
 
Conocimiento del derecho
Conocimiento del derechoConocimiento del derecho
Conocimiento del derecho
 
Small Small Catch Monkey:The Success Story of Laurelwood
 Small Small Catch Monkey:The Success Story of Laurelwood Small Small Catch Monkey:The Success Story of Laurelwood
Small Small Catch Monkey:The Success Story of Laurelwood
 
Cath mobile
Cath mobileCath mobile
Cath mobile
 
My last vacation
My last vacationMy last vacation
My last vacation
 
Fitri artikel unpam_pertemuan3
Fitri artikel unpam_pertemuan3Fitri artikel unpam_pertemuan3
Fitri artikel unpam_pertemuan3
 
Trabajos segunda parcial de deontologia
Trabajos segunda parcial de deontologiaTrabajos segunda parcial de deontologia
Trabajos segunda parcial de deontologia
 
програми службового рівня
програми службового рівняпрограми службового рівня
програми службового рівня
 
Reading the Camfranglais Novel: Some Pedagogical Models
  Reading the Camfranglais Novel: Some Pedagogical Models  Reading the Camfranglais Novel: Some Pedagogical Models
Reading the Camfranglais Novel: Some Pedagogical Models
 
Question 6
 Question 6 Question 6
Question 6
 
Data Warehousing Solution
Data Warehousing SolutionData Warehousing Solution
Data Warehousing Solution
 
Master Thesis brief
Master Thesis briefMaster Thesis brief
Master Thesis brief
 
Параллельное управление, Елена Сибилева (Жмек дизайн)
Параллельное управление, Елена Сибилева (Жмек дизайн)Параллельное управление, Елена Сибилева (Жмек дизайн)
Параллельное управление, Елена Сибилева (Жмек дизайн)
 
Nd teknologi forum2016-sosi – gml – json
Nd teknologi forum2016-sosi – gml – jsonNd teknologi forum2016-sosi – gml – json
Nd teknologi forum2016-sosi – gml – json
 
Linked inslideshare
Linked inslideshareLinked inslideshare
Linked inslideshare
 
Resume
ResumeResume
Resume
 
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and Play
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and PlaySaltex 2016, Fields in Trust: Guidance for Outdoor Sport and Play
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and Play
 
геометрична прогресія
геометрична прогресіягеометрична прогресія
геометрична прогресія
 
презентація
презентаціяпрезентація
презентація
 

Similaire à REPL в Node.js: улучшаем быт разработчик

C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangYury Yurevich
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoLev Walkin
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model LibraryAndrey Gordienkov
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Alexandr Nox
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin
 
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerAndrey Markelov
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 

Similaire à REPL в Node.js: улучшаем быт разработчик (20)

C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про Erlang
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at Echo
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
PostSharp - Threading Model
PostSharp - Threading ModelPostSharp - Threading Model
PostSharp - Threading Model
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model Library
 
DLR Hosting
DLR HostingDLR Hosting
DLR Hosting
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Component Inspector
Component InspectorComponent Inspector
Component Inspector
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
 
Invisible
InvisibleInvisible
Invisible
 
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и Docker
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 

Plus de IT61

Александр Шорин - Как перестать гоняться за кандидатом и начать жить?
Александр Шорин - Как перестать гоняться за кандидатом и начать жить?Александр Шорин - Как перестать гоняться за кандидатом и начать жить?
Александр Шорин - Как перестать гоняться за кандидатом и начать жить?IT61
 
Нина Марменкова - Найти себя и нАЙТИ своих
Нина Марменкова - Найти себя и нАЙТИ своихНина Марменкова - Найти себя и нАЙТИ своих
Нина Марменкова - Найти себя и нАЙТИ своихIT61
 
Павел Седаков - Performance review: теория и практика оценки эффективности ра...
Павел Седаков - Performance review: теория и практика оценки эффективности ра...Павел Седаков - Performance review: теория и практика оценки эффективности ра...
Павел Седаков - Performance review: теория и практика оценки эффективности ра...IT61
 
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджера
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджераДмитрий Костюк - Необходимые инструменты и качества для роста менеджера
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджераIT61
 
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...IT61
 
Ольга Стратанович - Менеджер будущего
Ольга Стратанович - Менеджер будущегоОльга Стратанович - Менеджер будущего
Ольга Стратанович - Менеджер будущегоIT61
 
Константин Гуфан - Сколько лет живет любовь к работе?
Константин Гуфан - Сколько лет живет любовь к работе?Константин Гуфан - Сколько лет живет любовь к работе?
Константин Гуфан - Сколько лет живет любовь к работе?IT61
 
Организация тестирования в Inostudio
Организация тестирования в InostudioОрганизация тестирования в Inostudio
Организация тестирования в InostudioIT61
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?IT61
 
Calabash. Автоматизированное тестирование мобильных приложений
Calabash. Автоматизированное тестирование мобильных приложенийCalabash. Автоматизированное тестирование мобильных приложений
Calabash. Автоматизированное тестирование мобильных приложенийIT61
 
Особенности тестирования мобильных приложений
Особенности тестирования мобильных приложенийОсобенности тестирования мобильных приложений
Особенности тестирования мобильных приложенийIT61
 
Machine learning на примере алгоритма ценообразования, Овсеп Авакян
Machine learning на примере алгоритма ценообразования, Овсеп АвакянMachine learning на примере алгоритма ценообразования, Овсеп Авакян
Machine learning на примере алгоритма ценообразования, Овсеп АвакянIT61
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинIT61
 
Изоморфизм как предметное поле data science, Артем Москалец
Изоморфизм как предметное поле data science, Артем МоскалецИзоморфизм как предметное поле data science, Артем Москалец
Изоморфизм как предметное поле data science, Артем МоскалецIT61
 
Data scientology starter pack, Сергей Казаков
Data scientology starter pack, Сергей КазаковData scientology starter pack, Сергей Казаков
Data scientology starter pack, Сергей КазаковIT61
 
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...IT61
 
Тренды в процессах разработки, Константин Иванов (TradingView)
Тренды в процессах разработки, Константин Иванов (TradingView)Тренды в процессах разработки, Константин Иванов (TradingView)
Тренды в процессах разработки, Константин Иванов (TradingView)IT61
 
Амина Прима - Ой, все! Я ухожу
Амина Прима - Ой, все! Я ухожуАмина Прима - Ой, все! Я ухожу
Амина Прима - Ой, все! Я ухожуIT61
 
Как перестать беспокоиться и начать тестировать или это волшебное слово Agile
Как перестать беспокоиться и начать тестировать или это волшебное слово AgileКак перестать беспокоиться и начать тестировать или это волшебное слово Agile
Как перестать беспокоиться и начать тестировать или это волшебное слово AgileIT61
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
 

Plus de IT61 (20)

Александр Шорин - Как перестать гоняться за кандидатом и начать жить?
Александр Шорин - Как перестать гоняться за кандидатом и начать жить?Александр Шорин - Как перестать гоняться за кандидатом и начать жить?
Александр Шорин - Как перестать гоняться за кандидатом и начать жить?
 
Нина Марменкова - Найти себя и нАЙТИ своих
Нина Марменкова - Найти себя и нАЙТИ своихНина Марменкова - Найти себя и нАЙТИ своих
Нина Марменкова - Найти себя и нАЙТИ своих
 
Павел Седаков - Performance review: теория и практика оценки эффективности ра...
Павел Седаков - Performance review: теория и практика оценки эффективности ра...Павел Седаков - Performance review: теория и практика оценки эффективности ра...
Павел Седаков - Performance review: теория и практика оценки эффективности ра...
 
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджера
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджераДмитрий Костюк - Необходимые инструменты и качества для роста менеджера
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджера
 
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...
 
Ольга Стратанович - Менеджер будущего
Ольга Стратанович - Менеджер будущегоОльга Стратанович - Менеджер будущего
Ольга Стратанович - Менеджер будущего
 
Константин Гуфан - Сколько лет живет любовь к работе?
Константин Гуфан - Сколько лет живет любовь к работе?Константин Гуфан - Сколько лет живет любовь к работе?
Константин Гуфан - Сколько лет живет любовь к работе?
 
Организация тестирования в Inostudio
Организация тестирования в InostudioОрганизация тестирования в Inostudio
Организация тестирования в Inostudio
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?
 
Calabash. Автоматизированное тестирование мобильных приложений
Calabash. Автоматизированное тестирование мобильных приложенийCalabash. Автоматизированное тестирование мобильных приложений
Calabash. Автоматизированное тестирование мобильных приложений
 
Особенности тестирования мобильных приложений
Особенности тестирования мобильных приложенийОсобенности тестирования мобильных приложений
Особенности тестирования мобильных приложений
 
Machine learning на примере алгоритма ценообразования, Овсеп Авакян
Machine learning на примере алгоритма ценообразования, Овсеп АвакянMachine learning на примере алгоритма ценообразования, Овсеп Авакян
Machine learning на примере алгоритма ценообразования, Овсеп Авакян
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 
Изоморфизм как предметное поле data science, Артем Москалец
Изоморфизм как предметное поле data science, Артем МоскалецИзоморфизм как предметное поле data science, Артем Москалец
Изоморфизм как предметное поле data science, Артем Москалец
 
Data scientology starter pack, Сергей Казаков
Data scientology starter pack, Сергей КазаковData scientology starter pack, Сергей Казаков
Data scientology starter pack, Сергей Казаков
 
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...
 
Тренды в процессах разработки, Константин Иванов (TradingView)
Тренды в процессах разработки, Константин Иванов (TradingView)Тренды в процессах разработки, Константин Иванов (TradingView)
Тренды в процессах разработки, Константин Иванов (TradingView)
 
Амина Прима - Ой, все! Я ухожу
Амина Прима - Ой, все! Я ухожуАмина Прима - Ой, все! Я ухожу
Амина Прима - Ой, все! Я ухожу
 
Как перестать беспокоиться и начать тестировать или это волшебное слово Agile
Как перестать беспокоиться и начать тестировать или это волшебное слово AgileКак перестать беспокоиться и начать тестировать или это волшебное слово Agile
Как перестать беспокоиться и начать тестировать или это волшебное слово Agile
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 

REPL в Node.js: улучшаем быт разработчик

  • 1. Frontend Meetup with ❤ by REPL в Node.js: улучшаем быт разработчика Ваня Пухтин vk.com/it_61
  • 2. 2 Что такое REPL REPL — это штука, которая позволяет запускать код покомандно и мгновенно видеть результат его выполнения. Инструменты разработчика в браузерах: ● Chrome DevTools ● Firefox DevTools ● FireBug Командные строки многих ЯП: ● Python ● PHP (php -a) ● Node.js ● Clojure (lein repl) ● Ruby (irb) …и десятки других.
  • 5. 5 Вот что делает REPL: while (noExit()) { print(eval(read())) } Если у языка нет REPL, то его, как правило, можно реализовать самостоятельно. (и это довольно просто)
  • 6. 6 Почему это так важно? s/Perl/любой язык xkcd #519
  • 7. 7 Почему это так важно? В изучении чего-либо очень важна быстрая обратная связь. Bret Victor — Inventing on Principle (https://vimeo.com/36579366) (есть субтитры http://geektimes.ru/post/183394/). Код ↔ Результат REPL предоставляет мгновенную обратную связь. Очень удобен в изучении языка, в экспериментах с библиотеками, для всяких вычислений …ну и просто по фану.
  • 8. 8 REPL в Node.js Можно: 1. работать с выражениями 2. подгружать модули (require()) 3. видеть все global-ы (нодовские: process, JS-ные: setTimeout, eval, Math, …) 4. неплохо форматировать вывод 5. делать автокомплит! 6. korovans.rob() $ node
  • 9. ? 9 Как что-то изучать: неинтерактивный режим интерактивный режим (REPL) $ node test.js нужно что-то поправить… $ node test.js а вот ещё… $ node test.js … $ node > скучный бойлерплейт … начинаем эксперименты… > …
  • 10. 10 interactive mode? $ python -i -c 'x = 1337' выполняем код и входим в интерактивный режим >>> x 1337 … -i When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command. Это то что нужно!
  • 11. 11 В ноде должно быть что-то подобное!… А вот и нет. https://github.com/nodejs/node-v0.x-archive/issues/3985
  • 12. 12 В ноде должно быть что-то подобное…? issue, конечно, закрыли :) но дали пару ценных советов require('repl').start({}) Стандартный нодовский REPL это по сути: Эту штуку можно неплохо прокачать и добавить в неё всё, что захочется.
  • 13. 13 Node.js, стандартный модуль REPL Что можно кастомизировать: 1. prompt 2. потоки input/output (нодовские Stream) 3. evaler (eval) 4. writer (print) 5. будет ли repl крутиться в global-е https://nodejs.org/api/repl.html Из коробки есть все фичи, как и при запуске node без параметров. В документации есть интересный пример как можно (благодаря потокам ;)) слушать Unix-сокет и подключаться к repl работающей ноды. (в Эрланг такое есть для любого сервиса: $ ./erlang_app attach)
  • 14. 14 repl.js: Попробуем сделать REPL поприятней Попытка запилить флаг --interactive на произвольном коде поначалу не удалась (тогда я ещё не знал про vm). План Б: попытаться решить частный случай этой задачи, научиться подгружать модули и затем входить в repl. Парето доволен, 20% усилий дало 80% результата. $ repl.js path lodash Promise=bluebird ./file.js file=./other_file.js
  • 15. 15 Пару слов про автокомлит Автокомплит — дело непростое. > var object = { … } > object. <Tab> // можно > object.pr <Tab> // можно > object.doStuff(). <Tab> // нельзя > object.prop. <Tab> // «как бы» можно Object.keys(target), Object.getOwnPropertyNames(target)
  • 16. 16 Пару слов про автокомлит Автокомплит — дело непростое. > var object = { … } > object.prop. <Tab> // «как бы» можно // но лучше не надо Object.defineProperty(object, 'prop', { get: function () { console.log('side effects!') return this._prop } })
  • 17. 17 Работаем с промисами Если выводить промисы в «сыром» виде, то получается белиберда. Вместо этого нужно дождаться, когда промис разрезолвится и показать его внутреннее значение.
  • 18. 18 Улучшаем вывод Для функций можно показывать их сигнатуры, вместо [Function]. Можно выводить код фукции целиком (src).
  • 19. 19 Node.js, стандартный модуль vm https://nodejs.org/api/vm.html Позволяет запускать код в контролируемом окружении. var sandbox = vm.createContext(target) // target global в песочнице→ vm.runInContext(code, sandbox) // code — строка с кодом на JS Можно использовать для пользовательского скриптинга, когда источник кода ненадёжен. Позволяет контролировать контекст выполнения кода, чего не может старый-добрый eval().
  • 20. 20 Резюмируя REPL— это круто и полезно. Модуль repl можно использовать для создания интерактивных оболочек своих сервисов. Модуль vm позволяет запускать код в песочнице с контролируемым контекстом. repl.js это совместимый с repl модуль, который позволяет: 1. подгружать модули на старте 2. дожидаться ответа от промисов 3. красиво форматировать 4. показывать сигнатуры и сорцы функций 5. … и всё то же, что и стандартный repl
  • 21. 21 Ссылки ● github.com/StreetStrider/repl.js ● repl.it — коллекция REPLов ● tonicdev.com — Node.js REPL с графиками ● vimeo.com/36579366 — Inventing on Principle ● github.com/StreetStrider/console-ultimate ● fredkschott.com/post/2014/06/require-and-the-module-system ● nodejs.org/api/repl.html — node repl ● nodejs.org/api/vm.html — node vm ● nodejs.org/api/modules.html — node Modules
  • 22. Где мне можно написать: ● vk.com/StreetStrider Где можно меня почитать: ● github.com/StreetStrider ● habrahabr.ru/users/streetstrider/topics/ Что ещё я веду: ● vk.com/it.depot Frontend Meetup 22