Технопарк, весна, 2019 г.
Payment Request API — позволяет организовать оплату на сайте, используя нативный UI устройства, с указанием деталей карты, вариантами доставки, адресами и контактными данными — developers.google.com
// Поддерживаемые способы оплаты
const methodData = [{
supportedMethods: ['visa', 'mastercard'],
}];
// Детали платежа
const details = {
total: {
label: 'Покупка слона',
amount: { currency: 'RUB', value: '99.99' },
},
};
// Настройки
const options = { requestShipping: false, requestPayerEmail: true };
// Начинаем процесс
const paymentRequest = new PaymentRequest(methodData, details, options);
paymentRequest.show() // возвращает промис
.then(function(paymentResponse) {
console.log(paymentResponse);
// { methodName: 'mastercard',
// payerEmail: 'a.ostapenko@mail.ru',
// details: {
// cardNumber: '1234567890000000',
// cardholderName: 'OSTAPENKO ANATOLIY',
// cardSecurityCode: '000'
// }}
})
Web Bluetooth API — предоставляет методы взаимодействия браузера с удалёнными Bluetooth LE устройствами — developers.google.com
MediaRecorder API — позволяет получать доступ к камере и микрофону компьютера через JavaScript API — developers.google.com
navigator.mediaDevices.getUserMedia(constraints)
.then(function (stream) {
const recordedBlobs = [];
const mediaRecorder = new MediaRecorder(stream, {
mimeType: 'video/webm',
});
mediaRecorder.ondataavailable = function (event) {
recordedBlobs.push(event.data);
};
mediaRecorder.start(1000); // для сохранения видео
videoElement.srcObject = stream; // для вывода
// ...
mediaRecorder.stop();
});
WebRTC (RTCPeerConnection API) — API, предоставляемое браузером и позволяющее организовать P2P соединение и передачу данных напрямую между браузерами — codelabs.developers.google.com
Применения: медиа-стриминг, видео-общение, онлайн-игры, чаты, распределённые файловые системы, снижение нагрузки на сервера при передаче данных
Для установления peer-to-peer оба клиента должны знать адрес и порт, по которому его оппонент слушает и может получить входящие данные. Для передачи этой информации необходим вспомогательный сервер — signalling-сервер
Также кроме адресов и портов, клиенты должны договориться о параметрах устанавливаемой сессии. Например об использовании тех или иных кодеков и их параметров в случае аудио- и видеосвязи. Формат данных, описывающих всевозможные свойства соединения, называется SDP — Session Description Protocol
Для определения адреса клиента для WebRTC соединений используются дополнительные сервера STUN — Session Traversal Utilities for NAT. Задачу взаимодействия со STUN и задачу проверки доступности берет на себя ICE (Interactive Connectivity Establishment) фреймворк, встроенный в браузер
const iceServers = [{ url: 'stun:stun.l.google.com:19302' }];
const peerConnection = new RTCPeerConnection({iceServers}, constraints);
peerConnection.setConfiguration(configuration);
peerConnection.onicecandidate = function (event) {
// функция, с помощью которой RTCPeerConnection отправляет на сервер
// сообщения, которые сервер должен вернуть другому браузеру
};
peerConnection.onaddstream = function (event) {
// вызывается, когда удалённая сторона присылает новый stream с данными
};
const rtpSender = RTCPeerConnection.addTrack(track, stream...);
Credential Management API — позволяет сохранять и получать данные для аутентификации — developers.google.com
navigator.credentials.get({
password: true
}).then(function(credential) {
if (credential) {
// данные для аутентификации
console.log(`Username: ${credential.id}`);
console.log(`Password: ${credential.password}`);
}
});
HTTP-заголовок Feature-Policy — позволяет разрешать или запрещать браузеру выполнение определенных функций и API для улучшения приватности— developers.google.com
Feature-Policy: <feature> <allow list origin(s)>
accelerometer, ambient-light-sensor, autoplay, camera, document-domain, fullscreen, gyroscope, magnetometer, microphone, midi, payment, picture-in-picture, sync-xhr, usb, wake-lock, xr2
Feature-Policy: geolocation 'none'
document.featurePolicy.allowedFeatures(); // список разрешенных фич
// ["geolocation", "midi", "camera", "usb", "autoplay",...]
document.featurePolicy.allowsFeature('geolocation');
// true
// список разрешенных фич, независимо от того, действуют ли они
document.featurePolicy.features();
// ["geolocation", "midi", "camera", "usb", "autoplay",...]
const templateId = location.hash.match(/tplid=([^;&]*)/)[1];
// ...
document.head.innerHTML +=
`<link rel="stylesheet" href="./templates/${templateId}/style.css">`
// какие есть проблемы у этого кода?
https://example.com#tplid="><img src=x onerror=alert(1)>
Trusted-types — экспериментальное API, которое запрещает присвоение "небезопасных" строк в методах, которые подвержены XSS — developers.google.com
Content-Security-Policy: trusted-types *
const templateId = location.hash.match(/tplid=([^;&]*)/)[1];
// typeof templateId == "string"
document.head.innerHTML += templateId // Throws a TypeError.
const templatePolicy = TrustedTypes.createPolicy('template', {
createHTML: (templateId) => {
const tpl = templateId;
if (/^[0-9a-z-]$/.test(tpl)) { // magic!
return `<link rel="stylesheet"
href="./templates/${tpl}/style.css">`;
}
throw new TypeError();
}
});
const html =
templatePolicy.createHTML(location.hash.match(/tplid=([^;&]*)/)[1]);
// html instanceof TrustedHTML
document.head.innerHTML += html;
Page Lifecycle API — позволяет отслеживать жизненный цикл страницы и реагировать на его изменения— developers.google.com
document.addEventListener('freeze', (event) => {
// страница "заморожена"
});
document.addEventListener('resume', (event) => {
// страница "разморожена"
});
// Типы событий:
// focus, blur, visibilitychange, freeze,
// resume, pageshow, pagehide, beforeunload, unload
JavaScript
, Frontend
Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения
Дано:
Результат:
os
— информация о ОС, в которой запускается программаchild_process
— методы для запуска и управления дочерними процессамиassert
— набор простых методов тестированияprocess
— информация о текущем процессеnet
(dgram
) — создание tcp (и udp) серверов и клиентовhttp
(http2
, https
) — модули
для работы с http
fs
— работа с файловой системойpath
— методы для парсинга и работы с путями в file systemurl
— методы для парсинга и работы с url-адресамиcrypto
— модуль, предоставляющий криптографические методыstream
— модуль для потоковой обработки файловcluster
— модуль для запуска многопроцессорных приложенийnpm — менеджер пакетов, входящий в состав Node.js
express
— веб-серверkoa
— веб-серверbabel
— бабельwebpack
— вебпакpm2
— production-демон для запуска node.js приложенийtypescript
— компилятор typescriptdebug
— модуль для логирования node.js приложенийsocket.io
— библиотека для работы с веб-сокетамиChromium — веб-браузер с открытым исходным кодом, разрабатываемый сообществом The Chromium Authors, компанией Google и некоторыми другими компаниями
Несмотря на то, что NW.js существует дольше Electron, на Electron разработано гораздо больше популярных приложений
React Native — фреймворк для построения нативных мобильных приложений с использованием React
ReactXP —
новомоднаяподелка от Microsoft
Native Script — библиотека, позволяющая делать кросс-платформенные приложения, используя XML, CSS, JavaScript
PhoneGap (Apache Cordova) — платформа для разработки мобильных приложений, запускающихся в webview, и имеющих доступ к системным API устройства
import React, { Component } from 'react';
import { Text, View, ProgressBar } from 'react-native';
import { TheNativeComponent } from './your-native-code';
class SomeComponent extends Component {
render() {
return (<View>
<Text>Loading</Text>
<ProgressBar />
<TheNativeComponent />
</View>)
}
}
WebOS — веб-приложение, организующее платформу (операционную среду с набором готовых функций API) для выполнения других веб-приложений
Tizen — открытая операционная система на базе ядра Linux, предназначенная для широкого круга устройств, включая смартфоны, интернет-планшеты, компьютеры, автомобильные информационно-развлекательные системы, «умные» телевизоры и цифровые камеры
Chrome OS — ОС от компании Google. Главной особенностью является доминирование веб-приложений над обычными функциями ОС
Регламент
Регламент
Для нас действительно очень важна ваша обратная связь по итогам семестра. Пожалуйста, если вас не затруднит, напишите отзыв в ЛС, либо на почту, либо в общем чатике, либо менторам, либо в форме обратной связи на Портале Технопарка. Мы все отзывы читаем и принимаем во внимание.
Негативная обратная связь, обычно, более полезна. Не стесняйтесь сообщать о недочётах!
В конце семестра будут проводиться итоговые встречи в офисе по результатам 2 семестра Технопарка. Приходите на них обязательно.
Многих из вас мы будем рады увидеть в рядах наших менторов в следующем семестре!
Пишите Игорю Дружинину, если вы хотите стать одним из менторов и делиться своими знаниями и опытом со следующими поколениями студентов