Skip to content

Commit 016e7e5

Browse files
committed
Tasks edited and translated into English
1 parent bd5a89b commit 016e7e5

File tree

4 files changed

+89
-37
lines changed

4 files changed

+89
-37
lines changed

sandboxedModule/en/README.md

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,60 @@
1-
## Описание
1+
## Description
22

3-
framework.js - небольшая часть фреймворка, необходимая для демонстрации IoC
4-
application.js - часть приложения для демонстрации IoC
3+
`framework.js` - small piece of the framework, just to demonstrate IoC
4+
`application.js` - small piece of the application, also for IoC demonstration
55

6-
## Запуск
6+
## How to execute
77

8-
Из командной строки можно набрать `node ./framework.js` или `node framework`
8+
From the command line, type: `node ./framework.js` or `node framework`
99

10-
## Задания
10+
## Tasks
1111

12-
1. Пробросить в контекст приложения setTimeout и setInterval и использовать их,
13-
выводя console.log() с таймера
12+
You may select at least one of the following tasks, make a fork of this
13+
repository and implement your solution there. If those tasks are simple
14+
for somebody, please see additional tasks below.
1415

15-
2. Пробросить в контекст приложения библиотеку util и сделать вызовы нескольких
16-
ее функций из приложения
16+
1. Add `setTimeout` and `setInterval` to the application context and use them
17+
printing something from the timer function using console.log()
1718

18-
3. Сделать возможность запускать фреймворк с разными приложениями, через
19-
параметр командной строки: `node framework <applicationName>`
19+
2. Inject a link to `util` library into the application context and make a few
20+
calls to its functions from applied code
2021

21-
4. Обернуть вызов console.log() в песочнице приложения, чтобы добавить в вывод
22-
дополнительные данные: `<applicationName> <time> <message>`
22+
3. Implement the ability to run different applications inside framework, using
23+
command line option, e.g.: `node framework <applicationName>`
2324

24-
5. Обернуть вызов console.log() в песочнице приложения, для дублирования записи
25-
в файл в формате: `<applicationName> <time> <message>`
25+
4. Wrap or intercept `console.log()` call to add more info into console output
26+
in the following format: `<applicationName> <time> <message>`
2627

27-
6. Пробросить в приложение `require` и обернуть в песочнице для логирования,
28-
вызывать и логировать вызовы в файл в формате: `<time> <module name>`
28+
5. Wrap or intercept `console.log()` in the sandboxed application logging all
29+
console output into a file in the format: `<applicationName> <time> <message>`
2930

30-
7. Экспортировать из приложения хеш с несколькими функциями и переменными и
31-
распечатать их список из фреймворка с указанием типов
31+
6. Give a link to `require` function to the application, add call to it and
32+
wrap it for logging to a file in the format: `<time> <module name>`
3233

33-
8. Экспортировать из приложения функцию и распечатать список ее параметров
34-
из фреймворка (начать с вывода тела функции)
34+
7. Export a hash from `application.js` with multiple functions and variables,
35+
print the list with types from framework
3536

36-
9. Распечатать из приложения список всего, что находится в его глобальном
37-
контексте (т.е. в песочнице приложения) с указанием типов данных
37+
8. Export a function from `application.js` and print a list of its parameters
38+
form the framework (you can start printing function source)
39+
40+
9. Print a list of everything from the application global context (application
41+
sandbox) with the data types specified
42+
43+
10. Compare an application sandboxed context keys before application loaded and
44+
after, print it from the framework and find a difference (keys added / deleted)
45+
46+
## Additional tasks
47+
48+
11. You can combine several tasks (listed above) in your code, implement a more
49+
complex example of interaction between framework and application, preparing
50+
run-time environment (sandbox) and/or improving CLI (command line interface)
51+
52+
12. Implement a similar example in another programming language
53+
54+
13. Improve and/or optimize Impress Application Server code, specifically
55+
everything related to sandboxing, see:
56+
[/lib/impress.application.js](https://github.com/tshemsedinov/impress/blob/master/lib/impress.application.js)
57+
58+
14. Use IoC and code isolation principles using sandboxed context and/or other
59+
similar technique in your projects (any technological stack) to demonstrate its
60+
use and the effect of such use

sandboxedModule/en/application.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1+
// File contains a small piece of the source to demonstrate main module
2+
// of a sample application to be executed in the sandboxed context by
3+
// another pice of code from `framework.js`. Read README.md for tasks.
4+
5+
// Print from the global context of application module
16
console.log('From application global context');
27

38
module.exports = function() {
9+
// Print from the exported function context
410
console.log('From application exported function');
511
};

sandboxedModule/ru/README.md

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,32 @@
11
## Описание
22

3-
framework.js - небольшая часть фреймворка, необходимая для демонстрации IoC
4-
application.js - часть приложения для демонстрации IoC
3+
`framework.js` - небольшая часть фреймворка, необходимая для демонстрации IoC
4+
`application.js` - часть приложения для демонстрации IoC
55

66
## Запуск
77

88
Из командной строки можно набрать `node ./framework.js` или `node framework`
99

1010
## Задания
1111

12-
1. Пробросить в контекст приложения setTimeout и setInterval и использовать их,
13-
выводя console.log() с таймера
12+
Вы можете выбрать минимум одно задание из предложенных, сделать себе форк этого
13+
репозитория и написать код в своей ветке. Если кого-то задания окажутся
14+
простыми, то переходите к дополнительным.
1415

15-
2. Пробросить в контекст приложения библиотеку util и сделать вызовы нескольких
16-
ее функций из приложения
16+
1. Пробросить в контекст приложения `setTimeout` и `setInterval` и использовать
17+
их, выводя `console.log()` с таймера
18+
19+
2. Пробросить в контекст приложения библиотеку `util` и сделать вызовы
20+
нескольких ее функций из приложения
1721

1822
3. Сделать возможность запускать фреймворк с разными приложениями, через
1923
параметр командной строки: `node framework <applicationName>`
2024

21-
4. Обернуть вызов console.log() в песочнице приложения, чтобы добавить в вывод
22-
дополнительные данные: `<applicationName> <time> <message>`
25+
4. Обернуть вызов `console.log()` в песочнице приложения, чтобы добавить в
26+
вывод дополнительные данные: `<applicationName> <time> <message>`
2327

24-
5. Обернуть вызов console.log() в песочнице приложения, для дублирования записи
25-
в файл в формате: `<applicationName> <time> <message>`
28+
5. Обернуть вызов `console.log()` в песочнице приложения, для дублирования
29+
записи в файл в формате: `<applicationName> <time> <message>`
2630

2731
6. Пробросить в приложение `require` и обернуть в песочнице для логирования,
2832
вызывать и логировать вызовы в файл в формате: `<time> <module name>`
@@ -31,7 +35,26 @@ application.js - часть приложения для демонстрации
3135
распечатать их список из фреймворка с указанием типов
3236

3337
8. Экспортировать из приложения функцию и распечатать список ее параметров
34-
из фреймворка (начать с вывода тела функции)
38+
из фреймворка (можно начать с вывода тела функции)
3539

3640
9. Распечатать из приложения список всего, что находится в его глобальном
3741
контексте (т.е. в песочнице приложения) с указанием типов данных
42+
43+
10. Сравнить ключи в контексте песочницы до загрузки приложения из фреймворка
44+
и после этого, вывести разницу (какие ключи добавились, а какие удалены).
45+
46+
## Дополнительные задания
47+
48+
11. В своем коде вы можете скомбинировать несколько заданий из основного
49+
списка на свое усмотрение, сделав более сложный пример взаимодействия
50+
фреймворка с приложением, формировани среды исполнения (песочницы) или
51+
запуска из командной строки
52+
53+
12. Написать аналогичный пример на другом языке программирования
54+
55+
13. Изучить, улучшить и/или оптимизировать код по работе с песочницами в
56+
Impress Application Server, см.: [/lib/impress.application.js](https://github.com/tshemsedinov/impress/blob/master/lib/impress.application.js)
57+
58+
14. Использовать принципы IoC и изоляции кода через контексты, песочницы
59+
и/или другие аналогичные механизны в своем проекте (на любом стеке технологий)
60+
и продемонстрировать его работу и эффект использования IoC

sandboxedModule/ru/framework.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
var fs = require('fs'),
88
vm = require('vm');
99

10-
// создаем контекст-песочницу, которая станет глобальным контекстом приложения
10+
// Чоздаем контекст-песочницу, которая станет глобальным контекстом приложения
1111
var context = { module: {}, console: console };
1212
context.global = context;
1313
var sandbox = vm.createContext(context);
1414

15-
// читаем исходный код приложения из файла
15+
// Читаем исходный код приложения из файла
1616
var fileName = './application.js';
1717
fs.readFile(fileName, function(err, src) {
1818
// Тут нужно обработать ошибки

0 commit comments

Comments
 (0)