SlideShare une entreprise Scribd logo
1  sur  38
Дмитрий Миндра, Lohika

      WEB В РЕАЛЬНОМ ВРЕМЕНИ С
      WINDOWS AZURE И NODE.JS
http://www.slideshare.net/dmytromindra   @dmytromindra #msugodua
Вы замечательные !




                     @dmytromindra #msugodua
Для кого этот доклад?
Вам нравится
JavaScript

Вы хотите чего-то
нового!

Вам нравится Web



                    @dmytromindra #msugodua
Мустафин Дмитрий
RnD Team Lead

Microsoft
Technologies Lab
Member




                   @dmytromindra #msugodua
Нечто




        Великолепное ПО

                    @dmytromindra #msugodua
Посторонись, пресловутый PHP! Долой Java!
Старичок Perl, тебе так вообще давно пора на пенсию.
И как же вы уже достали, попсовые Ruby и Python!

(c) xakep




            http://www.xakep.ru/post/53583/   @dmytromindra #msugodua
Мы
Ждем
Перемен !




            @dmytromindra #msugodua
@dmytromindra #msugodua
&

Node.js



                 23 июня 2011
          @dmytromindra #msugodua
HELLO WORLD
var http = require('http');

http.createServer(function (req, res) {
     res.writeHead(200, {'Content-Type': 'text/plain'});
     res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');

                                         @dmytromindra #msugodua
ПОЧЕМУ NODE.JS?
Цель Node.JS -      Event Driven
обеспечение
                    Все асинхронно
простого способа
создания            Работает на Google V8
масштабируемых      Официально поддерживается
сетевых программ.   компанией Microsoft
                    Хорошо параллелится (при работе
                    с вводом/выводом)




                                     @dmytromindra #msugodua
АСИНХРОННОСТЬ
Пока выполняется
операция, которую
надо
ждать, Node.JS
занимается
полезным делом.




                    @dmytromindra #msugodua
СЛАБЫЕ СТОРОНЫ
У Node.JS есть      Плохо справляется с
слабые стороны, о   тяжелыми вычислительными
которых надо        задачами
помнить.
                    Использует только одно ядро
                    процессора (есть утилита
                    Cluster)



                                @dmytromindra #msugodua
Спагетти код
 var fs = require('fs')
   , path = require('path')
   , file1 = "file1.txt“
   , file2 = "file2.txt";

 // Check if file1 exists, write to file2,
 // then display new file2 contents.
 path.exists(file1, function (exists) {
    if (!exists) throw new Error("No file!");
    fs.readFile(file1, function (err, data) {
        if (err) throw err; fs.writeFile(file2, data, function (err) {
           if (err) throw err; fs.readFile(file2, function (err, data) {
               if (err) throw err; console.log(data.toString());
               ...
           });
        });
    });
 });

                                                                           @dmytromindra #msugodua
ХОРОШИЙ ИНСТРУМЕНТ
Для подходящей
задачи.

Важно уметь
отличить
подходящую
задачу от
неподходящей.


                 @dmytromindra #msugodua
Есть ли у нас план?
1.   Привет Node!
2.   Web Проект
3.   SPA
4.   Windows Azure
5.   Socket.IO




                      @dmytromindra #msugodua
Пора делать

ПЕРВЫЕ ШАГИ




              @dmytromindra #msugodua
Node Package Manager
           Управляет установкой
           модулей, например

           npm install azure

           npm install –g express




                     @dmytromindra #msugodua
Разработка первого

WEB ПРИЛОЖЕНИЯ




                     @dmytromindra #msugodua
Что в меню ?
JavaScript везде. И   Express    (сервер)
на сервере, и на      Jade       (сервер)
клиенте. Некоторые    Mustache   (сервер , клиент)
библиотеки            Sammy.js   (клиент)
используются          jQuery     (клиент)
одновременно и на
сервере и на
клиенте.



                                 @dmytromindra #msugodua
ПРОСТОЕ WEB ПРИЛОЖЕНИЕ
          Постараемся построить простое
          веб приложение при помощи
          Express, Jade и пары заготовок.




                         @dmytromindra #msugodua
SPA* – приложение-страница
             Приложение, состоящее из одной
             веб страницы и обилия скриптов.

             Асинхронно общается с сервером.
             Не перегружается.




             *http://en.wikipedia.org/wiki/Single_Page_Application




                                         @dmytromindra #msugodua
Интеграция с

WINDOWS AZURE




               @dmytromindra #msugodua
ПРИСТУПАЕМ К РАБОТЕ
Мы кратко расскажем как:
 создать новое Windows Azure Node.js приложение
  используя инструменты Windows PowerShell
 запустить Node приложение локально, используя
  Windows Azure compute emulator
 опубликовать ваше приложение а Windows Azure

Дополнительная информация:
https://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/
https://www.windowsazure.com/en-us/develop/nodejs/tutorials/web-app-with-storage/

                                                                 @dmytromindra #msugodua
ЕСЛИ КОРОТКО, ТО
Выполните команду
npm install azure

В файле «c:nodetasklistWebRole1Web.cloud.config» замените
тестовые данные на данные вашей учетной записи Azure.

Вы найдете много полезной информации в файле:
«C:nodetasklistWebRole1node_modulesazureREADME.md»

Создайте новую переменную в вашем JavaScript файле:
var azure = require('azure');

Все готово! Поехали !
                                                @dmytromindra #msugodua
СЕРВИС ТАБЛИЦ
Создаем сервис:
var tableService = azure.createTableService();

Назначаем имя таблице:
var myTableName = “MyTable”;

Создаем таблицу:
tableService.createTableIfNotExists(myTableName, OnCreatedFu
nc);

Где OnCreatedFunc является функцией, которая выполнится после
создания таблицы (Callback)
function OnCreatedFunc(errorObject, createdBoolFlag) {…}
Больше информации по адресу:
http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/table-services/


                                                                            @dmytromindra #msugodua
ДОБАВЛЯЕМ ЗАПИСЬ В ТАБЛИЦУ
Таблица Azure является контейнером для любого объекта. “PK” является
комбинацией Partition и Row ключей.

Объявляем объект:
var myObj = {
  PartitionKey: “MyPartition“, RowKey: “myRowKey“,
  myProp1: “Dima+", myProp2: “Luba=“, myProp3: “Misha”};

Добавляем объект в таблицу:
tableService.insertEntity(
       myTableName, myObj, OnMyObjInserted);

Где функция OnMyObjInserted является callback-ом
function OnMyObjInserted(error, serverEntity) {…}

                                               @dmytromindra #msugodua
ОБНОВЛЯЕМ ЗАПИСЬ
Объявляем объект с обновленными данными:
var myObjUpd = { PartitionKey:
“MyPartition“, RowKey: “myRowKey", myProp1:
“Dima+", myProp2: “Luba=”, myProp3: “Misha and
Margo" };

Обновляем существующую сущность:
tableService.updateEntity(
myTableName, myObjUpd, OnMyObjUpdated);
Функция OnMyObjUpdated – это, как всегда, callback:
function OnMyObjUpdated(error, serverEntity) {…}

Подводный камень: вы должны заполнить все поля своего
объекта, либо воспользоваться объектом ServerEntity и изменить
только необходимые поля!
                                          @dmytromindra #msugodua
ЗАПРАШИВАЕМ ЗАПИСЬ
Одиночный объект:
tableService.queryEntity(myTableName, myPartition, myRowK
ey, OnEntityQueried);

callback:
function OnEntityQueried(error, serverEntity) {…}

Набор объектов:
var query = azure.TableQuery.select().from(myTableName)
               .where(“PartitionKey eq ?”, “MyPartition”);
tableService.queryEntities(query, OnEntitiesQueried);

сallback:
function OnEntitiesQueried(error, serverEntities) {…}

                                       @dmytromindra #msugodua
КАК НАСЧЕТ BLOB?
Все работает точно так же, как и в таблицах:
    var azure = require('azure');
    var blobService = azure.createBlobService();
    blobService.createContainerIfNotExists(…);
    blobService.createBlockBlobFromStream(…);
    blobService.listBlobs(…);
    blobService.getBlobToStream(…);
    blobService.deleteBlob(…);

Подробнее
http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/blob-storage/



                                                                @dmytromindra #msugodua
WEB в реальном времени
SOCKET.IO




               @dmytromindra #msugodua
WebSockets
                                     Постоянное подключение к
                                     серверу.
                                     Часть стандарта HTML5
                                     Предназначен для
                                     построения Real-Time
                                     приложений.



http://tools.ietf.org/html/rfc6455               @dmytromindra #msugodua
Что такое SOCKET.IO?
Больше, чем просто    Виды транспорта:
WebSockets.           WebSocket
Имеет                 Flash Socket
альтернативные виды
транспорта.
                      AJAX long-polling
                      AJAX multipart streaming
Поставляется с
клиентской            IFrame
библиотектой.         JSONP polling


                                   @dmytromindra #msugodua
Время действовать
Напишем              В нашем случае этим
приложение, работа   приложением будет обмен
ющее в реальном      мгновенными сообщениями.
времени.




                                @dmytromindra #msugodua
Подводим итоги

В ЗАКЛЮЧЕНИЕ




                 @dmytromindra #msugodua
Мои аргументы:
 1. JavaScript невероятно популярен. На рынке много
    программистов.

 2. JavaScript будет единым языком и на сервере и
    на клиенте. Никакого дублирования кода.

 3. Асинхронная событийная модель.




                                     @dmytromindra #msugodua
Внеклассное чтение
Как убедить босса?
http://nodeguide.com/convincing_the_boss.html


Выбор правильного стиля
http://stackoverflow.com/questions/5495984/coding-style-guide-for-node-js-apps



Что такое Node?
http://stackoverflow.com/questions/1884724/what-is-node-js



                                                             @dmytromindra #msugodua
Это стоит попробовать!

СПАСИБО !
Dmytro.Mindra@gmail.com

                          @dmytromindra #msugodua

Contenu connexe

Tendances

JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9Technopark
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеPython Meetup
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...corehard_by
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаYandex
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 
МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4Dima Dzuba
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and catscorehard_by
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 

Tendances (20)

JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9
 
Kranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenkoKranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenko
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4
 
JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and cats
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 

En vedette

Использование Qualcomm Augmented Reality в приложениях для Android
Использование Qualcomm Augmented Reality в приложениях для AndroidИспользование Qualcomm Augmented Reality в приложениях для Android
Использование Qualcomm Augmented Reality в приложениях для AndroidAlex Tumanoff
 
Object-2-Object mapping, как приправа к вашему проекту
Object-2-Object mapping, как приправа к вашему проектуObject-2-Object mapping, как приправа к вашему проекту
Object-2-Object mapping, как приправа к вашему проектуAlex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Alex Tumanoff
 
Sergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixSergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixbeloslab
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практикеAlexander Byndyu
 

En vedette (8)

HTML 5
HTML 5HTML 5
HTML 5
 
Использование Qualcomm Augmented Reality в приложениях для Android
Использование Qualcomm Augmented Reality в приложениях для AndroidИспользование Qualcomm Augmented Reality в приложениях для Android
Использование Qualcomm Augmented Reality в приложениях для Android
 
Object-2-Object mapping, как приправа к вашему проекту
Object-2-Object mapping, как приправа к вашему проектуObject-2-Object mapping, как приправа к вашему проекту
Object-2-Object mapping, как приправа к вашему проекту
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Spring.new hope.1.3
Spring.new hope.1.3Spring.new hope.1.3
Spring.new hope.1.3
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3
 
Sergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixSergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrix
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практике
 

Similaire à Windows Azure and node js

Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Dmytro Mindra
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.jsОмские ИТ-субботники
 
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Ontico
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
 
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBStepan Stolyarov
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"OdessaJS Conf
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Alexey Bokov
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Ontico
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Кирилл Толкачёв
 
МРТ для данных / Анастасия Горячева (Avito)
МРТ для данных / Анастасия Горячева (Avito)МРТ для данных / Анастасия Горячева (Avito)
МРТ для данных / Анастасия Горячева (Avito)Ontico
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016Anastasia Goryacheva
 

Similaire à Windows Azure and node js (20)

Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
МРТ для данных / Анастасия Горячева (Avito)
МРТ для данных / Анастасия Горячева (Avito)МРТ для данных / Анастасия Горячева (Avito)
МРТ для данных / Анастасия Горячева (Avito)
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016
 

Plus de Alex Tumanoff

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiAlex Tumanoff
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikAlex Tumanoff
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAlex Tumanoff
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony CoxAlex Tumanoff
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1Alex Tumanoff
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...Alex Tumanoff
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevAlex Tumanoff
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoAlex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsAlex Tumanoff
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковAlex Tumanoff
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapterAlex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergAlex Tumanoff
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITAlex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений FirefoxAlex Tumanoff
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...Alex Tumanoff
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programmingAlex Tumanoff
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8Alex Tumanoff
 
XP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностьюXP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностьюAlex Tumanoff
 

Plus de Alex Tumanoff (20)

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen Nedaskivskyi
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony Cox
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton Vidishchev
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей Рыбаков
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapter
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в IT
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programming
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
 
XP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностьюXP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностью
 
Anti patterns
Anti patternsAnti patterns
Anti patterns
 

Windows Azure and node js

  • 1. Дмитрий Миндра, Lohika WEB В РЕАЛЬНОМ ВРЕМЕНИ С WINDOWS AZURE И NODE.JS http://www.slideshare.net/dmytromindra @dmytromindra #msugodua
  • 2. Вы замечательные ! @dmytromindra #msugodua
  • 3. Для кого этот доклад? Вам нравится JavaScript Вы хотите чего-то нового! Вам нравится Web @dmytromindra #msugodua
  • 4. Мустафин Дмитрий RnD Team Lead Microsoft Technologies Lab Member @dmytromindra #msugodua
  • 5. Нечто Великолепное ПО @dmytromindra #msugodua
  • 6. Посторонись, пресловутый PHP! Долой Java! Старичок Perl, тебе так вообще давно пора на пенсию. И как же вы уже достали, попсовые Ruby и Python! (c) xakep http://www.xakep.ru/post/53583/ @dmytromindra #msugodua
  • 7. Мы Ждем Перемен ! @dmytromindra #msugodua
  • 9. & Node.js 23 июня 2011 @dmytromindra #msugodua
  • 10. HELLO WORLD var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); @dmytromindra #msugodua
  • 11. ПОЧЕМУ NODE.JS? Цель Node.JS - Event Driven обеспечение Все асинхронно простого способа создания Работает на Google V8 масштабируемых Официально поддерживается сетевых программ. компанией Microsoft Хорошо параллелится (при работе с вводом/выводом) @dmytromindra #msugodua
  • 12. АСИНХРОННОСТЬ Пока выполняется операция, которую надо ждать, Node.JS занимается полезным делом. @dmytromindra #msugodua
  • 13. СЛАБЫЕ СТОРОНЫ У Node.JS есть Плохо справляется с слабые стороны, о тяжелыми вычислительными которых надо задачами помнить. Использует только одно ядро процессора (есть утилита Cluster) @dmytromindra #msugodua
  • 14. Спагетти код var fs = require('fs') , path = require('path') , file1 = "file1.txt“ , file2 = "file2.txt"; // Check if file1 exists, write to file2, // then display new file2 contents. path.exists(file1, function (exists) { if (!exists) throw new Error("No file!"); fs.readFile(file1, function (err, data) { if (err) throw err; fs.writeFile(file2, data, function (err) { if (err) throw err; fs.readFile(file2, function (err, data) { if (err) throw err; console.log(data.toString()); ... }); }); }); }); @dmytromindra #msugodua
  • 15. ХОРОШИЙ ИНСТРУМЕНТ Для подходящей задачи. Важно уметь отличить подходящую задачу от неподходящей. @dmytromindra #msugodua
  • 16. Есть ли у нас план? 1. Привет Node! 2. Web Проект 3. SPA 4. Windows Azure 5. Socket.IO @dmytromindra #msugodua
  • 18. Node Package Manager Управляет установкой модулей, например npm install azure npm install –g express @dmytromindra #msugodua
  • 20. Что в меню ? JavaScript везде. И Express (сервер) на сервере, и на Jade (сервер) клиенте. Некоторые Mustache (сервер , клиент) библиотеки Sammy.js (клиент) используются jQuery (клиент) одновременно и на сервере и на клиенте. @dmytromindra #msugodua
  • 21. ПРОСТОЕ WEB ПРИЛОЖЕНИЕ Постараемся построить простое веб приложение при помощи Express, Jade и пары заготовок. @dmytromindra #msugodua
  • 22. SPA* – приложение-страница Приложение, состоящее из одной веб страницы и обилия скриптов. Асинхронно общается с сервером. Не перегружается. *http://en.wikipedia.org/wiki/Single_Page_Application @dmytromindra #msugodua
  • 23. Интеграция с WINDOWS AZURE @dmytromindra #msugodua
  • 24. ПРИСТУПАЕМ К РАБОТЕ Мы кратко расскажем как:  создать новое Windows Azure Node.js приложение используя инструменты Windows PowerShell  запустить Node приложение локально, используя Windows Azure compute emulator  опубликовать ваше приложение а Windows Azure Дополнительная информация: https://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/ https://www.windowsazure.com/en-us/develop/nodejs/tutorials/web-app-with-storage/ @dmytromindra #msugodua
  • 25. ЕСЛИ КОРОТКО, ТО Выполните команду npm install azure В файле «c:nodetasklistWebRole1Web.cloud.config» замените тестовые данные на данные вашей учетной записи Azure. Вы найдете много полезной информации в файле: «C:nodetasklistWebRole1node_modulesazureREADME.md» Создайте новую переменную в вашем JavaScript файле: var azure = require('azure'); Все готово! Поехали ! @dmytromindra #msugodua
  • 26. СЕРВИС ТАБЛИЦ Создаем сервис: var tableService = azure.createTableService(); Назначаем имя таблице: var myTableName = “MyTable”; Создаем таблицу: tableService.createTableIfNotExists(myTableName, OnCreatedFu nc); Где OnCreatedFunc является функцией, которая выполнится после создания таблицы (Callback) function OnCreatedFunc(errorObject, createdBoolFlag) {…} Больше информации по адресу: http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/table-services/ @dmytromindra #msugodua
  • 27. ДОБАВЛЯЕМ ЗАПИСЬ В ТАБЛИЦУ Таблица Azure является контейнером для любого объекта. “PK” является комбинацией Partition и Row ключей. Объявляем объект: var myObj = { PartitionKey: “MyPartition“, RowKey: “myRowKey“, myProp1: “Dima+", myProp2: “Luba=“, myProp3: “Misha”}; Добавляем объект в таблицу: tableService.insertEntity( myTableName, myObj, OnMyObjInserted); Где функция OnMyObjInserted является callback-ом function OnMyObjInserted(error, serverEntity) {…} @dmytromindra #msugodua
  • 28. ОБНОВЛЯЕМ ЗАПИСЬ Объявляем объект с обновленными данными: var myObjUpd = { PartitionKey: “MyPartition“, RowKey: “myRowKey", myProp1: “Dima+", myProp2: “Luba=”, myProp3: “Misha and Margo" }; Обновляем существующую сущность: tableService.updateEntity( myTableName, myObjUpd, OnMyObjUpdated); Функция OnMyObjUpdated – это, как всегда, callback: function OnMyObjUpdated(error, serverEntity) {…} Подводный камень: вы должны заполнить все поля своего объекта, либо воспользоваться объектом ServerEntity и изменить только необходимые поля! @dmytromindra #msugodua
  • 29. ЗАПРАШИВАЕМ ЗАПИСЬ Одиночный объект: tableService.queryEntity(myTableName, myPartition, myRowK ey, OnEntityQueried); callback: function OnEntityQueried(error, serverEntity) {…} Набор объектов: var query = azure.TableQuery.select().from(myTableName) .where(“PartitionKey eq ?”, “MyPartition”); tableService.queryEntities(query, OnEntitiesQueried); сallback: function OnEntitiesQueried(error, serverEntities) {…} @dmytromindra #msugodua
  • 30. КАК НАСЧЕТ BLOB? Все работает точно так же, как и в таблицах: var azure = require('azure'); var blobService = azure.createBlobService(); blobService.createContainerIfNotExists(…); blobService.createBlockBlobFromStream(…); blobService.listBlobs(…); blobService.getBlobToStream(…); blobService.deleteBlob(…); Подробнее http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/blob-storage/ @dmytromindra #msugodua
  • 31. WEB в реальном времени SOCKET.IO @dmytromindra #msugodua
  • 32. WebSockets Постоянное подключение к серверу. Часть стандарта HTML5 Предназначен для построения Real-Time приложений. http://tools.ietf.org/html/rfc6455 @dmytromindra #msugodua
  • 33. Что такое SOCKET.IO? Больше, чем просто Виды транспорта: WebSockets. WebSocket Имеет Flash Socket альтернативные виды транспорта. AJAX long-polling AJAX multipart streaming Поставляется с клиентской IFrame библиотектой. JSONP polling @dmytromindra #msugodua
  • 34. Время действовать Напишем В нашем случае этим приложение, работа приложением будет обмен ющее в реальном мгновенными сообщениями. времени. @dmytromindra #msugodua
  • 36. Мои аргументы: 1. JavaScript невероятно популярен. На рынке много программистов. 2. JavaScript будет единым языком и на сервере и на клиенте. Никакого дублирования кода. 3. Асинхронная событийная модель. @dmytromindra #msugodua
  • 37. Внеклассное чтение Как убедить босса? http://nodeguide.com/convincing_the_boss.html Выбор правильного стиля http://stackoverflow.com/questions/5495984/coding-style-guide-for-node-js-apps Что такое Node? http://stackoverflow.com/questions/1884724/what-is-node-js @dmytromindra #msugodua
  • 38. Это стоит попробовать! СПАСИБО ! Dmytro.Mindra@gmail.com @dmytromindra #msugodua