This media is not supported in your browser
VIEW IN TELEGRAM
Paperworld — красивая анимированная 3D сцена. Реализована с помощью CSS, Pug и JavaScript.
https://codepen.io/atzedent/pen/ExpmWoY
@javascriptv
https://codepen.io/atzedent/pen/ExpmWoY
@javascriptv
🔥8❤3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Three.js Mobile VR Sonic — бегущий Sonic в 3D пространстве three.js с возможностью перехода в VR режим. Sonic может прыгать и собирать монетки.
https://codepen.io/b29/pen/yQXQrg
@javascriptv
https://codepen.io/b29/pen/yQXQrg
@javascriptv
🔥8👍7❤2
💡Задача: Игра в прыжки
Условие: Вам дан целочисленный массив nums. Изначально вы находитесь в первом индексе массива, и каждый элемент массива представляет максимальную длину прыжка в этой позиции.
Верните true, если вы можете добраться до последнего индекса, или false в противном случае.
Пример:
Ввод: nums = [1,3,1,1,4]
Вывод: true
Объяснение: Переходим на 1 шаг от индекса 0 к 1, затем на 3 шага к последнему индексу.
Ввод: nums = [3,2,1,0,4]
Вывод: false
Решение:
Пишите свое решение в комментариях👇
@javascriptv
Условие: Вам дан целочисленный массив nums. Изначально вы находитесь в первом индексе массива, и каждый элемент массива представляет максимальную длину прыжка в этой позиции.
Верните true, если вы можете добраться до последнего индекса, или false в противном случае.
Пример:
Ввод: nums = [1,3,1,1,4]
Вывод: true
Объяснение: Переходим на 1 шаг от индекса 0 к 1, затем на 3 шага к последнему индексу.
Ввод: nums = [3,2,1,0,4]
Вывод: false
Решение:
var canJump = function(nums) {
// Base condition...
if(nums.length <= 1)
return true;
// To keep the maximum index that can be reached...
let maximum = nums[0];
// Traverse all the elements through loop...
for(let i = 0; i < nums.length; i++){
//if there is no way to jump to next...
// so we should return false...
if(maximum <= i && nums[i] == 0)
return false;
//update the maximum jump...
if(i + nums[i] > maximum){
maximum = i + nums[i];
}
//maximum is enough to reach the end...
if(maximum >= nums.length-1)
return true;
}
return false;
};
Пишите свое решение в комментариях👇
@javascriptv
❤5👍4🔥1
💫 Какой метод глубокого клонирования в JavaScript наиболее эффективный — исследование
В данном исследовании сравниваются различные методы глубокого клонирования в JavaScript, а их эффективность оценивается с помощью серии модульных тестов.
▪Читать
@javascriptv
В данном исследовании сравниваются различные методы глубокого клонирования в JavaScript, а их эффективность оценивается с помощью серии модульных тестов.
▪Читать
@javascriptv
👍10🔥2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Carousel with drag and wheel
Карусель с перетаскиванием и прокруткой колеса. Реализована с помощью CSS и JS
#css #js #анимация #carousel
https://codepen.io/supah/pen/xxJMbbg
@javascriptv
Карусель с перетаскиванием и прокруткой колеса. Реализована с помощью CSS и JS
#css #js #анимация #carousel
https://codepen.io/supah/pen/xxJMbbg
@javascriptv
👍10🔥5❤1
✔ Как структурировать API-вызовы при автоматизированном тестировании с Playwright и JavaScript
В создании автоматизированных e2e-тестов для сложных систем есть много трудностей. Одна из них — “идеальное” окружение. Это окружение должно быть полностью под вашим контролем и включать многие (если не все) характеристики окружения разработки или продакшн-окружения.
На практике это часто не так. Окружение требует регулярного контроля, сброса данных и настройки требований для каждого теста “на лету”.
В случае онлайн-приложений, основанных на REST-архитектуре и запросах API, мы можем обойти эту проблему и приводить систему в необходимое состояние перед каждым тестом или набором тестов.
В этом примере я воспользуюсь Playwright с модулем запросов, который он предоставляет для отправки вызовов API.
Допустим, приложение, которое мы тестируем, представляет собой простой магазин с товарами. Для авторизации используется технология JWT (веб-токен в формате JSON). Следовательно, каждый последующий вызов после входа в систему должен включать данный токен.
Чтобы некоторые тесты сработали, на складе должен быть определенный продукт. Следовательно, пользователь должен сначала пройти аутентификацию, получить токен и воспользоваться им для пополнения запасов этого определенного продукта.
▪Читать
@javascriptv
В создании автоматизированных e2e-тестов для сложных систем есть много трудностей. Одна из них — “идеальное” окружение. Это окружение должно быть полностью под вашим контролем и включать многие (если не все) характеристики окружения разработки или продакшн-окружения.
На практике это часто не так. Окружение требует регулярного контроля, сброса данных и настройки требований для каждого теста “на лету”.
В случае онлайн-приложений, основанных на REST-архитектуре и запросах API, мы можем обойти эту проблему и приводить систему в необходимое состояние перед каждым тестом или набором тестов.
В этом примере я воспользуюсь Playwright с модулем запросов, который он предоставляет для отправки вызовов API.
Допустим, приложение, которое мы тестируем, представляет собой простой магазин с товарами. Для авторизации используется технология JWT (веб-токен в формате JSON). Следовательно, каждый последующий вызов после входа в систему должен включать данный токен.
Чтобы некоторые тесты сработали, на складе должен быть определенный продукт. Следовательно, пользователь должен сначала пройти аутентификацию, получить токен и воспользоваться им для пополнения запасов этого определенного продукта.
▪Читать
@javascriptv
👍8🔥2❤1
🔧 Chrome for Testing — новая версия Chrome, специально предназначенная для тестирования веб-приложений и автоматизации.
Узнайте, почему команда Chrome сочла это необходимым на конкретных примеры, в которых Chrome for Testing может быть полезен вам как разработчику.
Читать
Узнайте, почему команда Chrome сочла это необходимым на конкретных примеры, в которых Chrome for Testing может быть полезен вам как разработчику.
Читать
Chrome for Developers
Chrome for Testing: reliable downloads for browser automation | Blog | Chrome for Developers
Chrome for Testing is a new Chrome flavor that specifically targets web app testing and automation use cases.
🔥9👍6❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Minimalist Thermostat - Регулировка температуры, выполненная с помощью SVG, CSS и библиотеки GSAP.js
https://codepen.io/jkantner/pen/rNpbMjO
@javascriptv
https://codepen.io/jkantner/pen/rNpbMjO
@javascriptv
🔥14❤3👍1
🖼Стек вызовов JavaScript: объяснение с помощью иллюстраций
▪Типичный случай
В случае ниже каждая функция завершается после выполнения всех строк кода внутри нее.
👀Смотреть
▪Более интересный случай
В данном примере — вызов функции внутри другой функции.
👀Смотреть
Этот пример помогает лучше понять термин “стек”. Благодаря вызову функции внутри другой функции мы видим, как “боксы” нагромождаются один на другой и создают стек “боксов”.
Каждый “бокс” выполняет код внутри себя. При вызове функции создается новый “бокс” внутри нее. Если есть простая команда, например console.log, она просто выполняется. Выполнив весь код, “бокс” покидает стек.
Что такое “боксы”? Зачем нужны контексты выполнения?
▪Читать
@javascriptv
▪Типичный случай
В случае ниже каждая функция завершается после выполнения всех строк кода внутри нее.
function defense() {
console.log('I am the defense attorney');
}
function prosecution() {
console.log('I am the prosecutor');
}
console.log('All rise');
defense();
prosecution();
👀Смотреть
▪Более интересный случай
В данном примере — вызов функции внутри другой функции.
function callingToWitness(witnessNumber) {
console.log('Calling to witness number ' + witnessNumber);
}
function defense() {
callingToWitness(1);
callingToWitness(2);
}
function prosecution() {
callingToWitness(3);
callingToWitness(4);
}
console.log('All rise');
defense();
prosecution();
👀Смотреть
Этот пример помогает лучше понять термин “стек”. Благодаря вызову функции внутри другой функции мы видим, как “боксы” нагромождаются один на другой и создают стек “боксов”.
Каждый “бокс” выполняет код внутри себя. При вызове функции создается новый “бокс” внутри нее. Если есть простая команда, например console.log, она просто выполняется. Выполнив весь код, “бокс” покидает стек.
Что такое “боксы”? Зачем нужны контексты выполнения?
▪Читать
@javascriptv
👍7❤2🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Jello Tab Bar - красивый анимированный tabbar, написанный с помощью SVG, CSS и JavaScript
https://codepen.io/oey_amir/pen/xxpZgEW
@javascriptv
https://codepen.io/oey_amir/pen/xxpZgEW
@javascriptv
👍21🔥6❤2
DeepScan - полезный инструмент, который проводит анализ исходного кода.
Программа отлично работает в обнаружении возможных ошибок и уязвимостей в JavaScript приложениях.
Она проводит подробное сканирование и анализ вашего кода, выявляя проблемные секции, такие как неправильное использование переменных, возможные утечки памяти и небезопасные операции с данными.
https://deepscan.io/
@javascriptv
Программа отлично работает в обнаружении возможных ошибок и уязвимостей в JavaScript приложениях.
Она проводит подробное сканирование и анализ вашего кода, выявляя проблемные секции, такие как неправильное использование переменных, возможные утечки памяти и небезопасные операции с данными.
https://deepscan.io/
@javascriptv
👍12🥰3🔥2
▪ Переход на полноэкранный режим
function fullScreen() {
const el = document.documentElement
const rfs =
el.requestFullScreen ||
el.webkitRequestFullScreen ||
el.mozRequestFullScreen ||
el.msRequestFullscreen
if(typeof rfs != "undefined" && rfs) {
rfs.call(el)
}
}
fullScreen()
▪ Выход из полноэкранного режима
function exitScreen() {
if (document.exitFullscreen) {
document.exitFullscreen()
}
else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen()
}
else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen()
}
else if (document.msExitFullscreen) {
document.msExitFullscreen()
}
if(typeof cfs != "undefined" && cfs) {
cfs.call(el)
}
}
exitScreen()
▪ Вывод страницы
Чтобы вывести текущую страницу:
window.print()
▪ Изменение стиля выводимого контента
Чтобы при выводе страницы изменить текущий макет:
<style>
/* Используйте @media print, чтобы настроить стиль вывода */
@media print {
.noprint {
display: none;
}
}
</style>
<div class="print">print</div>
<div class="noprint">noprint</div>
▪ Блокировка события закрытия
Чтобы оградить пользователя от обновления или закрытия браузера, запустите событие beforeunload (некоторые браузеры не кастомизируют текстовой контент):
window.onbeforeunload = function(){
return 'Are you sure you want to leave the haorooms blog
?';
};
▪ Запись экрана
Чтобы сделать запись текущего экрана для ее передачи или загрузки:
const streamPromise = navigator.mediaDevices.getDisplayMedia()
streamPromise.then(stream => {
var recordedChunks = [];// записанные видеоданные
var options = { mimeType: "video/webm; codecs=vp9" };// Установите формат кодирования
var mediaRecorder = new MediaRecorder(stream, options);// Инициализируйте экземпляр MediaRecorder
mediaRecorder.ondataavailable = handleDataAvailable;// Установите обратный вызов, когда данные будут доступны (конец записи экрана)
mediaRecorder.start();
// Фрагментация видео
function handleDataAvailable(event) {
if (event.data.size > 0) {
recordedChunks.push(event.data);// Добавление данных, event.data - объект BLOB
download();// Инкапсуляция в объект BLOB и загрузка
}
}
// Загрузка файла
function download() {
var blob = new Blob(recordedChunks, {
type: "video/webm"
});
// Видео можно загрузить здесь в бэкенд
var url = URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.download = "test.webm";
a.click();
window.URL.revokeObjectURL(url);
}
})
▪ Определение состояния горизонтального и вертикального экранов
Чтобы оценить состояние горизонтального или вертикального экрана мобильного телефона:
function hengshuping(){
if(window.orientation==180||window.orientation==0){
alert("Portrait state
!")
}
if(window.orientation==90||window.orientation==-90){
alert("Landscape state
!")
}
}
window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", hengshuping, false);
▪ Различение стилей для горизонтального и вертикального экранов
Чтобы установить разные стили для горизонтального и вертикального экранов:
<style>
@media all and (orientation : landscape) {
body {
background-color: #ff0000;
}
}
@media all and (orientation : portrait) {
body {
background-color: #00ff00;
}
}
</style>
▪ Продолжение
@javascriptv
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4🥰2❤1😁1
Yotako.io — крутой инструмент дизайна в код с помощью искусственного интеллекта
С помощью инструмента можно без труда экспортировать дизайн из графических редакторов, таких как Sketch и Adobe XD, и преобразовать их в код на различных языках программирования и фреймворках
При этом Yotako.io также обеспечивает синхронизацию между дизайном и кодом, что позволяет легко вносить изменения в процессе разработки
Стоимость: #бесплатно (но есть платные тарифы).
#дизайн #code #ии
@javascriptv
С помощью инструмента можно без труда экспортировать дизайн из графических редакторов, таких как Sketch и Adobe XD, и преобразовать их в код на различных языках программирования и фреймворках
При этом Yotako.io также обеспечивает синхронизацию между дизайном и кодом, что позволяет легко вносить изменения в процессе разработки
Стоимость: #бесплатно (но есть платные тарифы).
#дизайн #code #ии
@javascriptv
👍9🔥3❤2🤔1
Преимущества совместного использования Selenium и JavaScript
• Кросс-браузерность. Позволяет беспроблемно запускать скрипты автоматизации в разных браузерах.
• Интеграция с фреймворками для тестирования JavaScript. Обеспечивает легкую интеграцию с такими фреймворками, как Mocha и Jest, для эффективного управления тестированием.
• Мощная поддержка сообщества. Активно действующие сообщества Selenium и JavaScript предоставляют доступ к обширной документации, обучающим руководствам и ресурсам.
Установка Selenium WebDriver в JavaScript
npm install selenium-webdriver
const { Builder, By, Key, until } = require('selenium-webdriver');
const driver = new Builder().forBrowser('chrome').build();
Автоматизация браузера с помощью Selenium и примеры кода читать тут
@javascriptv
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Microsoft Homepage Clone - Клон домашней страницы Microsoft. Реализована с помощью CSS и Js.
https://codepen.io/bradtraversy/pen/ZEGGNRb
@javascriptv
https://codepen.io/bradtraversy/pen/ZEGGNRb
@javascriptv
👍13❤1👎1🔥1
Сбер открыл доступ к новым нейролингвистическим моделям
Сбер выпустил модель ruGPT-3.5 13B для генерации русского текста и модель mGPT 13B для генерации текста на 61 языке.
Модель ruGPT-3.5 13B оснащена 13 миллиардов параметров и может генерировать текст на русском, английском, а также неплохо разбирается в языках программирования. Модель mGPT 13B доступна по открытой лицензии MIT и может генерировать текст на 61 языке, в том числе на языках стран СНГ и малочисленных этнических групп в России.
«Сбер как ведущая технологическая компания выступает за открытость технологий и обмен опытом с профессиональным сообществом, ведь любые разработки и исследования имеют ограниченный потенциал в замкнутой среде. Поэтому, мы уверены, что публикация обученных моделей подстегнёт работу российских исследователей и разработчиков, нуждающихся в сверхмощных языковых моделях, создавать на их базе собственные технологические продукты и решения», —следует из заявления старшего вице-президента, CTO, руководитель блока «Технологии» Сбера Андрея Белевцева.
@javascriptv
Сбер выпустил модель ruGPT-3.5 13B для генерации русского текста и модель mGPT 13B для генерации текста на 61 языке.
Модель ruGPT-3.5 13B оснащена 13 миллиардов параметров и может генерировать текст на русском, английском, а также неплохо разбирается в языках программирования. Модель mGPT 13B доступна по открытой лицензии MIT и может генерировать текст на 61 языке, в том числе на языках стран СНГ и малочисленных этнических групп в России.
«Сбер как ведущая технологическая компания выступает за открытость технологий и обмен опытом с профессиональным сообществом, ведь любые разработки и исследования имеют ограниченный потенциал в замкнутой среде. Поэтому, мы уверены, что публикация обученных моделей подстегнёт работу российских исследователей и разработчиков, нуждающихся в сверхмощных языковых моделях, создавать на их базе собственные технологические продукты и решения», —следует из заявления старшего вице-президента, CTO, руководитель блока «Технологии» Сбера Андрея Белевцева.
@javascriptv
🔥11👍5❤2👎2
This media is not supported in your browser
VIEW IN TELEGRAM
49. parallax bird - красивый параллакс, сделанный с помощью Less и библиотеки Three.js
https://codepen.io/ycw/pen/OJpPmOq
@javascriptv
https://codepen.io/ycw/pen/OJpPmOq
@javascriptv
❤9👍7🔥5🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Hex/RGB Auto Color Converter in Vue - конвертор цветов из HEX в RGB, выполненный с помощью SCSS и библиотеки Vue.js.
https://codepen.io/collinsworth/pen/WNXxQVP
@javascriptv
https://codepen.io/collinsworth/pen/WNXxQVP
@javascriptv
👍13🔥3❤1
👨💻Как работает JavaScript Proxy
• Первый шаг в работе с JavaScript Proxy — создание прокси-объекта с помощью синтаксиса new Proxy(). Этот синтаксис позволяет определить целевой объект и объект-обработчик, содержащий ловушки — специальные методы, которые перехватывают операции с прокси и позволяют настраивать их поведение.
Например, ловушка get перехватывает доступ к свойствам прокси-объекта. Определив эту ловушку, можно настроить реакцию прокси при обращение к свойству. Аналогично, ловушка set перехватывает присвоение свойства, позволяя валидировать или изменить присвоенное значение.
• В целом, ловушки в контексте JavaScript Proxy — это специальные методы, которые действуют как посредники, перехватывая и позволяя настраивать такие действия с прокси-объектом, как доступ к свойствам и присвоение. Они предоставляют разработчикам тонкий контроль над поведением прокси, позволяя настраивать и манипулировать им по мере необходимости.
Пример:
▪️Здесь ловушка set перехватывает присвоение свойства прокси-объекту и регистрирует присвоенное свойство и значение, прежде чем изменить его в целевом объекте.
Используя эти и другие ловушки, можно эффективно настраивать и контролировать поведение прокси-объектов в соответствии с потребностями конкретной разработки.
Перехват операций с объектами с использованием прокси
• JavaScript Proxy позволяет перехватывать и настраивать различные операции с объектами. Рассмотрим несколько примеров.
Удаление свойства:
▪️В этом примере ловушка deleteProperty перехватывает удаление свойства прокси-объекта. Можно настроить поведение так, чтобы залоггировать удаляемое свойство и затем удалить его из целевого объекта.
• Вызов функции:
▪️В этом случае ловушка apply перехватывает вызов функции прокси-объекта. Можно настроить поведение так, чтобы залоггировать имя функции перед ее вызовом с предоставленными аргументами.
📌Продолжение
@javascriptv
• Первый шаг в работе с JavaScript Proxy — создание прокси-объекта с помощью синтаксиса new Proxy(). Этот синтаксис позволяет определить целевой объект и объект-обработчик, содержащий ловушки — специальные методы, которые перехватывают операции с прокси и позволяют настраивать их поведение.
Например, ловушка get перехватывает доступ к свойствам прокси-объекта. Определив эту ловушку, можно настроить реакцию прокси при обращение к свойству. Аналогично, ловушка set перехватывает присвоение свойства, позволяя валидировать или изменить присвоенное значение.
• В целом, ловушки в контексте JavaScript Proxy — это специальные методы, которые действуют как посредники, перехватывая и позволяя настраивать такие действия с прокси-объектом, как доступ к свойствам и присвоение. Они предоставляют разработчикам тонкий контроль над поведением прокси, позволяя настраивать и манипулировать им по мере необходимости.
Пример:
const target = {
name: 'Hossein',
age: 26
};
const handler = {
get(target, property) {
console.log(`Getting property: ${property}`);
return target[property];
},
set(target, property, value) {
console.log(`Setting property: ${property} = ${value}`);
target[property] = value;
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.name); // Вывод: Получение свойства: name, Hossein
proxy.age = 30; // Вывод: Установка свойства: age = 26
console.log(proxy.age); // Вывод: получение свойства: age, 30
▪️Здесь ловушка set перехватывает присвоение свойства прокси-объекту и регистрирует присвоенное свойство и значение, прежде чем изменить его в целевом объекте.
Используя эти и другие ловушки, можно эффективно настраивать и контролировать поведение прокси-объектов в соответствии с потребностями конкретной разработки.
Перехват операций с объектами с использованием прокси
• JavaScript Proxy позволяет перехватывать и настраивать различные операции с объектами. Рассмотрим несколько примеров.
Удаление свойства:
const target = {
name: 'Hossein',
age: 26
};
const handler = {
deleteProperty(target, property) {
console.log(`Deleting property: ${property}`);
delete target[property];
}
};
const proxy = new Proxy(target, handler);
delete proxy.age; // Вывод: Удаление свойства: age
console.log(proxy); // Вывод: { name: 'Hossein' }
▪️В этом примере ловушка deleteProperty перехватывает удаление свойства прокси-объекта. Можно настроить поведение так, чтобы залоггировать удаляемое свойство и затем удалить его из целевого объекта.
• Вызов функции:
const target = {
sum: (a, b) => a + b
};
const handler = {
apply(target, thisArg, argumentsList) {
console.log(`Calling function: ${target.name}`);
return target.apply(thisArg, argumentsList);
}
};
const proxy = new Proxy(target.sum, handler);
console.log(proxy(2, 3)); // Вывод: Вызов функции: sum, 5
▪️В этом случае ловушка apply перехватывает вызов функции прокси-объекта. Можно настроить поведение так, чтобы залоггировать имя функции перед ее вызовом с предоставленными аргументами.
📌Продолжение
@javascriptv
👍15🔥5❤2