Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

API

С этим тегом используют

Программирование IT Python Искусственный интеллект ВКонтакте Разработка Нейронные сети Все
131 пост сначала свежее
23
Web.Study
Web.Study
2 года назад
Web-технологии

4 редких API, которые встречаются в дикой природе JavaScript⁠⁠

В продолжение к этой статье я хочу вам рассказать о еще 4 API, которые не очень популярны, но могут выручить вас в некоторых ситуациях


Наш канал для новичков во Front-end

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Beacon API


Beacon API позволяет отправлять на сервер асинхронные и неблокирующие запросы (методом POST), которые гарантированно завершаются до выгрузки страницы, в отличие от XMLHttpRequest или Fetch API.


Одним из основных вариантов использования Beacon API является логгирование активности пользователей или отправка аналитических данных на сервер.


Раньше для этого приходилось прибегать к таким уловкам, как обработка событий unload или beforeunload глобального объекта Window с помощью синхронного XMLHttpRequest, например:


const someData = {
a: 1,
b: 2,
};
// страница будет выгружена только после отправки данного запроса
window.addEventListener("beforeunload", () => {
const xhr = new XMLHttpRequest(); 
xhr.open("POST", "https://example.com/beacon");
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
const params = new URLSearchParams(Object.entries(someData)); xhr.send(params); 
});


Интерфейс


Beacon API расширяет свойство navigator методом sendBeacon, который имеет следующую сигнатуру:

navigator.sendBeacon(url: string | URL, data?: BodyInit | null)

- url — адрес сервера;

- data — опциональные данные для отправки, которые могут быть строкой, объектом, ArrayBuffer, Blob, DataView, FormData, TypedArray или URLSearchParams.


sendBeacon возвращает логическое значение (true или false) — индикатор постановки data в очередь для передачи.


Пример использования


Создаем шаблон проекта с помощью Yarn и Vite на чистом JavaScript:

# rare-web-apis - название проекта
# --template vanilla - используемый шаблон
yarn create vite rare-web-apis --template vanilla

Переходим в созданную директорию, устанавливаем зависимости и запускаем сервер для разработки:

cd rare-web-apis
yarn
yarn dev

Определяем в файле main.js следующий обработчик:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Событие visibilitychange объекта document (подробнее о нем можно почитать по ссылке, приведенной в начале статьи) является более надежным способом определения состояния видимости страницы, чем события unload или beforeunload. В обработчике при скрытии страницы, например, при переключении вкладки или сворачивании страницы, с помощью sendBeacon по адресу https://example.com/beacon отправляются некоторые данные в форме URLSearchParams.


Результат переключения вкладки:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост
4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Поддержка — 96.8%.



Clipboard API



Clipboard API позволяет выполнять асинхронные операции записи/чтения текстовых и других данных в/из системного буфера обмена, а также обрабатывать события copy, cut и paste (копирование, вырезка и вставка) буфера.

По причинам безопасности Clipboard API доступен только при условии, что:


- страница обслуживается по протоколу https или localhost;

- страница находится в активной вкладке браузера (не находится в фоновом режиме);

- операции записи/чтения инициализируются пользователем (например, с помощью нажатия кнопки).


Разрешение clipboard-write для записи данных предоставляется активной странице автоматически, а разрешение clipboard-read для чтения данных запрашивается у пользователя с помощью Permissions API.


Раньше для работы с содержимым редактируемой области использовался метод document.execCommand. Например, вот как выполнялась запись текста:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Интерфейс


Clipboard API расширяет свойство navigator интерфейсом Clipboard, экземпляры которого предоставляют следующие методы для работы с буфером:


- writeText(text: string) — для записи текста, принимает строку;

- readText() — для чтения текста, возвращает строку;

- write(data: ClipboardItem[]) — для записи данных, принимает массив объектов ClipboardItem (см. ниже);

- read() — для чтения данных, возвращает массив объектов ClipboardItem.


Поскольку речь идет об асинхронном интерфейсе, все названные методы возвращают промис, который разрешается данными или отклоняется с ошибкой.


ClipboardItem — это интерфейс, предназначенный для работы с нетекстовыми данными, который имеет следующую сигнатуру:

new ClipboardItem(
items: Record<string, string | Blob | PromiseLike<string | Blob>>,
options?: ClipboardItemOptions
)

- items — данные для записи в форме объектов, ключами которых являются MIME-типы, а значениями — строки, Blob или промисы, разрешающиеся строками или Blob;

- options — опциональные настройки (точнее, одна настройка — presentationStyle).


В действительности, ClipboardItem можно использовать также для работы с текстовыми данными, но есть один нюанс, о котором чуть позже.


Что касается событий copy, cut и paste, то их обработка обычно выполняется через свойство clipboardData события ClipboardEvent, которое содержит объект DataTransfer, предоставляющий следующие методы:


- setData(format: string, data: string) — для записи данных;

- getData(format: string) — для чтения данных;

- clearData() — для удаления данных и др.

Пример использования


Начнем с записи и чтения текста. Редактируем файл index.html следующим образом:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Получаем ссылки на DOM-элементы:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Определяем функцию копирования текста:


async function copyText() {
let textToCopy; 
// получаем выделение
const selectedText = getSelection().toString().trim(); 
// текстом для копирования является либо выделенный текст, либо содержимое `copyBox`
selectedText
? (textToCopy = selectedText)
: (textToCopy = copyBox.textContent.trim()); 
// если текст отсутствует
if (!textToCopy) {
logBox.textContent = "No text to copy"; 
return; 
}
try {
// записываем текст в буфер
await navigator.clipboard.writeText(textToCopy); 
logBox.textContent = "Copy success"; 
} catch (e) {
console.error(e); 
logBox.textContent = "Copy error"; 
}
}

Определяем функцию для вставки текста:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Наконец, регистрируем соответствующие обработчики:

copyBtn.addEventListener("click", copyText); 
pasteBtn.addEventListener("click", pasteText);

Обратите внимание: при первой вставке текста браузер запрашивает разрешение на чтение буфера. При отказе в разрешении выбрасывается исключение DOMException: Read permission denied.


Записать текстовые данные с помощью ClipboardItem можно следующим образом:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Обратите внимание: несмотря на то, что значением объекта ClipboardItem может быть строка (new ClipboardItem({ [type]: text })), при записи такого объекта в буфер выбрасывается исключение DOMException: Invalid Blob types.


Также обратите внимание, что при программной записи данных в случае, когда страница находится в фоновом режиме, выбрасывается исключение DOMException: Document is not focused.


Для извлечения данных из ClipboardItem используется метод getType:

const blob = await item.getType(type); 
const text = await blob.text(); 
console.log(text); // Text to copy

Добавим возможность копирования и вставки изображения, хранящегося на сервере.


Добавляем кнопки в index.html:

<div>
<button id="copy-img-btn">Copy remote image</button>
<button id="paste-img-btn">Paste remote image</button>
</div>

Определяем тип и функцию для копирования изображения:


const IMG_TYPE = "image/png";
async function copyRemoteImg() {
try {
const response = await fetch(
"https://images.unsplash.com/photo-1529788295308-1eace6f67388..."
);

// см. ниже
const blob = new Blob([await response.blob()], { type: IMG_TYPE });

// создаем элемент копирования

const item = new ClipboardItem({ [blob.type]: blob });
// записываем его в буфер
await navigator.clipboard.write([item]);

logBox.textContent = "Copy image success";
} catch (e) {
console.error(e);
logBox.textContent = "Copy image error";
}
}

Не уверен насчет других браузеров, но в Chrome наблюдается следующее:


- при преобразовании изображения из тела ответа в Blob с помощью response.blob() дефолтным типом становится image/jpeg (независимо от типа запрашиваемого изображения);

- при попытке записи такого Blob в буфер выбрасывается исключение DOMException: Type image/jpeg not supported on write.


Поэтому приходится выполнять двойное преобразование с помощью new Blob([await response.blob()], { type: IMG_TYPE });.


Определяем функцию для чтения данных из буфера и вставки изображения:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Итерация по item.types является безопасной, в отличие от прямого обращения к item.getType() — при отсутствии типа выбрасывается исключение DOMException: Failed to execute 'getType' on 'ClipboardItem': The type was not found.


Регистрируем соответствующие обработчики:

copyImgBtn.addEventListener("click", copyRemoteImg); pasteImgBtn.addEventListener("click", pasteRemoteImg);

Реализуем модификацию копируемых и вставляемых данных.


Редактируем index.html:


<textarea cols="30" rows="10" id="text-area">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, labore.</textarea>

Определяем функцию модификации копируемых данных:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Данная функция добавляет к копируемому тексту строку copied from MySite.com.


Определяем функцию модификации добавляемых данных:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Данная функция переводит добавляемый текст в верхний регистр.


Обратите внимание, что в обоих случаях отключается стандартная обработка события браузером с помощью e.preventDefault().


Регистрируем соответствующие обработчики:

textArea.addEventListener("copy", onCopy); textArea.addEventListener("paste", onPaste);

Поддержка — 95.08%.



Notifications API


Notifications API позволяет отображать системные уведомления. Особенность этих уведомлений состоит в том, что они находятся вне контекста окна браузера, поэтому могут отображаться даже если пользователь сменил вкладку или свернул окно. Данный интерфейс разработан таким образом, что совместим со встроенными механизмами уведомлений на большинстве платформ.


Интерфейс


Для запроса разрешения на показ уведомлений используется метод Notification.requestPermission. Данный метод возвращает промис, который разрешается или отклоняется со статусом разрешения. Статус разрешения содержится в свойстве Notification.permission и может иметь одно из трех значений:


- default — запрос на разрешение не выполнялся, уведомления не отображаются;

- granted — пользователь предоставил разрешение, уведомления отображаются;

- denied — пользователь отклонил запрос, уведомления не отображаются.


Для создания уведомления используется конструктор Notification, который имеет следующую сигнатуру:

new Notification(title: string, options?: NotificationOptions | undefined)

- title: string — заголовок уведомления;

- options — опциональный объект с настройками, такими как:

- body: string — тело уведомления;

- icon: string — ссылка на иконку;

- tag: string — тег, используемый для идентификации уведомления. Тег позволяет обновлять уведомления без их отображения, что может быть полезным при большом количестве уведомлений;

- image: string — ссылка на изображение;

- data: any — данные, ассоциированные с уведомлением и др.


Для закрытия уведомления используется метод notification.close.


Notifications API позволяет обрабатывать следующие события:


- show — отображение уведомления;

- close — закрытие уведомления;

- click — нажатие на уведомление;

- error.


Пример использования


В качестве примера реализуем отображение уведомлений о скрытии страницы. При клике по уведомлению в контейнер для логгов будет выводиться соответствующее сообщение.


Определяем в index.html кнопку для запроса разрешения на показ уведомлений:

<button id="notification-btn">Enable notifications</button>

Регистрируем соответствующий обработчик в main.js:

notificationBtn.addEventListener("click", () => { Notification.requestPermission();
});
Определяем переменные для уведомления и идентификатора таймера, а также функцию для создания уведомления:
4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Несмотря на то, что большинство браузеров автоматически уничтожают уведомления по прошествии некоторого времени (около 4 сек), рекомендуется делать это явно.


Расширяем обработку изменения состояния видимости страницы:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Включаем уведомления:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Переключаем вкладку:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

При клике по уведомлению на странице приложения появляется сообщение Notification clicked.


Обратите внимание: при нахождении в другой вкладке уведомление уничтожается через 3 сек, а при возвращении в приложение — сразу.


Поддержка оставляет желать лучшего — 79.86%.



Performance API


Performance API позволяет измерять задержку в приложении на стороне клиента. Интерфейсы Performance (интерфейсы производительности) считаются высокоточными (high resolution), поскольку имеют точность, равную тысячным миллисекунды (точность зависит от ограничений аппаратного или программного обеспечения). Данные интерфейсы используются для вычисления частоты кадров (например, в анимации) и бенчмаркинге (например, для измерения времени загрузки ресурса).


Поскольку системные часы (system clock) платформы подвергаются различным корректировкам (таким как коррекция времени по NTP), интерфейсы Performance поддерживают монотонные часы (monotonic clock), т.е. время, которое все время увеличивается. Для этого Performance API определяет тип DOMHighResTimeStamp вместо использования интерфейса Date.now().


DOMHighResTimeStamp представляет высокоточную отметку времени (point in time). Данный тип является double и используется интерфейсами производительности. Значение DOMHighResTimeStamp может быть дискретной отметкой времени или разницей между двумя такими отметками.


Единицей DOMHighResTimeStamp является миллисекунда с точностью до 5 микросекунд. Если браузер не может обеспечить такую точность, допускается представление значения в миллисекундах с точностью до миллисекунды.


Интерфейс


Основным методом, предоставляемым Performance API, является метод now, который возвращает DOMHighResTimeStamp, значение которого зависит от времени создания контекста браузера или воркера (worker).

Кроме этого, рассматриваемый интерфейс содержит два основных свойства:


- timing — возвращает объект PerformanceTiming, содержащий такую информацию, как время начала навигации, время начала и завершения перенаправлений, время начала и завершения ответов и т.д.;

- navigation — возвращает объект PerformanceNavigation, представляющий тип навигации, происходящей в текущем контексте браузера, такой как переход к странице из истории, по ссылке и т.п.


Пример использования


В качестве примера реализуем функцию для измерения времени выполнения другой функции.


Редактируем main.js:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Определяем функцию вычисления факториала числа и измеряем время ее выполнения:

const getFactorial = (n) => (n <= 1 ? 1 : n * getFactorial(n - 1)); howLong(getFactorial)(12);

Определяем функцию получения данных из сети и измеряем время ее выполнения:

const fetchSomething = (url) => fetch(url).then((r) => r.json()); howLong(fetchSomething)("https://jsonplaceholder.typicode.com/users?_limit=10");

Результат:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Поддержка — 97.17%.



Иии...


На этом все, надеюсь ты узнал что-то новое и применишь это на практике. Иначе зачем я писал этот и прошлый пост

Показать полностью 17
[моё] Программирование IT Javascript API Frontend Программист Длиннопост
1
24
Web.Study
Web.Study
2 года назад
Web-технологии

4 малоизвестных, но не маловажных API для Javascript⁠⁠

Недавно я копался на хабре и нашел подборку полезных API, которые при этом не мейнстримные. Решил поделиться ими с вами, чтобы вы их юзали на практике (а грех их не заюзать).


Наш канал для новичков во fron-end, где мы рассказываем не только о JS

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Page Visibility API


Данный интерфейс позволяет определять, когда пользователь покидает страницу. Точнее, он вызывает событие при каждом изменении состояния видимости (visibility status) страницы, например, когда пользователь сворачивает/разворачивает окно, переходит на другую вкладку и т.д.


Раньше для этого приходилось прибегать к таким уловкам, как обработка событий blur и focus. Соответствующий код выглядел так:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Приведенный код работает, но не совсем так, как ожидается. Поскольку событие blur вызывается, когда страница теряет фокус, оно может возникнуть, когда пользователь нажимает на поиск, диалоговое окно (alert), консоль или границу окна. События blur и focus сообщают нам о том, что страница активна, но не о том, видим или скрыт ее контент.


Случаи использования


Page Visibility API может использоваться для предотвращения выполнения операций, которые имеют значение, только когда пользователь видит страницу, или для выполнения фоновых операций. Еще несколько кейсов:


• приостановка воспроизведения видео, каруселей изображений (автослайдеров) или анимации, когда пользователь покидает страницу;

• если на странице отображаются данные в реальном времени, нет смысла их обновлять, если пользователь покинул страницу;

• отправка аналитических данных о действиях пользователя.


Интерфейс


Page Visibility API предоставляет 2 свойства и одно событие для получения доступа к состоянию видимости страницы:


• document.hidden — доступное только для чтения глобальное свойство. Признано устаревшим. Если страница скрыта, возвращается true, иначе — false;

• document.visibilityState — обновленная версия document.hidden. Возвращает 4 возможных значения:
• visible — страница видима или, если быть точнее, страница не свернута и находится в текущей вкладке;

• hidden — страница скрыта;

• prerender — начальное состояние видимой страницы: предварительный рендеринг;

• unloaded — страница выгружена из памяти;

• visibilitychange — событие объекта document, возникающее при изменении visibilityState:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Пример использования


В качестве примера рассмотрим приостановку видео и прекращение получения ресурсов из API, когда пользователь покидает страницу. Создаем шаблон проекта с помощью Vite и Yarn:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Переходим в созданную директорию, устанавливаем зависимости и запускаем сервер для разработки:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Приложение доступно по адресу http://localhost:3000.


Удаляем шаблонный код из файла main.js и добавляем элемент video в файле index.html:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Возвращаемся к main.js. Добавляем обработчик события visibilitychange объекта document:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Попробуйте свернуть/развернуть окно или переключиться на другую вкладку, чтобы увидеть изменения состояния видимости страницы.


Получаем ссылку на элемент video и управляем воспроизведением видео в зависимости от видимости страницы:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Прим. пер.: приведенный код работать не будет: получаем ошибку Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.. Это объясняется тем, что вызов video.play() при изменении состояния видимости страницы на visible равносилен наличию у элемента video атрибута autoplay. Современные браузеры допускают автоматическое (без участия пользователя) воспроизведение видео только в режиме без звука. Соответственно, для того, чтобы код работал, как ожидается, элементу video необходимо добавить атрибут muted.


Когда пользователь покидает страницу, воспроизведение видео приостанавливается. Когда пользователь возвращается на страницу, воспроизведение видео продолжается.

Теперь рассмотрим пример прекращения выполнения запросов к API. Для этого напишем функцию, запрашивающую цитату из quotable.io. Добавляем в index.html элемент div для хранения цитаты:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Определяем в main.js функцию для получения произвольной цитаты с помощью Fetch API:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Приведенный код работает, но функция getQuote вызывается только один раз. Обернем ее в setInterval с интервалом в 10 секунд:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Если пользователь свернет окно или перейдет на другую вкладку, запросы все равно будут отправляться каждые 10 секунд. Давайте это исправим:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Теперь запросы будут выполняться только при условии, что страница находится в видимом состоянии.


Поддержка — 98.24%.


Web Share API


Web Share API предоставляет разработчикам доступ к встроенному механизму совместного использования (native sharing mechanism) операционной системы, что особенно актуально для мобильных телефонов. Данный интерфейс позволяет делиться текстом, ссылками и файлами без создания собственного механизма или использования сторонних решений.


Случаи использования


Web Share API позволяет делиться содержимым страницы в соцсетях или копировать его в буфер обмена пользователя.


Интерфейс


Web Share API предоставляет 2 метода:


• navigator.canShare(data): принимает данные для совместного использования и возвращает логическое значение — индикатор того, можно ли этими данными поделиться;

• navigator.share(data): возвращает промис, который разрешается в случае успешного шаринга (sharing) данных. Данный метод вызывает нативный механизм и принимает данные для шаринга. Обратите внимание: этот метод может вызываться только в ответ на действие пользователя (нажатие кнопки, переход по ссылке и т.п.) (требуется кратковременная активация). data — это объект со следующими свойствами:

• url — ссылка для шаринга;

• text — текст;

• title — заголовок;

• files — массив объектов File.



Пример использования


Возьмем последний пример и добавим возможность делиться цитатой. Добавляем соответствующую кнопку в index.html:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

В main.js получаем ссылку на эту кнопку и определяем функцию для шаринга данных:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Нам также потребуется глобальная переменная для хранения содержимого текущей цитаты:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Определяем обработчик нажатия кнопки:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Обратите внимание: Web Share API работает только в безопасном окружении. Это означает, что страница должна обслуживаться по протоколу https или wss.


Поддержка — 89.82%.



Broadcast Channel API


Broadcast Channel API позволяет контекстам браузера (browser contexts) обмениваться данными друг с другом. К браузерным контекстам относятся такие элементы, как окно, вкладка, iframe и т.д. По причинам безопасности контексты, обменивающиеся данными, должны принадлежать одному источнику (same origin). Один источник означает одинаковый протокол, домен и порт.


Случаи использования


Broadcast Channel API обычно используется для синхронизации окон и вкладок браузера для улучшения пользовательского опыта или повышения безопасности. Он также может применяться для уведомления одного контекста о завершении процесса в другом контексте. Другие примеры:


• авторизация пользователя во всех вкладках;

• отображение загруженного ресурса во всех вкладках;

• запуск сервис-воркера для выполнения фоновой задачи.


Интерфейс


Broadcast Channel API предоставляет объект BroadcastChannel, позволяющий обмениваться сообщениями с другими контекстами. Конструктор этого объекта принимает единственный аргумент: строку — идентификатор канала (channel identifier):

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

BroadcastChannel предоставляет 2 метода:


• broadcastChannel.postMessage(message): позволяет отправлять сообщения всем подключенным контекстам. В качестве аргумента данный метод принимает любой тип данных:
4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

• broadcastChannel.close(): закрываем канал коммуникации, что позволяет браузеру выполнить сборку мусора.


При получении сообщения возникает событие message. Это событие содержит свойство data с отправленными данными, а также другие свойства, позволяющие идентифицировать отправителя, такие как origin, lastEventId, source и ports:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Пример использования


Возьмем последний пример, создадим новый контекст и добавим возможность обмена цитатами между существующим и новым контекстами.

Создаем директорию new-context в корне проекта. Создаем в ней файл index.html следующего содержания:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Создаем файл new-context/main.js.


Получаем ссылку на div и создаем новый канал коммуникации:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Добавляем обработчик события message:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Создаем канал в основном main.js и редактируем функцию getQuote:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Прим. пер.: для того, чтобы запустить данный пример локально, необходимо сделать следующее:


• в корне проекта создаем файл vite.config.js следующего содержания:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

• запускаем сервер для разработки с помощью команды yarn dev;

• открываем 2 вкладки:
• по адресу http://127.0.0.1:5173/index.html;

• по адресу http://127.0.0.1:5173/new-context/index.html.


Поддержка — 92.3%.



Internationalization API


Шпаргалка по Internationalization API


При разработке приложения иногда требуется переводить его содержимое на другие языки. Однако простого перевода часто оказывается недостаточно, поскольку такие вещи, как даты, числа, единицы измерения и др. могут различаться в разных странах. Неправильный перевод таких вещей может привести к плохому пользовательскому опыту.


Предположим, что мы хотим отобразить на странице "10 ноября 2022 года" как "11/10/22". Эта дата в разных странах будет выглядеть по-разному:


• 11/10/22 или ММ/ДД/ГГ в США;

• 10/11/22 в Европе и Латинской Америке;

• 22/11/10 в Японии, Китае и Канаде.


Здесь на помощь приходит Internationalization API (или I18n). Данный интерфейс позволяет решить несколько групп задач, связанных с интернационализацией и локализацией, но в этой статье мы не будем погружаться в него слишком глубоко.


Интерфейс


Для определения страны пользователя в I18n используется идентификатор локали (или просто локаль) (locale identifier, locale). Локаль — это строка, представляющая страну, регион, диалект и другие характеристики. Если точнее, локаль — это строка, состоящая из подтегов (subtags), разделенных дефисом, например:


• zh — китайский (язык);

• zh-Hant — китайский (язык), традиционные иероглифы (сценарий — script);

• zh-Hang-TW — китайский (язык), традиционные иероглифы (сценарий), используемые на Тайване (регион).


Полный список подтегов можно найти в этом RFC.


I18n предоставляет объект Intl, который, в свою очередь, предоставляет несколько специальных конструкторов для работы с чувствительными к языку данными, наиболее интересными из которых являются следующие:


• Intl.DateTimeFormat — форматирование даты и времени;

• Intl.DisplayNames — форматирование названий языков, регионов и сценариев;

• Intl.Locale — генерация и манипуляция идентификаторами локалей;

• Intl.NumberFormat — форматирование чисел;

• Intl.RelativeTimeFormat — форматирование относительного времени (завтра, 2 дня назад и т.п.).


Пример использования


В качестве примера рассмотрим использование конструктора Intl.DateTimeFormat для форматирование свойства dateAdded цитат. Данный конструктор принимает 2 аргумента: строку locale для определения правил форматирование даты и объект options для кастомизации форматирования.


Прим. пер.: в качестве первого аргумента Intl.DateTimeFormat также принимает массив локалей. Например, для установки дефолтной локали пользователя в конструктор передается пустой массив ([]).


Объект, возвращаемый Intl.DateTimeFormat, предоставляет метод format, который принимает объект Date с датой для форматирования и объект options для кастомизации отображения форматированной даты:

4 малоизвестных, но не маловажных API для Javascript Программирование, IT, Javascript, API, Frontend, Длиннопост

Обратите внимание: мы установили настройку timeZone в значение UTC для того, чтобы при форматировании даты не учитывалось локальное время пользователя.


Определяем в main.js функцию для форматирования даты:

function formatDate(dateString) {
const date = new Date(dateString);
const dateTime = new Intl.DateTimeFormat([], { timeZone: "UTC" });
return dateTime.format(date);
}

Вызываем эту функцию внутри функции getQuote для форматирования свойства dateAdded:

const getQuote = async () => {
if (document.visibilityState !== "visible") return;
try {
// ...
const parsedQuote = `<q>${content}</q> <br> <p>- ${author}</p> <br> <p>Added on ${formatDate(
dateAdded
)}</p>`;
// ...
} catch (e) {
console.error(e); 
}
};

Поддержка — 97.74%.


Прим. пер.: на днях использовал Intl.DateTimeFormat для отображения даты и времени в коротком формате:

const getDateWithHoursAndMinutes = (date) => 
new Intl.DateTimeFormat([], {
dateStyle: "short",
timeStyle: "short",
}).format(date); 
console.log(getDateWithHoursAndMinutes(new Date())); // 23.09.2022, 21:30

Надеюсь, что вы, как и я, узнали что-то новое и не зря потратили время.

Благодарю за внимание и happy coding!

Показать полностью 25
[моё] Программирование IT Javascript API Frontend Длиннопост
3
9
Readluiforwin
Readluiforwin
2 года назад
QA Rules

Что такое web, mobile, api тестирование⁠⁠

Всем привет!

Очень часто можно услышать такие слова как web-тестирование, mobile-тестирование, api-тестирование.

Попробуем разобраться в этом простым языком.


Если говорить кратко, то web-тестирование - это проверка работы функционала на стороне веб-приложения, иначе говоря, что страницы, которые вы видите через браузер корректно отображают данные, которые приходят с сервера, а также логика на странице отрабатывает верно.


Представим, что у нас есть сайт, на котором есть форма, где мы хотим отобразить самого лучше пользователя, а также у нас есть база всех пользователей и сервер, который по своей логике считает самого-лучшего-пользователя и отправляет веб-приложению.


В данном случае в веб-части проверять мы будем именно то, что страница корректно отображает то, что приходит в ответе от сервера

Тут мы плавно переходим к api-тестированию (в нашем случае http-rest)


Целью api-тестирования является проверка логики работы сервера. Что же такое api? Простыми словами - это язык общения сервисов и приложений. Логика здесь такая: чтобы отобразить информацию, которая хранится на сервере, веб-приложение отправляет запрос на этот сервер по определенному пути, конечной точкой которого является эндпоинт (например, https://www.youtube.com/watch?v=dQw4w9WgXcQ, здесь эндпоинтом является /watch). Сервер же, в зависимости от эндпоина выполняет ту или иную функцию, и отдает ответ. Если по запрашиваемому приложением эндпоинту на сервере нет заранее запланированного ответа - вернется код 404 (например, https://www.youtube.com/watch12323).

Каждый ответ сервера можно разделить на условно 3 мажорные части: headers, status, body (но не только из них)

В headers содержаться заголовки ответа, например такой как Content-Type который говорит, какого типа будет содержаться контент в ответе.

В body помещается основная информация, в примере выше это будет самый лучший сотрудник: например, его ник, или имя-фамилия, ссылка на профиль.
В status содержится код ответа, который состоит из 3-х значного числа. По первой цифре которого можно понять что произошло с нашим запросом, всего есть 5 типов кодов, но самыми часто-встречаемыми являются: 2xx - запрос выполнен корректно, 4xx - ошибки на клиенте (например 404 - запрос по эндпоинту, которого не существует на сервере), 5хх - ошибки на сервере, например, при определенной комбинации входящих данных, сервер может вести себя некорректно.

Целью QA в данном случае будет являться проверить что все api ведут себя так, как было описано в спецификации к ним и/или по общепринятым стандартам (например, если api на корректный запрос присылает код 4xx - это некорректное поведение).

То есть отправили запрос с определенный набором параметров - проверили, что ответ соответствует ожиданию.


Mobile-тестирование - это проверка того, как работает мобильное приложение. Можно провести параллель с веб-тестирование, только клиентом в данном случае будет приложение, работающее под мобильным устройством. Тут есть (и очень много) подводные камни, потому что важной частью любого приложения является удобство использования (кнопка, требующая частого нажатия в левом верхнем углу приложения точно не будет отличной идеей - сами попробуйте туда дотянуться), либо, к примеру, такая вещь как обновление приложения - у разных пользователей могут оказаться разные версии приложения, но все они должны работать так, как изначально задумывалось.

На примере postman, запрос к google.com/ будет выглядеть так

Что такое web, mobile, api тестирование IT, Программирование, Полезное, Обучение, QA, Тестирование, Тестирование по, Мобильное тестирование, API, Длиннопост
Показать полностью 1
[моё] IT Программирование Полезное Обучение QA Тестирование Тестирование по Мобильное тестирование API Длиннопост
0
sbis.tensor
sbis.tensor
2 года назад

Как мы роботизировали документооборот ВкусВилла⁠⁠

Как мы роботизировали документооборот ВкусВилла Бизнес, Торговля, Программирование, Малый бизнес, Российское производство, Сбис, ЭДО, Электронная подпись, API, 1С

ВкусВилл — бренд полезных продуктов для здорового питания, сеть магазинов и сервис бесплатной доставки.

В цифрах ВВ — это:

● 29 760 сотрудников

● Более 1500 поставщиков

● 1300+ магазинов и 120 + дарксторов по всей России

Какие задачи решали

ВкусВилл ведет учет в 1C, а внутренний документооборот — в Synerdocs. Когда Synerdocs ушел с рынка, ВкусВиллу потребовалось срочно найти аналогичное решение. Обратились в Тензор. И в кратчайшие сроки наши инженеры не только внедрили ЭДО, но и роботизировали его — фактически разработали в СБИС модифицированную RPA-технологию.

Что такое роботизация и как мы это сделали

У ВкусВилла большие объемы внутренних документов — 30 000 в сутки, и их количество будет только расти. Большой объем документов — это внутреннее перемещение товаров между складами и магазинами. И 14 000 подписантов-сотрудников, ответственных за перемещения. Они должны подписывать накладную, когда товар, например, с одного склада перевозится в магазин. Но при таких объемах сложно контролировать весь процесс.


Выход был найден — роботизировать подписание документов, т.е. сделать так, чтобы вместо сотрудника подписание выполнял робот. Такая схема юридически законна и для системы действия робота ничем не отличаются от действий человека. Конечно, сотрудник дает письменное согласие на подписание документов от его лица и без его участия. Сам он не имеет доступа в систему. Бизнес-процесс выглядит так:


1. Отправитель формирует форму с необходимыми подписантами в 1С. Далее они поступают в СБИС по API.

2. Робот в цикле делает все сам: методами API создает документ и выполняет подписание за сотрудников.

3. Затем полностью подписанный документ со штампом ЭП выгружается в 1С и перемещается в архив.


Т.е. мы прописали робота-исполнителя команд «загрузи — подпиши одним сотрудником — подпиши другим — выгрузи». Для скорости обработки документов отправитель в 1С запускает сразу несколько очередей запросов параллельно. Такая схема позволяет вносить изменения в автоматизированные бизнес-процессы и добавлять новые в кратчайшие сроки.

Итоги и цифры

● Реализовали подписание 30 000 документов в сутки.

● Клиент использует НЭП вместо ПЭП — это дает большую юридическую защиту.

● Выполнили все работы за 1,5 месяца. Точно уложились в сроки по договору.

Показать полностью
[моё] Бизнес Торговля Программирование Малый бизнес Российское производство Сбис ЭДО Электронная подпись API 1С
9
11
eaborovkov
eaborovkov
2 года назад
IT News

Война Meta* против поставщиков серого API WhatsApp. Или что делать, если вы хотели перехитрить корпорацию⁠⁠

Спустя три года после выхода WABA (WhatsApp Business Api), разработчикам серых API начали прилетать иски и угрозы. Разбираемся что делать, если у вас есть действующий WhatsApp бот или вы поставщик серого API для WhatsApp. Инсайдерская информация, советы и прогнозы на будущее.

Война Meta* против поставщиков серого API WhatsApp. Или что делать, если вы хотели перехитрить корпорацию WhatsApp, API, Чат-бот, Бизнес, Интеграция, Viber, Telegram, Facebook, ВКонтакте, Meta, Длиннопост

Предыстория


WhatsApp появился в 2009 году. Белое официальное API (WABA) для него вышло только в 2018. И очевидно, что почти 10 лет миллионная аудитория мессенджера не могла оставаться без внимания. Предприниматели хотели взаимодействовать со своими клиентами в том мессенджере, который всем привычен.


Так появились поставщики серого API для WhatsApp.


Не смотря на то, что они хорошо работали (и зарабатывали) вплоть до 2022 года, в Facebook* (ныне Meta*) не сильно переживали про их существование. Иногда, со стороны Meta* были какие-то письма и попытки запугать серых разработчиков. Но, в большинстве своем, эти угрозы ничем не заканчивались. До суда не доходило.


В 2019 году, с выходом белого API, в сторону WhatsApp посмотрели и крупные компании, которые до этого неохотно шли на сотрудничество с серыми решениями. Meta* брала деньги за каждое отправленное сообщение и по началу продавала только крупным покупателям с большими чеками. К 2022 году цены снизились, условия упростились, появилось больше партнеров и, наконец, даже небольшие компании могут себе позволить подключиться к WABA.

Рынок поменялся, но не полностью


В какой-то момент, в 2022 году, Meta* наконец решила давить серых поставщиков. То ли пришло осознание, что серое API до сих пор дешевле (там нет оплаты за каждое сообщение), то ли просто решили остаться единственными на этом поприще — не известно.


Факт остается фактом. В начале 2022 года, компаниям поставщикам серого API опять начали приходить письма от Meta*. Там были не абстрактные обещания обратиться в суд, а уже весьма конкретные повестки. Многие даже выходили на диалог с юристами Meta*, где объяснялось, что-то в стиле “мы все равно вас задавим, поэтому лучше по-хорошему отползите в сторону”.


Мы, в Botcreators занимаемся разработкой чат-ботов уже более 4 лет. И, в какой-то момент, к нам обратился клиент, который хотел чат-бота для WhatsApp. В поисках способов закрыть ему задачу, мы познакомились с Никитой К. Именно он и поделился своим взглядом на эти события.

Никита на тот момент был одним из сооснователей одного из крупнейших поставщиков серого API для WhatsApp. Полностью его имя и компанию мы не называем по просьбе самого Никиты.

Далее слова Никиты:


Мы начали делать наше API в 2015 году, когда про WABA (WhatsApp Business Api) и близко не было речи. Ее (WABA) презентовали в 2018 году. А более-менее доступной она стала в 2020.
Долгое время мы держались среди лидеров подобных решений благодаря широкой функциональности нашей реализации. С Facebook* мы долго не пересекались.
Далее, в 2021 году, мы получили письмо с претензиями от юристов головного офиса уже компании Meta*. После общения с юристами, мы поняли, нам нужно переходить на WABA, а в самом плохом случае за вменяемый нам Copyright Infringement в США даже может грозить реальный срок до 5 лет.
Мы любили наш продукт, но выбора нам не оставили. Никакие условия и детали переговоров я не могу озвучивать. Но обернуться могло все сильно хуже. Нам оставили единственный выход: переход на WABA.
Какие выводы я могу сделать сейчас? Во-первых, Meta* основательно берется за этот растущий рынок. И сейчас все серые игроки на мушке. Нам точно известно, что списки серых провайдеров у них есть. Во-вторых, есть компании, которые за лояльность Meta* готовы приносить им информацию о неофициальных провайдерах. В-третьих, советую всем читать все обновления правил пользования WhatsApp и законодательство в области Copyright infringement, потому что многим кажется, что они ничего не нарушают.
Технически, неофициальное API может существовать дальше, но только в условии реально серого бизнеса, но Meta* будет давить юридически и технически. И я не уверен, что игра с такой корпорацией стоит свеч.

Конец цитаты.

Почему выбирали и выбирают WhatsApp, а не Telegram, VK или Viber?


Все просто: в WhatsApp можно чтобы бот “писал первым”. С этим есть куча нюансов в виде блокировок номера, ограничение на количество отправляемых сообщений и т.д. Но “ключевая особенность” именно в холодной рассылке.


В Viber тоже можно писать первым. Но это будет бизнес аккаунт, сообщения от которого будут лежать в отдельной вкладке. С этим имеет смысл заморачиваться только представителям крупных брендов. Ибо надо проходить согласования и заполнять информацию о компании. Небольшие предприятия или не хотят заморачиваться, или ждать модерации.


В Telegram такая возможность появилась сравнительно недавно. И то, совсем “в холодную” чат-боты писать по прежнему не могут (надеюсь и не смогут). Чтобы бот написал якобы первым, надо, чтобы пользователь подписался на канал и как бы одновременно фоном стартанул бота (а то и не одного). А бот сразу удалил сообщение о старте и пропал в списке чатов, чтобы у пользователя в будущем сложилось ощущение, что бот ему пишет “в холодную”. И я сейчас не говорю про холодную рассылку с помощью Telegram API. Я про Telegram Bot API. Кому интересно подробнее, у нас была статья на эту тему.


Про VK, думаю, пояснять не надо. Чтобы бот мог тебе что-либо прислать, ты должен или на группу подписаться или сам начать с ним диалог. Исключение, разве что, только всякие hh.ru или Cdek, которые шлют уведомление в VK даже если ты на них не подписывался. У них договоры с VK.


Вот и получается, что когда вы сходили в салон красоты, то просьба об оценке визита вам приходит именно в WhatsApp. А не в Viber или Telegram или VK. При том, что записывались вы не через WhatsApp.

Будущее Meta* и WhatsApp Business API


В период с 2009 по 2022 год многие себе успели заказать чат-ботов для WhatsApp, либо слепить их на конструкторах. Если вы из их числа, то вот, что вам надо понять или выяснить:


- Как работает ваша интеграция? Через серое API или через белое? Спросите вашего поставщика услуг или коллег, кто этим занимался.


- WABA и серые решения устроены принципиально по разному. Если у Meta* интеграция сделана понятно где (в ядре), то серые поставщики API делают интеграцию в обход, часто через жуткие костыли. Поэтому переехать по щелчку пальцев с серого решения на белое, скорее всего, не получится.


- Скоро не останется серых поставщиков. Даже в условиях нашего рынка. Хотя бы потому, что им закроют техническую возможность поддерживать свои продукты. Ну или потому, что в Meta* очень плотно следят за всеми, кто пытается создать что-либо на базе их продуктов. И это инсайд, а не конспирология. Думать, что именно про вас в Meta* еще не слышали — большое заблуждение. Бояться их? Решать вам.


- Если вы собираетесь заказать себе WhatsApp бота, то внимательно смотрите, что вам предлагают. Цены на белое API очень разные у разных поставщиков. Публиковать я их тут не буду. Из понятных метрик скажу лишь, что у белого API не бывает бесплатной отправки сообщений. Они тарифицируют каждое отправленное сообщение.


Если вам предлагают сделать бота на WABA, то просите документы, подтверждающие, что они действительно используют WABA, а не делают вид, что используют.


Кстати, за 2021 и 2022 год цены на WABA снижаются. Рынок уплотняется и сама Meta* тоже снижает планку для провайдеров. Глядишь, к 2024 году цены будут адекватными и для микро бизнеса.

*Meta (ранее Facebook) запрещенная в РФ организация.

А еще у нас есть канал про чат-ботов https://t.me/botcreatorsru

Показать полностью 1
[моё] WhatsApp API Чат-бот Бизнес Интеграция Viber Telegram Facebook ВКонтакте Meta Длиннопост
3
zavlast
zavlast
2 года назад

Сила пикабу!⁠⁠

Ребят, помогите пожалуйста с ключом API GOOGLE translation, у меня сайт отслеживания грузит через api забугорного сайта на английском языке, а в модуле можно динамически переводить но только через google. В день максимум запросов 30. Российские карты не принимает билинг.
Без рейтинга.

[моё] API Google Санкции Без рейтинга Помощь Текст
2
552
Immortalique
Immortalique
2 года назад
Типичный программист

Хэй, Джейсон!⁠⁠

Хэй, Джейсон! Программирование, Json, IT юмор, Программист, AJAX, API, Юмор, Джейсон Вурхис, Картинка с текстом
Показать полностью 1
[моё] Программирование Json IT юмор Программист AJAX API Юмор Джейсон Вурхис Картинка с текстом
13

Попробовать мобильный офис

Перейти
Партнёрский материал Реклама
specials
specials

Мобильный офис до 100 тысяч рублей⁠⁠

Ноутбуки используют не только для работы: на них смотрят сериалы, редактируют фото, запускают игры и монтируют ролики. Поэтому теперь требования к устройству такие: быть легким для дороги, надежным для горящих дедлайнов и стильным, чтобы не прятать в переговорке. А еще — легко работать в связке с другими гаджетами.

Протестировали TECNO MEGABOOK K15S вместе со смартфоном TECNO CAMON 40 и наушниками TECNO в рабочих и бытовых сценариях от Zoom-звонков до перелета, а теперь рассказываем, как себя показала техника.

Первое впечатление от дизайна ноутбука

Первое, что заметно — это вес. При диагонали 15,6 дюйма и полностью металлическом корпусе K15S весит всего 1,7 кг. Это примерно на 15% меньше, чем аналоги. Устройство не обременяет ни в офисе, ни в такси. Ноутбук поместился в стандартный городской рюкзак, было удобно достать его в кафе за завтраком и по дороге в такси, чтобы быстро отработать клиентские правки.

1/4

Дизайн сдержанный, без ярких акцентов, с матовой поверхностью. Правда, на ней остаются следы от рук. Так что если приходится постоянно открывать ноутбук в присутствии клиентов или партнеров, лучше купить прозрачный кейс. Визуально и тактильно устройство ощущается надежно: не выскальзывает и не двигается по столу, благодаря специальным резиновым накладкам на задней части.

Шарнир работает мягко: чтобы открыть крышку даже одной рукой, не нужно придерживать корпус. Чтобы показать коллеге или клиенту презентацию, достаточно раскрыть экран на 180°. Это удобно и для работы лежа, и для подставок, которые требуют определенного угла обзора.

Также отметим 9 портов: USB-A, USB-C, HDMI, слот для карты памяти — можно забыть о переходниках.

В TECNO MEGABOOK K15S предустановлен Windows 11. Ноутбук готов к работе сразу после включения. Никаких лишних установок и обновлений. Все настроено и оптимизировано для вашей многозадачности.

Экран: яркая картинка и комфорт ночью

Экран — 15,6 дюйма, IPS-матрица с разрешением Full HD. Углы обзора отличные: изображение остается четким, даже если смотреть сбоку, цвета не искажаются. Есть антибликовое покрытие. Тестировали ноутбук при разном освещении: можно спокойно работать у окна. Когда солнце бьет прямо в экран, текст по-прежнему остается читаемым, картинки не искажаются. Это редкость в бюджетных моделях.

1/2

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

Стеклокерамический крупный тачпад — 15 см. Он не залипает, не промахивается, срабатывает с первого касания. Не возникает дискомфорта, даже если несколько часов редактировать документы без мышки. После перехода с других устройств немного непривычно, что тачпад работает в двух направлениях: нижняя часть отзывается нажатием, верхняя — касанием.

В кнопку питания встроен сканер отпечатка пальцев. К нему можно быстро привыкнуть, особенно если сидишь в опенспейсе или работаешь в дороге. Один легкий тап пускает в систему даже с мокрыми руками. Безопасно, удобно и не нужно постоянно вводить пароли.

Производительность: рендерим видео, открываем вкладки

Ноутбук работает на AMD Ryzen 7 5825U (опционально можно выбрать версию техники Intel Core i5-13420H). Восьмиядерный AMD с поддержкой 16 потоков подходит для ресурсоемких операций вроде рендеринга или работы с большими массивами данных. Встроенная графика Radeon справляется с редактированием видео в Full HD или играми.

1/4

Во время монтажа 30-минутного ролика в DaVinci Resolve и параллельной работе в Photoshop с несколькими большими PSD-файлами система сохраняла стабильность. Не было ни зависаний, ни заметного падения производительности. Ноутбук уверенно держит в фоне 10 приложений одновременно. Если запущены браузер с 20 вкладками, видеозвонок в Telegram, Excel с объемной таблицей и софт для монтажа, система не тормозит и не перегревается. Переход между окнами остается плавным, ничего не «проседает», даже при одновременном скачивании файлов и редактировании видео.

Базовая комплектация включает 16 ГБ оперативной памяти в двух слотах. При необходимости можно легко увеличить этот показатель до 32 ГБ, заменив стандартные модули на более емкие. Помимо установленного SSD на 1 ТБ предусмотрен дополнительный слот, поддерживающий диски объемом до 2 ТБ.

Чтобы во время нагрузки системы охлаждения не выходили из строя, в ноутбук встроен эффективный вентилятор, способный рассеивать до 35 Вт тепла. Устройство не греется, его спокойно можно держать на коленях. Это решение дополнено тремя режимами работы, которые переключаются простой комбинацией клавиш Ctrl+Alt+T. Тихий режим идеален для работы ночью или в общественных местах, сбалансированный подходит для повседневных задач. Производительный, на котором запускали рендеринг видео и игры, практически не шумит.

Автономность: 15 часов без подзарядки

Протестили автономность MEGABOOK K15S в условиях, знакомых каждому деловому путешественнику. Утром перед вылетом зарядили ноутбук до 100% и взяли его в рейс Москва — Калининград. В зале ожидания провели созвон, потом три часа смотрели сериал и в дороге до отеля редактировали документы. К моменту приезда оставалось 40% заряда: хватило бы еще на пару часов продуктивной работы.

1/3

MEGABOOK K15S может автономно работать до 15 часов и позволяет не оглядываться на индикатор заряда. Заявленное время достигается при типичном офисном использовании: одновременная работа с документами в Word и Excel, ведение переписки, видеоконференции, веб-серфинг.

Если все же понадобится, за  час восполняется до 70% батареи. Компактный адаптер мощностью 65 Вт на базе нитрида галлия поместился даже в карман пиджака. Один блок питания заряжает и ноутбук, и смартфон, и наушники. Экономия места: не нужно никаких дополнительных проводов.

Звук, который реально слышно

В TECNO MEGABOOK K15S установлены два мощных динамика по 2.5 Вт. Звук с глубокими низами, без пластикового дребезжания, объемный. Благодаря DTS можно смотреть видео даже в шумном помещении. В тестах специально включали сцены с шагами и выстрелами: локализация настолько точная, что в наушниках нет необходимости.

Та же стабильность и в микрофоне. Благодаря AI-шумоподавлению голос передается чисто. Во время тестовых звонков из оживленного кафе собеседник не услышал ни разговоры за соседним столом, ни городской шум. И все это — на расстоянии до пяти метров.

Кстати, о созвонах. В ноутбуке встроена обновленная камера. Она отслеживает положение лица, а еще есть физическая шторка приватности. Например, можно закрыть шторку для комфортных видеоконференций.

Для тех, кто предпочитает гарнитуру, идеально подойдут беспроводные наушники TECNO FreeHear 1 из экосистемы бренда. Когда не хотелось делиться разговорами с окружающими, подключали их. Чистый звук с акцентом на средние частоты, 11-мм драйверы, которые выдают неожиданную детализацию. Музыку слушать приятно: и фоновый плейлист на телефоне, и вечерний сериал на ноутбуке. Автономно работают наушники 6 часов, с кейсом — до 30 часов. 

1/2

Bluetooth 5.4 обеспечивает стабильное соединение на расстоянии до 10 метров. Удобная C-образная форма разработана специально для длительного ношения — после восьмичасового рабочего дня в ушах не возникает дискомфорта. Наушники поддерживают одновременное подключение к ноутбуку и смартфону. Переключение между устройствами происходит быстро и без заминок.

Через фирменное приложение Welife можно выбрать один из четырех эквалайзеров и отследить местоположение гарнитуры в случае утери. А еще кастомизировать виджет для управления наушниками. Функция настройки персонализированного дизайна доступна для устройств на Android и позволяет гибко изменить внешний вид окна подключения: вплоть до установки фоновой картинки или собственного фото.

Первые пару использований может потребоваться время, чтобы привыкнуть к нестандартной форме вкладышей, но уже с третьего раза они надеваются вслепую за секунду. Что особенно приятно:  собеседники отмечают, что звук от микрофона более приятный и четкий, чем у дорогих известных моделей.

Бесшовная синхронизация со смартфоном

Благодаря функции OneLeap ноутбук синхронизируется со смартфоном TECNO. Подключение происходит за пару секунд: достаточно один раз подтвердить сопряжение. После этого открывается доступ к бесшовному переключению между устройствами — объединенному буферу обмена, дублированию экранов и передаче файлов без кабелей и пересылок в мессенджерах.

Функция выручила, когда нужно было открыть приложение, у которого нет веб-версии. Удобно работает и буфер обмена: скопировал текст на одном устройстве — вставил на другом. Например, код, полученный в сообщении на телефоне, вводится в браузере на ноутбуке. Экономит минуты, а иногда и нервы. А когда в дороге пропал Wi-Fi, ноутбук сам подключился к мобильному интернету через смартфон.

1/2

TECNO CAMON 40 и сам по себе — мощный рабочий инструмент.  Смартфон выделяется камерой высокого качества 50 Мп, ярким AMOLED-экраном 120 Гц и множеством функций, которые упрощают процесс мобильной съёмки и использование искусственного интеллекта TECNO AI.

Телефон работает на HIOS 15.0.1 на базе Android 15.В фирменную оболочку встроен искусственный интеллект:

  • Голосовой помощник Ella. Отвечает на вопросы, помогает с задачами и управлением устройством.

  • Решение задач. Наводите камеру на задачу, ИИ решает ее.

  • AI Редактор фотографий. Интеллектуальная обработка в одно касание.

  • Быстрый поиск. Находит адрес на экране и запускает навигацию, распознает объекты и события, автоматически добавляет их в календарь.

Технические характеристики

  • Процессор и память. 8 ядер, 16 потоков, Кэш L3 16 МБ, частота до 4.5 ГГц Графический процессор AMD Radeon™ graphics SSD 512 ГБ или 1 ТБ, М.2, 2280, PCle 3.0 Nvme DDR4 16 ГБ, 3200 МГц.

  • Дисплей. 15.6", TFT, Full HD (1920×1080), 16:9, 280нит, 45% NTSC, 16.7 млн цветов, 60 Гц, 141 ррі.

  • Веб-камера. 1 Мп, шторка приватности.

  • Порты. 9 портов: 1*TF Card (microSD), 1*HDMI 1.4, 1*USB-A 3.1,

    1*USB-A 3.2, 1*3.5mm аудиовход, *Ethernet RJ45 до 1 Гбит, 2*Туре-С (Full Function), 1*слот для замка Kensington.

  • Другое. Сканер отпечатка пальца в кнопке питания. Клавиатура с подсветкой (4 уровня яркости). Тачпад с поддержкой одновременно 4 касаний.

  • Батарея. 70 Вт∙ч (6150 мА∙ч), Li-Pol, 11.55 B 65 Вт Type-C GaN, 20 В, 3.25 А, кабель 1.8 м (Туре-С-Type-C).

  • Габариты. 17.3 мм (высота), 359.5 мм (ширина), 236 мм (глубина).

  • Вес. 1,7 кг.


Если хотите создать собственную экосистему, в которой технологии подстроятся под ритм дня, попробуйте технику TECNO. Мощный ноутбук, быстрый смартфон и наушники соединяются в единое пространство. Быстрое переключение между устройствами, синхронизация файлов и стабильное соединение без лишних настроек.

КУПИТЬ НОУТБУК TECNO

Реклама TECNO Mobile Limited, Юридический адрес: Flat N, 16/F., Block B, Универсальный промышленный центр, 19-25 Shan MeiStreet, Fotan, New Territories, Гонконг

Показать полностью 17
Электроника Гаджеты Ноутбук Длиннопост
219
artyhedgehog
artyhedgehog
2 года назад
IT-юмор

Ответ на пост «Плохой API»⁠⁠1

Так... В общем, насколько моего понимания хватает, вкратце это разница между REST и JSON RPC.


Первый по-максимуму использует методы и коды ответа протокола HTTP в том числе для передачи информации логики API.


Второй чётко отделяет слой HTTP и слой логики API. HTTP только чтобы передать запрос-ответ. Инфа про запрос, в том числе тип операции - только в теле запроса. Инфа про ответ, в том числе код результата выполнения операции - только в теле ответа.


И то, и другое - валидные протоколы API, более или менее подходящие под разные задачи. Главное не натягивать мухи на котлеты.


Всё, зануда мод пошёл отдыхать.

Ответ на пост «Плохой API» IT юмор, Http, API, Программист, Программирование, IT, Ответ на пост, Текст
[моё] IT юмор Http API Программист Программирование IT Ответ на пост Текст
53
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии