Технопарк, весна, 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 TrustedHTMLdocument.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, FrontendNode или 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 семестра Технопарка. Приходите на них обязательно.
Многих из вас мы будем рады увидеть в рядах наших менторов в следующем семестре!
Пишите Игорю Дружинину, если вы хотите стать одним из менторов и делиться своими знаниями и опытом со следующими поколениями студентов