DevNotes Live
6 subscribers
84.2K photos
12K videos
195 files
35.4K links
Автоматический агрегатор IT ресурсов в Telegram (@devnotes_robot)
Информация: https://t.me/devnotes_live/121
Download Telegram
Forwarded from UI_UX inspiration
Мобильное приложение для прослушивания музыки и подкастов

Категория: #приложение
Язык: #en 

https://.com/shots/24082742-Podcast-Mobile-App
Forwarded from Shock Design
This media is not supported in your browser
VIEW IN TELEGRAM
Material Design — компания Google обновила гайдлайны материал дизайна до третьей версии.

m3.material.io
The Silver Circle

UX/UI
This media is not supported in your browser
VIEW IN TELEGRAM
Плагин Logo Creator — создайте красивый логотип, выбирая различные формы или выбирая лучший логотип из готовых коллекций из более 100 логотипов.

#вектор #графика #иконки #лого
👩‍💻 Задачка по NodeJS

Создайте приложение на Node.js, которое принимает путь к папке в качестве аргумента командной строки и создает файл report.json, содержащий статистику по этой папке: количество файлов, количество папок, и общий размер всех файлов.

Программа должна уметь выводить статистику по папке в консоль и сохранять её в файл.

➡️ Пример:

node app.js report /path/to/folder — создает файл report.json с данными о содержимом папки.
node app.js print /path/to/folder — выводит статистику о папке в консоль.

Решение задачи ⬇️

const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const readdir = promisify(fs.readdir);
const stat = promisify(fs.stat);

const action = process.argv[2];
const folderPath = process.argv[3];
const reportFile = 'report.json';

if (!action || !folderPath) {
console.log('Используйте: node app.js <report|print> <путь к папке>');
process.exit(1);
}

async function analyzeFolder(folder) {
const entries = await readdir(folder, { withFileTypes: true });
let totalSize = 0;
let fileCount = 0;
let folderCount = 0;

for (const entry of entries) {
const fullPath = path.join(folder,
entry.name);
if (entry.isDirectory()) {
folderCount++;
const { totalSize: folderSize, fileCount: folderFiles, folderCount: subFolderCount } = await analyzeFolder(fullPath);
totalSize += folderSize;
fileCount += folderFiles;
folderCount += subFolderCount;
} else if (entry.isFile()) {
const fileStats = await stat(fullPath);
fileCount++;
totalSize += fileStats.size;
}
}

return { totalSize, fileCount, folderCount };
}

async function generateReport(folder) {
const stats = await analyzeFolder(folder);
const reportData = {
folder: folder,
files: stats.fileCount,
folders: stats.folderCount,
totalSize: stats.totalSize,
};

fs.writeFile(reportFile, JSON.stringify(reportData, null, 2), (err) => {
if (err) {
console.error('Ошибка при записи отчета:', err);
process.exit(1);
}
console.log(`Отчет сохранен в ${reportFile}`);
});
}

async function printReport(folder) {
const stats = await analyzeFolder(folder);
console.log(`Папка: ${folder}`);
console.log(`Количество файлов: ${stats.fileCount}`);
console.log(`Количество папок: ${stats.folderCount}`);
console.log(`Общий размер файлов: ${stats.totalSize} байт`);
}

if (action === 'report') {
generateReport(folderPath);
} else if (action === 'print') {
printReport(folderPath);
} else {
console.log('Неизвестное действие. Используйте "report" или "print".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Приветки! Пора 🐱

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

Основная мысль статьи про рационализацию шрифтового дизайна: как проектировать шрифт через цель и контекст, через любовь к своему делу, а не через набор догм. Разбираю, почему один и тот же «правильный» принцип может быть уместен в текстовой гарнитуре и вреден в шрифте для логотипа/заголовка, как заранее задать рамки проекта и на что смотреть, чтобы шрифт реально работал в коммуникационном дизайне.

+ Большое число примеров, мои новые проекты, отсылки к мастерам (как положено), а также рабочие инструменты и небольшое практическое руководство для начинающих.


Если вы делаете брендинг, постеры, обложки — в общем то, что назвается акциденцией — это как раз тот взгляд, который экономит нервы и делает решения осмысленнее.

ЧИТАТЬ СТАТЬЮ
ЧИТАТЬ СТАТЬЮ
ЧИТАТЬ СТАТЬЮ
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Адовый UX
Очень реалистично снегом засыпало. Нихуя не видно
Forwarded from Адовый UX
> Остальное дерьмо

Обожаю, когда муниципальные службы пишут человечно и понятно, а не своём бюрократическом волапюке
Forwarded from Адовый UX
Пердетские чатки