Forwarded from Node.JS [ru] | Серверный JavaScript
Реализуйте функцию
fetchWithCache(url, ttl), которая делает HTTP-запрос по заданному URL (используя https), и кеширует результат в файл.Если при повторном вызове с тем же URL кеш актуален (время жизни не истекло), функция должна вернуть данные из файла, не обращаясь к сети.
Поведение:
• Результат сохраняется в файл с названием, основанным на URL (можно использовать хеш).
• TTL (time to live) указывается в миллисекундах.
• Если кеш устарел или отсутствует, функция делает реальный HTTP-запрос и обновляет файл.
Решение задачи
const https = require('https');
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
function fetchWithCache(url, ttl) {
const cacheDir = path.resolve(__dirname, 'cache');
const hash = crypto.createHash('md5').update(url).digest('hex');
const cacheFile = path.join(cacheDir, `${hash}.json`);
if (!fs.existsSync(cacheDir)) {
fs.mkdirSync(cacheDir);
}
return new Promise((resolve, reject) => {
if (fs.existsSync(cacheFile)) {
const { mtimeMs } = fs.statSync(cacheFile);
const now =Date.now ();
if (now - mtimeMs < ttl) {
const cached = fs.readFileSync(cacheFile, 'utf-8');
return resolve(JSON.parse(cached));
}
}
https.get(url, res => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
fs.writeFileSync(cacheFile, data, 'utf-8');
resolve(JSON.parse(data));
});
}).on('error', reject);
});
}
// Пример использования:
fetchWithCache('https://jsonplaceholder.typicode.com/todos/1 ', 5000)
.then(data => console.log(data))
.catch(err => console.error(err));
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Техночат
Разыгрываем лучшие гаджеты года: iPhone 16 Pro Max на 256 ГБ, 15-дюймовый MacBook Air 16/256 ГБ и PlayStation 5 Pro!
Чтобы их получить, достаточно подписаться на:
• наш канал «Техночат»
• И на канал «Больше, чем экономика»
Нажимаете после этого на кнопку «Участвовать» и ждёте 2 июля — в этот день в 20:00 по московскому времени рандомайзер выберет трёх победителей. Первый получит айфон, второй — макбук, а третий — PlayStation.
Призы бесплатно вышлем в ближайший к вам пункт выдачи СДЭК, поэтому уточните, есть ли он в вашей стране.
Чтобы их получить, достаточно подписаться на:
• наш канал «Техночат»
• И на канал «Больше, чем экономика»
Нажимаете после этого на кнопку «Участвовать» и ждёте 2 июля — в этот день в 20:00 по московскому времени рандомайзер выберет трёх победителей. Первый получит айфон, второй — макбук, а третий — PlayStation.
Призы бесплатно вышлем в ближайший к вам пункт выдачи СДЭК, поэтому уточните, есть ли он в вашей стране.
Forwarded from Техночат
Разыгрываем лучшие гаджеты года: iPhone 16 Pro Max на 256 ГБ, 15-дюймовый MacBook Air 16/256 ГБ и PlayStation 5 Pro!
Чтобы их получить, достаточно подписаться на:
• наш канал «Техночат»
• И на канал «Больше, чем экономика»
Нажимаете после этого на кнопку «Участвовать» и ждёте 2 июля — в этот день в 20:00 по московскому времени рандомайзер выберет трёх победителей. Первый получит айфон, второй — макбук, а третий — PlayStation.
Призы бесплатно вышлем в ближайший к вам пункт выдачи СДЭК, поэтому уточните, есть ли он в вашей стране.
Чтобы их получить, достаточно подписаться на:
• наш канал «Техночат»
• И на канал «Больше, чем экономика»
Нажимаете после этого на кнопку «Участвовать» и ждёте 2 июля — в этот день в 20:00 по московскому времени рандомайзер выберет трёх победителей. Первый получит айфон, второй — макбук, а третий — PlayStation.
Призы бесплатно вышлем в ближайший к вам пункт выдачи СДЭК, поэтому уточните, есть ли он в вашей стране.
Forwarded from Оди
Объявлены победители онлайн-конкурса «Создавая миры»
На выставке-форуме АРХ МОСКВА состоялась церемония награждения победителей конкурса «Создавая миры», организованного ГК «Галс-Девелопмент»
Ими стали Лана Семутникова, автор работы «Темпоритм» в номинации «Фотография. Архитектура», и Полина Шиндина, автор работы «Атланты» в номинации «Digital Art. Архитектура». Победители получили по 100 тысяч рублей из призового фонда
Также специальными дипломами были награждены победители онлайн-голосования на сайте конкурса PinWin.su, которыми стали Александр Мануковскии с работой «Диалог» в номинации «Фотография. Архитектура» и Ирина Халезова с работой «Мир сам себя не создаст» в номинации «Digital Art. Архитектура»
Конкурс «Создавая миры» стартовал 7 марта и за месяц поступило более 650 (!) заявок. К участию в конкурсе были отобраны 85 работ в номинации «Фотография. Архитектура» и 93 работы в номинации «Digital Art. Архитектура». Их отличает особый взгляд на архитектуру, позволяющий увидеть в привычных или фантазийных формах целый мир, существующий по своим законам — прекрасным и интригующим. Индивидуальность авторского видения, смысловая и образная насыщенность, художественное качество и мастерство владения инструментами обработки изображения – эти качества требовались для участия в конкурсе «Создавая миры»
В экспертное жюри конкурса вошли представители организатора и партнёры конкурса, а также ведущие российские архитекторы, фотографы, медиахудожники и эксперты в сфере цифрового искусства. Они выбрали в финал 10 лучших работ — по 5 в каждой из номинаций. Все 10 работ, вышедших в финал конкурса «Создавая миры», были представлены на специальной экспозиции на стенде ГК «Галс-Девелопмент» на выставке-форуме АРХ МОСКВА
Следите за событиями в мире архитектурной фотографии и цифрового искусства на канале конкурса: @archiphotodigitalart
Реклама. ИП Петухова Е.Г., ИНН 772006355737, erid: 2SDnjchBRpH
На выставке-форуме АРХ МОСКВА состоялась церемония награждения победителей конкурса «Создавая миры», организованного ГК «Галс-Девелопмент»
Ими стали Лана Семутникова, автор работы «Темпоритм» в номинации «Фотография. Архитектура», и Полина Шиндина, автор работы «Атланты» в номинации «Digital Art. Архитектура». Победители получили по 100 тысяч рублей из призового фонда
Также специальными дипломами были награждены победители онлайн-голосования на сайте конкурса PinWin.su, которыми стали Александр Мануковскии с работой «Диалог» в номинации «Фотография. Архитектура» и Ирина Халезова с работой «Мир сам себя не создаст» в номинации «Digital Art. Архитектура»
Конкурс «Создавая миры» стартовал 7 марта и за месяц поступило более 650 (!) заявок. К участию в конкурсе были отобраны 85 работ в номинации «Фотография. Архитектура» и 93 работы в номинации «Digital Art. Архитектура». Их отличает особый взгляд на архитектуру, позволяющий увидеть в привычных или фантазийных формах целый мир, существующий по своим законам — прекрасным и интригующим. Индивидуальность авторского видения, смысловая и образная насыщенность, художественное качество и мастерство владения инструментами обработки изображения – эти качества требовались для участия в конкурсе «Создавая миры»
В экспертное жюри конкурса вошли представители организатора и партнёры конкурса, а также ведущие российские архитекторы, фотографы, медиахудожники и эксперты в сфере цифрового искусства. Они выбрали в финал 10 лучших работ — по 5 в каждой из номинаций. Все 10 работ, вышедших в финал конкурса «Создавая миры», были представлены на специальной экспозиции на стенде ГК «Галс-Девелопмент» на выставке-форуме АРХ МОСКВА
Следите за событиями в мире архитектурной фотографии и цифрового искусства на канале конкурса: @archiphotodigitalart
Реклама. ИП Петухова Е.Г., ИНН 772006355737, erid: 2SDnjchBRpH
Forwarded from Denis Sexy IT 🤖
This media is not supported in your browser
VIEW IN TELEGRAM
Наткнулся на дзен-тетрис – наконец-то никакого стресса, сидишь, фигурки двигаешь, выигрываешь по жизни:
https://lazytetris.com/
https://lazytetris.com/
Forwarded from Denis Sexy IT 🤖
This media is not supported in your browser
VIEW IN TELEGRAM
Если попросить чатгпт сказать «Лоо…оол» то получится идеальная искренняя реакция на многие мемы 🤝 🤝
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Адовый UX
При аварии:
1. Выдавите плёнку
2. Откройте крышку
3. Возьмите канат
Вы спасены!
1. Выдавите плёнку
2. Откройте крышку
3. Возьмите канат
Вы спасены!
Forwarded from Техно Фил
This media is not supported in your browser
VIEW IN TELEGRAM
1:0 в пользу робота (via X)
Forwarded from Shock Design