Skip to content

Commit 84e9517

Browse files
committed
Changed readme and comments for sanboxing and wrappers
1 parent 08f3952 commit 84e9517

File tree

7 files changed

+71
-13
lines changed

7 files changed

+71
-13
lines changed

interfaceWrapper/en/README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
## Description
22

3+
## Files
4+
35
* `framework.js` - small piece of the framework, just to demonstrate wrapper
46
* `application.js` - small piece of the application for wrapper demonstration
57

68
## How to execute
79

810
From the command line, type: `node application` then `node framework`, compare
911
output, read code in `framework.js` and `application.js`, try to understand
10-
how wrapper works for setTimeout
12+
how wrapper works for `setTimeout`
1113

1214
## Tasks
15+
16+
## Additional tasks

interfaceWrapper/en/application.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1-
// Print from the global context of application module
1+
// Print something
22
console.log('From application global context');
33

44
// Declare function for timer event
55
function timerEvent() {
66
console.log('From application timer event');
77
}
88

9-
// Set function to timer event for 1sec
9+
// Create timer
1010
setTimeout(timerEvent, 1000);
11+
12+
// Example for fs API
13+
var fileName = './README.md';
14+
console.log('Application going to read ' + fileName);
15+
fs.readFile(fileName, function(err, src) {
16+
console.log('File ' + fileName + ' size ' + src.length);
17+
});

interfaceWrapper/en/framework.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
1-
// Example: function wrapper in sandboxed context
1+
// Wrapping function and interface example
22

33
var fs = require('fs'),
44
vm = require('vm');
55

6-
// Declare dictionary to convert it into sandboxed context
6+
// Create a hash for application sandbox
77
var context = {
88
module: {},
99
console: console,
10-
// Declare wrapper function for setTimeout
10+
// Forward link to fs API into sandbox
11+
fs: fs,
12+
// Wrapper for setTimeout in sandbox
1113
setTimeout: function(callback, timeout) {
12-
// Add some behaviour for setTimeout
14+
// Logging all setTimeout calls
1315
console.log(
1416
'Call: setTimeout, ' +
1517
'callback function: ' + callback.name + ', ' +
1618
'timeout: ' + timeout
1719
);
1820
setTimeout(function() {
19-
// Add some behaviour on event
21+
// Logging timer events before application event
2022
console.log('Event: setTimeout, before callback');
21-
// Call of orignal user-defined callback, passed to wrapper
23+
// Calling user-defined timer event
2224
callback();
2325
console.log('Event: setTimeout, after callback');
2426
}, timeout);
2527
}
2628
};
2729

28-
// Convert collection into sandboxed context
30+
// Turn hash into context
2931
context.global = context;
3032
var sandbox = vm.createContext(context);
3133

interfaceWrapper/ru/README.md

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
## Описание
22

3+
Цель работы: научиться оборачивать интерфейсы и добиться такой универсальности
4+
обертки, чтобы не зависеть от того, какой именно интерфейс она оборачивает.
5+
В качестве примера обернута одна функция `setTimeout`, а в качестве задания мы
6+
обернем целый интерфейс работы с файловой системой - библиотеку `fs`.
7+
8+
## Файлы
9+
310
* `framework.js` - кусочек фреймворка, демонстрирующий обертку (wrapper)
411
* `application.js` - часть приложения для демонстрации обертки
512

613
## Запуск
714

815
Из командной строки пишем `node application`, а потом `node framework`,
916
сравниваем вывод, смотрим код `framework.js` и `application.js`, понимаем
10-
как работает обертка вокруг setTimeout
17+
как работает обертка вокруг `setTimeout`
1118

1219
## Задание
1320

@@ -66,13 +73,13 @@
6673
```
6774
5. Определяем, есть ли среди аргументов `callback`, он всегда последний в
6875
массиве аргументов и его тип `function`. Если `callback` есть, то вместо него
69-
передаем свою функцию, которая логирует все аргументы и вызывает настояций
76+
передаем свою функцию, которая логирует все аргументы и вызывает настоящий
7077
`callback`.
7178
6. Теперь можно из `application.js` использовать другие функции `fs` и
7279
убедиться, что все они обернуты.
7380
7. Добавляем таймеры в `application.js` и на таймерах работаем с файлами, а из
7481
`framework.js` собираем статистику работы с файлами и выводим ее каждые 30
75-
секунд. Например, можно соирать несколько из этих параметров
82+
секунд. Например, можно собирать несколько из этих параметров
7683
- количество обращений к функциям,
7784
- количество колбэков,
7885
- среднюю скорость завершения функций,
@@ -85,3 +92,26 @@
8592
Сохраните наработки этой лабораторной работы, они понадобятся для выполнения
8693
следующих работ, в частности, работы по передаче вызовов в другой процесс и
8794
другой сервер. Это позволит распределить исполнение приложения.
95+
96+
## Дополнительные задания
97+
98+
8. Попробуйте подставить в качестве файловой системы свою структуру из памяти,
99+
и прочитать из нее при помощи `fs.readFile`, потом записать файл, создать и
100+
удалить. Пример структуры:
101+
102+
```JavaScript
103+
var virtualFs = {
104+
folder: {
105+
subfolder: {
106+
file1: 'File content',
107+
file2: 'Another file content'
108+
},
109+
},
110+
notes: {
111+
myToDos: 'Refactor projects, Prepare tests',
112+
meetings: 'Meet thoughts at 10:00 walking along garden'
113+
}
114+
};
115+
```
116+
9. Реализуйте кеширование файловых операций в памяти.
117+
10. Напишите аналогичный пример на другом языке программирования.

interfaceWrapper/ru/framework.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var fs = require('fs'),
77
var context = {
88
module: {},
99
console: console,
10+
// Помещаем ссылку на fs API в песочницу
1011
fs: fs,
1112
// Оборачиваем функцию setTimeout в песочнице
1213
setTimeout: function(callback, timeout) {

sandboxedModule/en/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
## Description
22

3+
Putpose: learn how to create sandboxed context for modues to separate them and
4+
minimize cross-modules code coupling, extracting at least two abstraction layers
5+
(applied and system) and how to execute applied code in virtual environment,
6+
changing its behavior using IoC from system layer.
7+
8+
## Files
9+
310
* `framework.js` - small piece of the framework, just to demonstrate IoC
411
* `application.js` - small piece of the application, also for IoC demonstration
512

sandboxedModule/ru/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
## Описание
22

3+
Цель: научиться создавать защищенные (экранированные) друг от друга контексты
4+
для библиотек, разделять код на два слоя абстракци (прикладной и системный) и
5+
запускать прикладной код в искуственной среде, меняя его поведение по принципу
6+
IoC из системного кода.
7+
8+
## Файлы
9+
310
* `framework.js` - небольшая часть фреймворка, необходимая для демонстрации IoC
411
* `application.js` - часть приложения для демонстрации IoC
512

0 commit comments

Comments
 (0)