/**
* Converts a Firestore Timestamp to a native JavaScript Date object.
* Перевод из формата Firebase Timestamp в JavaScript Date
* @param {Timestamp} timestamp Firestore Timestamp to convert
* @return {Date} native JavaScript Date object
* const date = firebaseTimestampToDate({ _seconds: 1725021788, _nanoseconds: 105817000 });
*
*/
function firebaseTimestampToDate(timestamp) {
// Создаем новый объект Date, используя общее количество миллисекунд
const date = new Date(
(timestamp._seconds * 1000) + (timestamp._nanoseconds / 1000000)
);
return date;
}
Создание своих сниппетов в VS Code
Урок
Генератор сниппетов »
#VSCode
ТАЙМ КОДЫ:
00:00 Вступление
00:18 Что такое сниппеты
01:23 Создание первого сниппета console.log()
04:16 Создание сниппета background-img
06:33 Генератор сниппетов
07:49 Scope для сниппета
08:05 Позиция курсора
08:37 Тестирование сниппета
09:34 Идеи для сниппетов
Урок
Генератор сниппетов »
#VSCode
ТАЙМ КОДЫ:
00:00 Вступление
00:18 Что такое сниппеты
01:23 Создание первого сниппета console.log()
04:16 Создание сниппета background-img
06:33 Генератор сниппетов
07:49 Scope для сниппета
08:05 Позиция курсора
08:37 Тестирование сниппета
09:34 Идеи для сниппетов
YouTube
Создание своих сниппетов в VS Code
Как создавать пользовательские сниппеты в редакторе VS Code.
Генератор сниппетов: https://snippet-generator.app/
Статья в блоге: https://webcademy.ru/blog/980/
Материалы ВебКадеми на всех площадках: https://webcademy.ru/taplink/
::::::::::::::::::::…
Генератор сниппетов: https://snippet-generator.app/
Статья в блоге: https://webcademy.ru/blog/980/
Материалы ВебКадеми на всех площадках: https://webcademy.ru/taplink/
::::::::::::::::::::…
Forwarded from Kirill Rez
Volond Apps pinned «https://docs.google.com/spreadsheets/d/1Lk6OClOPA8p94fspQrs8-M-W080tb244U-fWGqvnApk/edit?gid=253009584#gid=253009584»
const handleCardClick = (e: React.MouseEvent) => {
const card = e.currentTarget;
const rect = card.getBoundingClientRect();
const x = e.clientX - rect.left - rect.width / 2;
const y = e.clientY - rect.top - rect.height / 2;
card.style.transform = perspective(1000px) rotateX(${-y / 10}deg) rotateY(${x / 10}deg);
setTimeout(() => {
card.style.transform = '';
}, 100);
setPoints(points + pointsToAdd); setClicks([...clicks, { id: Date.now(), x: e.pageX, y: e.pageY }]);
};Обработчик события клика:
const handleCardClick = (e: React.MouseEvent<HTMLDivElement>) => { ... } ```
— это функция, которая принимает событие клика как аргумент.
Получение элемента карточки:
```const card = e.currentTarget;```— здесь currentTarget указывает на элемент, на который было совершено нажатие, т.е. на карточку.
Получение размеров и позиции карточки:
const rect = card.getBoundingClientRect();
— этот метод возвращает размеры и положение карточки относительно видимой области экрана.
Вычисление смещения клика:
const x = e.clientX - rect.left - rect.width / 2;
— вычисляет смещение по оси X относительно центра карточки.
const y = e.clientY - rect.top - rect.height / 2;
— вычисляет смещение по оси Y относительно центра карточки.
Применение 3D-трансформации:
card.style.transform = perspective(1000px) rotateX(−y/10deg)rotateY({x / 10}deg); ```— здесь устанавливается CSS-трансформация, создающая эффект поворота карточки по осям X и Y в зависимости от положения курсора мыши.
Сброс трансформации:
```setTimeout(() => { card.style.transform = ''; }, 100); ```— через 100 миллисекунд трансформация сбрасывается, возвращая карточку в исходное положение.
Обновление очков и кликов:
```setPoints(points + pointsToAdd); — обновляет состояние очков, добавляя к текущему значению points значение pointsToAdd.
```setClicks([...clicks, { id: Date.now(), x: e.pageX, y: e.pageY }]);```— добавляет новую запись о клике в массив clicks, содержащую уникальный идентификатор (время нажатия) и координаты клика.
В итоге, эта функция создает интерактивный эффект на карточке при клике, а также обновляет состояние приложения, связанное с очками и кликами
Отсутствие результата тоже результат
Точнее НУ ОЧЕНЬ МЕДЛЕННЫЙ....
XML_to_JSON
Точнее НУ ОЧЕНЬ МЕДЛЕННЫЙ....
XML_to_JSON
/* Source: https://gist.github.com/erickoledadevrel/6b1e9e2796e3c21f669f */
/**
* Converts an XML string to a JSON object, using logic similar to the
* sunset method Xml.parse().
* @param {string} xml The XML to parse.
* @returns {Object} The parsed XML.
*/
function XML_to_JSON(xml) {
var doc = XmlService.parse(xml);
var result = {};
var root = doc.getRootElement();
result[root.getName()] = elementToJSON(root);
return result;
}
/**
* Converts an XmlService element to a JSON object, using logic similar to
* the sunset method Xml.parse().
* @param {XmlService.Element} element The element to parse.
* @returns {Object} The parsed element.
*/
function elementToJSON(element) {
var result = {};
// Attributes.
element.getAttributes().forEach(function (attribute) {
result[attribute.getName()] = attribute.getValue();
});
// Child elements.
element.getChildren().forEach(function (child) {
var key = child.getName();
var value = elementToJSON(child);
if (result[key]) {
if (!(result[key] instanceof Array)) {
result[key] = [result[key]];
}
result[key].push(value);
} else {
result[key] = value;
}
});
// Text content.
if (element.getText()) {
result['Text'] = element.getText();
}
return result;
}
Нумерация строк формулой
Иногда нужно пронумеровать строки формулой что бы при сортировке отображалось именно в какой строке находиться значения
Иногда нужно пронумеровать строки формулой что бы при сортировке отображалось именно в какой строке находиться значения
=Let(title;"Строка";if(CountA(A2:A)>0;{title;arrayformula(Row(indirect("A2:A"&CountA(A1:A))))};title))
Forwarded from Дмитрий
Ну и я тогда поделюсь) когда то мне захотелось сделать интерфейс, но я не шарю. Нашел openasapp.net
Суть простая: делаешь таблицу на формулах, например подсчет ЗП или KPI или подобный "специфичный калькулятор", заливаешь в платформу и в UI конструкторе делаешь кнопки, ползунки и пр. ссылаясь на ячейки. Работает бесплатно до какого то лимита уже не помню какого. В маркете скачиваешь универсальное приложение, которое то ли облачно то ли скриптово делает из него то что сделал ты в онлайн редакторе. Эта тема была задолго до аппшита, Апшит я так и не понял честно говоря, а в этой штуке разобрался когда то.
ps ну и этим можно делиться с людьми просто ссылкой, лимит вроде как раз на кол-во юзеров. Накидал что то удобное, расшарил, нужно обновить - обновил у всех
Суть простая: делаешь таблицу на формулах, например подсчет ЗП или KPI или подобный "специфичный калькулятор", заливаешь в платформу и в UI конструкторе делаешь кнопки, ползунки и пр. ссылаясь на ячейки. Работает бесплатно до какого то лимита уже не помню какого. В маркете скачиваешь универсальное приложение, которое то ли облачно то ли скриптово делает из него то что сделал ты в онлайн редакторе. Эта тема была задолго до аппшита, Апшит я так и не понял честно говоря, а в этой штуке разобрался когда то.
ps ну и этим можно делиться с людьми просто ссылкой, лимит вроде как раз на кол-во юзеров. Накидал что то удобное, расшарил, нужно обновить - обновил у всех
Forwarded from volond
https://www.youtube.com/watch?v=-Ido-G7J6iU Вот тут чудах из браузера отправляет форму в таблицу через развернутый webApp чего хотелось бы избежать
YouTube
Как отправить данные HTML-формы в Google Sheets
Смотрим как (1) устроена HTML-форма, (2) CSS-стили для неё, (3) как устроена функция doPost() в Google Таблице и (4) как устроен JavaScript на HTML-странице (спойлер - используется Fetch API)
👉 [01:08] 1. Как устроена форма на HTML
👉 [03:53] 2. CSS-оформление…
👉 [01:08] 1. Как устроена форма на HTML
👉 [03:53] 2. CSS-оформление…
Подсчитайте общее время выполнения вашего проекта Google Apps Script
Gist
Count your Google Apps Script project's total execution time
Count your Google Apps Script project's total execution time - runtimeCount.gs
Forwarded from volond
C
=image("https://latex.codecogs.com/svg.image?1+sin^2(x)")
Forwarded from Google Apps Script | Канал
Библиотека GenAIApp разработана для создания, управления и взаимодействия с чат-ботами на базе ИИ с использованием API Gemini и OpenAI (насколько я понимаю, Yandex GPT туда прикрутить не проблема). Библиотека предоставляет такие функции, как текстовый разговор, просмотр веб-страниц, анализ изображений и многое другое, позволяя вам создавать универсальные приложения чата на основе ИИ, которые могут интегрироваться с различными функциями и внешними источниками данных.
Еще раз, это обертка над API всяких ИИ, которая позволяет в универсальном виде управлять диалогами и решать определенные задачи
https://github.com/scriptit-fr/GenAIApp
Еще раз, это обертка над API всяких ИИ, которая позволяет в универсальном виде управлять диалогами и решать определенные задачи
https://github.com/scriptit-fr/GenAIApp
Forwarded from Alexander
Только если вдруг будете всё-таки подключать будьте аккуратны
скрипт подключенный к gcp работает неделю и потом его надо переавторизовывать
Вот одно из решений
https://docs.google.com/document/d/13eVgMqjGJj8oCIG4qozmAC0-jStOqdx2rfHjIwAbIzA/edit?usp=sharing
скрипт подключенный к gcp работает неделю и потом его надо переавторизовывать
Вот одно из решений
https://docs.google.com/document/d/13eVgMqjGJj8oCIG4qozmAC0-jStOqdx2rfHjIwAbIzA/edit?usp=sharing