WebCamp: Developer Day: N2O: The Most Powerful Erlang Web Framework - Максим ...GeeksLab Odessa
N2O: The Most Powerful Erlang Web Framework
Максим Сохацкий
N2O разрабатывался как многофункциональный WebSocket аппликейшин сервер широкого назначения. Будучи ответвлен изначально от классического сервер-рендер фреймворка Nitrogen, он развился в мощное средство (включающее в том числе и поддержку SPA приложений) обеспечения пула долгоживущих TCP соеднений и доставки кода/даных выступая в качестве высокоемкностного релея, благодаря надежной и высокоустойчивой платформе Erlang/OTP. Соединяя в себе все черты Full-Stack веб фреймворков: Роутинг, Темплейтинг, Pub/Sub, Сессии, Хранилище, REST и поддержка кастомных протоколов; N2O добавляет совершенно уникальные возможности для создания различных DSL: вы можете транслировать бизнес логику, написанную на Erlang языках (Elixir, Erlang, Joxa) в JavaScript, генерировать трансформаций Erlang рекордов в JSON структуры и много другое, специфицировать JavaScript протоколы на языке Erlang. Сейчас N2O развивается в сторону поддержки SVG клиентов и бинарных протоколов.
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
"Мое выступление поможет ответить на следующие вопросы:
1. Что такое HTTP reverse proxy?
2. Настройка NGINX в режиме reverse proxy.
3. Стандартные способы выбора upstream server: Round Robin, Hash, Consistent Hash.
4. Не сдерживаем фантазию -- пишем свой алгоритм.
5. Примеры, когда создание собственного решения оправдано."
2 июля 2011, Я.Субботник в Екатеринбурге
Алексей Андросов "HTML5 в Я.Почте"
О докладе:
Вопросы практического применения современных технологий передачи и хранения данных в браузере на примере Яндекс.Почты, проблемы и ограничения, с которыми можно столкнуться, а также способы их решения.
Для чего нужны WebSocket, localStorage и кроссдоменные AJAX запросы? Как реализовать их поддержку с учетом старых браузеров, которые не поддерживают эти технологии? Как обойти проблемы и баги в этих технологиях?
О чем нам могут рассказать access логи вебсервера? Поиск аномалий и отклонений от нормы? Откуда наши пользователи? Город? Страна? Сайт? Сколько запросов генерируют роботы? Когда в последний раз к нам приходил поисковик для индексации? Какая динамика по ошибкам и страницам отсутствующим на сайте?
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковYandex
Антивирусная система Яндекса ежедневно обнаруживает тысячи взломанных сайтов. Периодически среди них встречаются крупные и известные интернет-ресурсы.
Администраторы сайтов часто оказываются не готовы к тому, что злоумышленник может пробраться через внешний периметр и исполнить произвольный код на стороне сервера. В результате перед ними встаёт нелегкая задача: обнаружить последствия и предотвратить дальнейшие проблемы.
Доклад посвящён практикам и инструментам, которые могут существенно повысить эффективность противодействия вредоносной активности, и профилактике её возникновения.
01 - Web-технологии. Архитектура Web приложенийRoman Brovko
1. Понятие URL и документа
2. Виды документов: HTML, CSS, JS, JSON.
3. Абсолютные и относительные URL
4. Правила разрешения URL-ов
5. Гиперссылки
6. Клиент-серверная архитектура
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
Доклад - https://www.youtube.com/watch?v=lJsqRwULRVA
Какие проблемы решаем?
быстрый вход нового разработчика в проект
стандартизация настроек разработчиков
переключение между проектами - разные версии ПО и библиотек (mysql 5.6/5.7, node 0.12/7.2)
приучаем разработчиков к сетевому взаимодействию компонентов
Microservice - масштабирование/разделения разработки
Делим ресурсы staging среды между проектами
WebCamp: Developer Day: N2O: The Most Powerful Erlang Web Framework - Максим ...GeeksLab Odessa
N2O: The Most Powerful Erlang Web Framework
Максим Сохацкий
N2O разрабатывался как многофункциональный WebSocket аппликейшин сервер широкого назначения. Будучи ответвлен изначально от классического сервер-рендер фреймворка Nitrogen, он развился в мощное средство (включающее в том числе и поддержку SPA приложений) обеспечения пула долгоживущих TCP соеднений и доставки кода/даных выступая в качестве высокоемкностного релея, благодаря надежной и высокоустойчивой платформе Erlang/OTP. Соединяя в себе все черты Full-Stack веб фреймворков: Роутинг, Темплейтинг, Pub/Sub, Сессии, Хранилище, REST и поддержка кастомных протоколов; N2O добавляет совершенно уникальные возможности для создания различных DSL: вы можете транслировать бизнес логику, написанную на Erlang языках (Elixir, Erlang, Joxa) в JavaScript, генерировать трансформаций Erlang рекордов в JSON структуры и много другое, специфицировать JavaScript протоколы на языке Erlang. Сейчас N2O развивается в сторону поддержки SVG клиентов и бинарных протоколов.
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
"Мое выступление поможет ответить на следующие вопросы:
1. Что такое HTTP reverse proxy?
2. Настройка NGINX в режиме reverse proxy.
3. Стандартные способы выбора upstream server: Round Robin, Hash, Consistent Hash.
4. Не сдерживаем фантазию -- пишем свой алгоритм.
5. Примеры, когда создание собственного решения оправдано."
2 июля 2011, Я.Субботник в Екатеринбурге
Алексей Андросов "HTML5 в Я.Почте"
О докладе:
Вопросы практического применения современных технологий передачи и хранения данных в браузере на примере Яндекс.Почты, проблемы и ограничения, с которыми можно столкнуться, а также способы их решения.
Для чего нужны WebSocket, localStorage и кроссдоменные AJAX запросы? Как реализовать их поддержку с учетом старых браузеров, которые не поддерживают эти технологии? Как обойти проблемы и баги в этих технологиях?
О чем нам могут рассказать access логи вебсервера? Поиск аномалий и отклонений от нормы? Откуда наши пользователи? Город? Страна? Сайт? Сколько запросов генерируют роботы? Когда в последний раз к нам приходил поисковик для индексации? Какая динамика по ошибкам и страницам отсутствующим на сайте?
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковYandex
Антивирусная система Яндекса ежедневно обнаруживает тысячи взломанных сайтов. Периодически среди них встречаются крупные и известные интернет-ресурсы.
Администраторы сайтов часто оказываются не готовы к тому, что злоумышленник может пробраться через внешний периметр и исполнить произвольный код на стороне сервера. В результате перед ними встаёт нелегкая задача: обнаружить последствия и предотвратить дальнейшие проблемы.
Доклад посвящён практикам и инструментам, которые могут существенно повысить эффективность противодействия вредоносной активности, и профилактике её возникновения.
01 - Web-технологии. Архитектура Web приложенийRoman Brovko
1. Понятие URL и документа
2. Виды документов: HTML, CSS, JS, JSON.
3. Абсолютные и относительные URL
4. Правила разрешения URL-ов
5. Гиперссылки
6. Клиент-серверная архитектура
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
Доклад - https://www.youtube.com/watch?v=lJsqRwULRVA
Какие проблемы решаем?
быстрый вход нового разработчика в проект
стандартизация настроек разработчиков
переключение между проектами - разные версии ПО и библиотек (mysql 5.6/5.7, node 0.12/7.2)
приучаем разработчиков к сетевому взаимодействию компонентов
Microservice - масштабирование/разделения разработки
Делим ресурсы staging среды между проектами
Модным ныне словом «виртуализация» сейчас называют различные обёртки аппаратной виртуализации, однако этот термин намного старше и более всеохватывающий. На уровне ознакомления с технологией мы поговорим о виртуализации ресурсов в кластере и на примере pacemaker.
Леонид Васильев "Python в инфраструктуре поиска"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Леонид Васильев "Python в инфраструктуре поиска"
О докладе:
Описание архитектуры и реализации внутренних инструментов для управления поисковым кластером.
Что такое инфраструктура поиска? Какие задачи приходится решать? Какие инструменты для управления кластером используются в поиске? Как они устроены изнутри? Что можно посоветовать проектам с большой инфраструктурой? Какие существуют open-source аналоги?
Обратная разработка бинарных форматов с помощью Kaitai StructPositive Hack Days
Ведущий: Михаил Якшин
В докладе будут рассмотрены современные подходы к обратной разработке бинарных файлов: с чего начинают, что хотят получить на выходе, какими инструментами традиционно пользуются. Будет продемонстрирован новый проект— Kaitai Struct, представляющий собой инструментарий для декларативного описания бинарных структур данных с выводом результата в виде готовых библиотек на языках C++, Java, JavaScript, Python и Ruby. Несколько практических примеров использования обратной разработки помогут участникам лучше ознакомиться с проблематикой.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
Краткий обзор существующих решений
Что такое web sockets
обеспечение работы web sockets на стороне сервера
основной механизм работы с web sockets в PHP
Нюансы использования
3. Сокет
Сокет — абстрактный объект, представляющий конечную
точку соединения.
В ОС объект сокета представлен файловым дескриптором
и может принимать те же операции что и файл (открытие -
чтение/запись - закрытие).
Дополнительно сокеты имеют операции для связи их с
адресом и подготовки к обмену данными.
3
4. Типы
• UNIX - для взаимодействия процессов на локальной
машине.
• INET - для взаимодействия по сети.
• WebSocket - протокол напоминающий механизм
сокетов, предназначен для связи браузера с сервером
(в обе стороны).
4
6. Системный вызов socket
Пример INET сокета типа TCP:
Код 1: Си
#include <sys/types.h>
#include <sys/socket.h>
int sock_fd = socket(AF_INET , SOCK_STREAM , 0);
Код 2: Python
import socket
sock_obj = socket.socket(socket.AF_INET ,
socket.SOCK_STREAM , 0)
6
7. Основные функции
socket
Создать новый сокет и вернуть файловый де-
скриптор
send Отправить данные по сети
receive Получить данные из сети
close Закрыть соединение
bind Связать сокет с IP-адресом и портом
listen
Объявить о желании принимать соединения.
Слушает порт и ждет когда будет установлено
соединение
accept Принять запрос на установку соединения
connect Установить соединение
7
8. Клиент. Установка соединения
Со стороны клиента используется функция connect,
которая инициирует установление связи на сокете:
Код 3: Си
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd ,
const struct sockaddr *serv_addr ,
socklen_t addrlen );
Код 4: Python
server_address = ('192.168.1.100 ', 8080)
sock_obj.connect(server_address)
8
9. Клиент. Установка соединения
Со стороны клиента используется функция connect:
Код 5: Си
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd ,
const struct sockaddr *serv_addr ,
socklen_t addrlen );
Код 6: Python
server_address = ('192.168.1.100 ', 8080)
sock_obj.connect(server_address)
9
11. Сервер. Ждем соединения.
Сервер слушает порт и ожидает запрос на соединение от
клиента:
Код 7: Си
#include <sys/socket.h>
int listen(int sockfd , int backlog );
Код 8: Python
sock_obj.listen (5) # fd = 5
11
12. Сервер. Подтверждаем соединение.
accept - подтверждает запрос клиента и устанавливает
соединение.
Код 9: Си
#include <sys/types.h>
#include <sys/socket.h>
int accept(int sockfd , struct sockaddr *cliaddr ,
socklen_t *addrlen );
Код 10: Python
conn , addr = sock_obj.accept ()
12
13. Передача данных
В Python вызов методов send, recv без дополнительных
параметров, аналогичен системным вызовам read, write.
Код 11: Си
#include <sys/types.h>
#include <unistd.h>
ssize_t read(int fd, void *buf , size_t nbytes );
ssize_t write(int fd, const void *buf , size_t nbytes );
Код 12: Python
conn.send('Hello␣World!')
data = conn.recv(BUFFER_SIZE)
13
14. Сервер TCP на Pyhton
Создаем TCP сокет, который слушает порт 5005 на
локальной машине.
Код 13: Python
import socket
TCP_IP = '127.0.0.1 '
TCP_PORT = 5005
BUFFER_SIZE = 20 # Normally 1024,
# but we want fast response
s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.bind((TCP_IP , TCP_PORT ))
s.listen (1)
14
15. Сервер TCP на Pyhton
После запроса клиента и установки с ним соединения,
сервер в бесконечном цикле принимает от него данные,
выводит их на экран и возвращает обратно. (Эхо-сервер)
Код 14: Python
conn , addr = s.accept ()
print("Connection␣address:␣{}".format(addr))
while 1:
data = conn.recv(BUFFER_SIZE)
print("received␣data:␣{}".format(data))
conn.send(data) # echo
conn.close()
15
16. Клиент TCP
TCP соединение всегда можно установить при помощи
утилиты Telnet.
Код 15: Telnet
$ telnet localhost 5005
16
17. Клиент TCP на Python
Создаем сокет и отправляем запрос на установку
соединения с сервером.
Код 16: Python
import socket
TCP_IP = '127.0.0.1 '
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello ,␣World!"
s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.connect ((TCP_IP , TCP_PORT ))
17
18. Клиент TCP на Python
Отправляем данные, получаем ответ сервера и закрываем
соединение.
Код 17: Python
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print("received␣data:␣{}".format(data))
18
19. Клиент HTTP на Python
Устанавливаем TCP соединение с httpbin.org и
отправляем строку запроса.
Код 18: Python
sock_obj = socket.socket(socket.AF_INET ,
socket.SOCK_STREAM)
sock_obj.connect (('httpbin.org', 80))
sock_obj.send("GET␣/ip␣HTTP /1.0nn")
19