25-26.05 Харьков




      Дмитрий Миндра, Lohika

      WEB В РЕАЛЬНОМ ВРЕМЕНИ
      С NODE.JS
http://www.slideshare.net/dmytromindra   @dmytromindra #agilebc
25-26.05 Харьков


Вы замечательные !




                @dmytromindra #agilebc
25-26.05 Харьков




Spider Monkey       FireFox
Squirrel Fish Extreme Safari
Karakan Opera
V8 Chrome



                               @dmytromindra #agilebc
25-26.05 Харьков


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

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

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

                    @dmytromindra #agilebc
25-26.05 Харьков

Нечто




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

(c) xakep




            http://www.xakep.ru/post/53583/   @dmytromindra #agilebc
25-26.05 Харьков

Мы
Ждем
Перемен !




            @dmytromindra #agilebc
25-26.05 Харьков




@dmytromindra #agilebc
25-26.05 Харьков




&

Node.js



                 23 июня 2011
          @dmytromindra #agilebc
25-26.05 Харьков


 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 #agilebc
25-26.05 Харьков


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


                                     @dmytromindra #agilebc
25-26.05 Харьков


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



                    @dmytromindra #agilebc
25-26.05 Харьков


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



                                @dmytromindra #agilebc
25-26.05 Харьков


Спагетти код
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 #agilebc
25-26.05 Харьков


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

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

                 @dmytromindra #agilebc
25-26.05 Харьков


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




                      @dmytromindra #agilebc
25-26.05 Харьков




Пора делать

ПЕРВЫЕ ШАГИ
(И НЕБОЛЬШОЙ ТЕСТ)




              @dmytromindra #agilebc
25-26.05 Харьков


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

           npm install express

           npm install –g nodemon



                     @dmytromindra #agilebc
25-26.05 Харьков




Разработка первого

WEB ПРИЛОЖЕНИЯ




                     @dmytromindra #agilebc
25-26.05 Харьков


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

                                 @dmytromindra #agilebc
25-26.05 Харьков


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




                         @dmytromindra #agilebc
25-26.05 Харьков


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

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




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



                                         @dmytromindra #agilebc
25-26.05 Харьков




WEB в реальном времени
SOCKET.IO




               @dmytromindra #agilebc
25-26.05 Харьков


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


http://tools.ietf.org/html/rfc6455               @dmytromindra #agilebc
25-26.05 Харьков


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

                                   @dmytromindra #agilebc
25-26.05 Харьков


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




                                @dmytromindra #agilebc
25-26.05 Харьков




Подводим итоги

В ЗАКЛЮЧЕНИЕ




                 @dmytromindra #agilebc
25-26.05 Харьков


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

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

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



                                     @dmytromindra #agilebc
25-26.05 Харьков


Внеклассное чтение
Как убедить босса?
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 #agilebc
25-26.05 Харьков

Мои исходники доступны по ссылке:
https://github.com/DmytroMindra/NodeJS-AgileBaseCamp-2012

                                              Это стоит попробовать!

                                              СПАСИБО !




                                                        Dmytro.Mindra@gmail.com
                                                        @dmytromindra #agilebc

Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012

  • 1.
    25-26.05 Харьков Дмитрий Миндра, Lohika WEB В РЕАЛЬНОМ ВРЕМЕНИ С NODE.JS http://www.slideshare.net/dmytromindra @dmytromindra #agilebc
  • 2.
  • 3.
    25-26.05 Харьков Spider Monkey FireFox Squirrel Fish Extreme Safari Karakan Opera V8 Chrome @dmytromindra #agilebc
  • 4.
    25-26.05 Харьков Для когоэтот доклад? Вам нравится JavaScript Вы хотите чего-то нового! Вам нравится Web @dmytromindra #agilebc
  • 5.
    25-26.05 Харьков Нечто Великолепное ПО @dmytromindra #agilebc
  • 6.
    Посторонись, пресловутый PHP!Долой Java!25-26.05 Харьков Старичок Perl, тебе так вообще давно пора на пенсию. И как же вы уже достали, попсовые Ruby и Python! (c) xakep http://www.xakep.ru/post/53583/ @dmytromindra #agilebc
  • 7.
  • 8.
  • 9.
    25-26.05 Харьков & Node.js 23 июня 2011 @dmytromindra #agilebc
  • 10.
    25-26.05 Харьков HELLOWORLD 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 #agilebc
  • 11.
    25-26.05 Харьков ПОЧЕМУ NODE.JS? ЦельNode.JS - Event Driven обеспечение простого способа Все асинхронно создания Работает на Google V8 масштабируемых Официально поддерживается сетевых программ. компанией Microsoft Хорошо параллелится (при работе с вводом/выводом) @dmytromindra #agilebc
  • 12.
    25-26.05 Харьков АСИНХРОННОСТЬ Пока выполняется операция,которую надо ждать, Node.JS занимается полезным делом. @dmytromindra #agilebc
  • 13.
    25-26.05 Харьков СЛАБЫЕ СТОРОНЫ УNode.JS есть Плохо справляется с слабые стороны, о тяжелыми вычислительными которых надо задачами помнить. Использует только одно ядро процессора (есть утилита Cluster) @dmytromindra #agilebc
  • 14.
    25-26.05 Харьков Спагетти код varfs = 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 #agilebc
  • 15.
    25-26.05 Харьков ХОРОШИЙ ИНСТРУМЕНТ Дляподходящей задачи. Важно уметь отличить подходящую задачу от неподходящей. @dmytromindra #agilebc
  • 16.
    25-26.05 Харьков Есть лиу нас план? 1. Привет Node! 2. Web Проект 3. SPA 4. Socket.IO @dmytromindra #agilebc
  • 17.
    25-26.05 Харьков Пора делать ПЕРВЫЕШАГИ (И НЕБОЛЬШОЙ ТЕСТ) @dmytromindra #agilebc
  • 18.
    25-26.05 Харьков Node PackageManager Управляет установкой модулей, например npm install express npm install –g nodemon @dmytromindra #agilebc
  • 19.
    25-26.05 Харьков Разработка первого WEBПРИЛОЖЕНИЯ @dmytromindra #agilebc
  • 20.
    25-26.05 Харьков Что вменю ? JavaScript везде. И Express (сервер) на сервере, и на Jade (сервер) клиенте. Некоторые Mustache (сервер , клиент) библиотеки Sammy.js (клиент) используются jQuery (клиент) одновременно и на сервере и на клиенте. @dmytromindra #agilebc
  • 21.
    25-26.05 Харьков ПРОСТОЕ WEBПРИЛОЖЕНИЕ Постараемся построить простое веб приложение при помощи Express, Jade и пары заготовок. @dmytromindra #agilebc
  • 22.
    25-26.05 Харьков SPA* –приложение-страница Приложение, состоящее из одной веб страницы и обилия скриптов. Асинхронно общается с сервером. Не перегружается. *http://en.wikipedia.org/wiki/Single_Page_Application @dmytromindra #agilebc
  • 23.
    25-26.05 Харьков WEB вреальном времени SOCKET.IO @dmytromindra #agilebc
  • 24.
    25-26.05 Харьков WebSockets Постоянное подключение к серверу. Часть стандарта HTML5 Предназначен для построения Real-Time приложений. http://tools.ietf.org/html/rfc6455 @dmytromindra #agilebc
  • 25.
    25-26.05 Харьков Что такоеSOCKET.IO? Больше, чем просто Виды транспорта: WebSockets. WebSocket Имеет Flash Socket альтернативные виды транспорта. AJAX long-polling AJAX multipart streaming Поставляется с клиентской IFrame библиотектой. JSONP polling @dmytromindra #agilebc
  • 26.
    25-26.05 Харьков Время действовать Напишем В нашем случае этим приложение, работа приложением будет обмен ющее в реальном мгновенными сообщениями. времени. @dmytromindra #agilebc
  • 27.
    25-26.05 Харьков Подводим итоги ВЗАКЛЮЧЕНИЕ @dmytromindra #agilebc
  • 28.
    25-26.05 Харьков Мои аргументы: 1. JavaScript невероятно популярен. На рынке много программистов. 2. JavaScript будет единым языком и на сервере и на клиенте. Никакого дублирования кода. 3. Асинхронная событийная модель. @dmytromindra #agilebc
  • 29.
    25-26.05 Харьков Внеклассное чтение Какубедить босса? 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 #agilebc
  • 30.
    25-26.05 Харьков Мои исходникидоступны по ссылке: https://github.com/DmytroMindra/NodeJS-AgileBaseCamp-2012 Это стоит попробовать! СПАСИБО ! Dmytro.Mindra@gmail.com @dmytromindra #agilebc