Все о разработке backend части на JavaScript (Node JS). А так же: Express JS, Next JS, Nest, Socket.IO Канал на бирже - https://telega.in/c/we_use_js По вопросам рекламы или разработки: @g_abashkin РКН: https://vk.cc/cGhHyj
👀 Всё, о чём шепчутся в ИТ и бизнес-тусовках — уже в этой папке. Без шуму. Без "экспертов". Только факты.
/channel/addlist/uhgZXoVbHuBiNWVi
— Кто заменил 12 аналитиков одним ИИ-ассистентом и за месяц срезал издержки на 80%
— Какие SaaS теперь строят MVP без команды
— Где сейчас ИТ-специалисты зарабатывают $8-12k без стартапов и офисов
— Почему маркетинг пересобирается заново, и какие инструменты будут мёртвы через полгода
Это не мотивация. Это реальность, в которую ты опоздаешь, если промолчишь.
📁 Файлы, цифры, ссылки, инструменты — в одной тихой майской папке:
/channel/addlist/uhgZXoVbHuBiNWVi
👩💻 Как ускорить создание компонентов с помощью Plop-генератора или автоматизация рутинных задач в React
В статье рассказывается о крупной фронтенд-команде, которая работает с микросервисами и общей дизайн-системой. Несмотря на стандарты, возникали проблемы, и статья подробно раскрывает, как они были решены.
Читать...
👩💻 Задачка по NodeJS
Создайте приложение на Node.js, которое принимает URL в качестве аргумента командной строки, загружает HTML-контент по указанному URL, подсчитывает количество тегов на странице и сохраняет результат в tags.json.
➡️ Пример:
• node app.js report https://example.com
— сохраняет количество тегов HTML-страницы в файл tags.json.
• node app.js print https://example.com
— выводит статистику по тегам на странице в консоль.
Решение задачи ⬇️
const https = require('https');Читать полностью…
const fs = require('fs');
const { JSDOM } = require('jsdom');
const action = process.argv[2];
const url = process.argv[3];
function fetchHtml(url) {
return new Promise((resolve, reject) => {
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => (data += chunk));
res.on('end', () => resolve(data));
}).on('error', (err) => reject(err));
});
}
async function report(url) {
try {
const html = await fetchHtml(url);
const dom = new JSDOM(html);
const tags = Array.from(dom.window.document.getElementsByTagName('*')).map(el => el.tagName);
const tagCount = tags.reduce((acc, tag) => {
acc[tag] = (acc[tag] || 0) + 1;
return acc;
}, {});
fs.writeFileSync('tags.json', JSON.stringify(tagCount, null, 2));
console.log('Статистика сохранена в tags.json');
} catch (err) {
console.error('Ошибка:', err);
}
}
async function print(url) {
try {
const html = await fetchHtml(url);
const dom = new JSDOM(html);
const tags = Array.from(dom.window.document.getElementsByTagName('*')).map(el => el.tagName);
const tagCount = tags.reduce((acc, tag) => {
acc[tag] = (acc[tag] || 0) + 1;
return acc;
}, {});
console.log('Статистика по тегам:', tagCount);
} catch (err) {
console.error('Ошибка:', err);
}
}
if (action === 'report') {
report(url);
} else if (action === 'print') {
print(url);
} else {
console.log('Используйте команды: report <URL> или print <URL>');
}
👩💻 Как деструктуризация массивов может замедлить JavaScript код
В статье объясняется, как деструктуризация массивов может замедлить JavaScript код. Рассматриваются различия в байткоде и проводится тест, показывающий, почему ArrayAssignmentPattern не всегда оптимален.
Читать...
➡️ Самые интересные статьи за последние дни:
• Как поднять свой WebSocket сервер на Node.js: основы
• Телеграм-бот на Node.js/grammY: Диалоги
• SOLID на котиках
• Создание простой CRM на Next.js и Prisma для B2B
• Как сделать React Server Components в Electron с помощью Next.js и без открытых портов
⚠️ Устранение причины всегда важнее устранения ошибки
Починил баг, протестировал — всё работает. Но через неделю проблема снова вылезла с другой стороны.
👉 Совет: копай глубже. Если видишь ошибку, задай себе вопрос: «Почему она возникла?» Ищи корневую причину. Иногда исправление следствия только замаскирует реальную проблему — и она вернётся в самом неожиданном месте.
👩💻 Универсальность данных: API геттер и сеттер
Когда я консультирую клиентов по работе с API, то рекомендую никогда не обращаться к API напрямую.
Читать...
📈 Подборка статей для вашей карьеры
• Сила лидерского слушания
• Как пройти стажировку бизнес- и системного аналитика и не «сгореть» в персональной преисподней
• «Так и знала, что вы — бывший двоечник!» Самые глупые ошибки моей компьютерной молодости
• Что лучше — оценка рекрутера или подбрасывание монетки?
• Мотивационные стили в обучении: почему вам (возможно) не нужны цели или общение с одногруппниками
👩💻 Проблемы экспорта по умолчанию в JavaScript модулях
JavaScript модули позволяют организовывать код для повторного использования. Существует два метода экспорта: по умолчанию и именованный. В этой статье разбираем экспорт по умолчанию и причины, почему его стоит избегать.
Читать...
👩💻 Задачка по 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".');
}
👩💻 Управляйте промисами используя Promise.withResolvers()
Метод Promise.withResolvers()
повышает гибкость, позволяя удалённо разрешать или отклонять промисы, упрощая и оптимизируя асинхронный код.
Читать...
➡️ Самые интересные статьи за последние дни:
• SMS-автоответчик с обновлением статуса: еще один канал связи для клиентов, которым мало интернета и звонков
• Попробуйте Tauri
• Новый оператор безопасного присваивания в JavaScript: ?=
• Как ускорить компонентную frontend-разработку с помощью продуктового подхода: опыт Рунити
• PostgreSQL Antipatterns: валим «слона» — highload на ровном месте
🔀 Учись читать код глазами "чужого разработчика"
К своему коду привыкаешь, и мозг прощает ему косяки. А новый человек увидит все слабые места сразу.
👉 Совет: через день-два после написания функции прочитай её, как будто видишь в первый раз. Если что-то кажется мутным или неочевидным — перепиши. Чистота кода начинается с честности перед собой.
👩💻 Дата и время в JavaScript
Учимся работать с датой и временем в JavaScript: разбираемся с определением и способом создания объекта Data, его методами и форматами вывода.
Читать...
📈 Подборка статей для вашей карьеры
• Центральный Университет: взгляд магистра изнутри (1 семестр)
• Стартап vs корпорации vs предпринимательство: кому, куда и зачем?
• Почему соискателям не стоит постить нюдсы, что такое culture fit и чем IT-индустрия напоминает подростка
• Лидерами рождаются или становятся? Откуда берутся управленцы и лидеры в IT
• Работать или переработать: как победить в себе заядлого удаленщика
Курсы JAVA-разработки Гарантия ЗП от 120 000р в договоре
Jаvа — это язык, на котором строятся банковские системы, мобильные приложения, крупные веб-сервисы и многое другое, а спрос на Jаvа-разработчиков стабильно высок. Благодаря кроссплатформенности и надежности, ты сможешь работать в любой сфере IТ — от финансов до Коммерческой отрасли.📊💰
Почему это работает?✨
- Минимальные вложения.
- Тысячи человек уже в IТ. Наши выпускники работают в крутых компаниях: от стартапов до международных корпораций.
- Наши менторы — это опытные разработчики, которые ежедневно работают в IТ и готовы делиться актуальными знаниями.
P.S. Если всё ещё сомневаешься и думаешь что будет сложно — просто попробуй.😊
Мы берем на себя все риски: ты оплачиваешь основную стоимость обучения только после успешного трудоустройства — это закреплено в договоре.
Подать заявку
#реклама 16+
kata.academy
О рекламодателе
👩💻 Как я искал рекомендации аналитиков по покупке российских ценных бумаг в JSON формате
В статье рассказывается о создании системы для поиска недооценённых акций на российском рынке, используя данные аналитиков. Рассматривается, как собирать прогнозы для 89 акций с Московской биржи и анализировать их точность.
Читать...
👩💻 HMPL — лучшая альтернатива HTMX
В данной статье рассмотрим такой javascript модуль как HMPL и как он может заменить HTMX в проекте. Также, рассмотрим в чём их отличия, преимущества и недостатки.
Читать...
⚙️ Паттерн «Бэкенд для фронтенда»: преимущества, недостатки и лучшие практики для реализации
Если ты хочешь стать настоящим мастером API, тебе нужно знать о паттерне BFF. В этой статье рассказываем, как создавать управляемую архитектуру с использованием BFF, избегая избыточной сложности и головной боли при поддержке.
Читать...
🖥 Использование ChatGPT для автоматизации генерации кода в JS-проекте
В статье рассматривается, как с помощью ChatGPT можно автоматизировать генерацию однотипного кода для телеграм-ботов, ускорить процесс разработки и избавиться от рутинных задач при работе с шаблонами.
Читать...
👩💻 Корутины: stackful vs stackless
В статье разберемся, что такое stackless и stackful корутины, их основные отличия, плюсы и минусы. Я объясню это простым языком, чтобы даже сложные концепции многопоточности были легко понятны.
Читать...
👩💻 Якорные ссылки и как их сделать потрясающими
Якорные ссылки — простой способ создать навигацию по странице. Например, в оглавлении можно использовать якорные ссылки для перехода к различным разделам страницы.
Читать...
👩💻 В чём разница между exports и module.exports
Вы знаете в чём разница между exports и module.exports в Node.js? Для начала рассмотрим, что представляет собой объект модуля.
Читать...
➡️ Создание конфигурируемого Webhook-модуля для NestJS-приложении
В рамках этой статьи я опишу создание двух NestJS-модулей с различным способом конфигурирования: утилитарный модуль и бизнес-модуль со своей базой данных.
Читать...
📊 Обзор лучших библиотек для визуализации данных в 2024 году
Визуализация данных — важная часть любого проекта, связанного с аналитикой и обработкой данных. Мы рассмотрим 7 библиотек: Plotly, D3.js, Nivo, Latitude, Apache ECharts, Victory и Chart.js.
Читать...
👩💻 Переменные среды/окружения в Node.js: Как правильно их установить
В этой статье мы погрузимся в мир переменных среды в Node.js, рассмотрим их преимущества, примеры использования и лучшие практики эффективного управления ими.
Читать...
⚙️ PostgreSQL Antipatterns: валим «слона» — highload на ровном месте
Сегодняшняя тема посвящена нелегким взаимоотношениям клиентского приложения и сервера PostgreSQL: как на ровном месте, неудачной архитектурой приложения, можно обеспечить себе хронические проблемы производительности.
Читать...
👩💻 Как запустить несколько приложений React на одном порту Nginx с Docker
Разместим на одном порту два приложения React с Nginx и Docker. Настроим Docker, добавим конфигурацию Nginx глобально и файл docker-compose.yml.
Читать...
👩💻 Как преобразовать Node.js Buffer в String
При преобразовании между Buffer и String может быть указана кодировка символов. Если кодировка не указана, по умолчанию будет использоваться UTF-8
Читать...
📂 Мы делимся с вами папкой «IT», в которой собрали статьи с полезными советами от экспертов в сфере IT.
⚙️ Внутри вас ждет:
🟠 Статья "Экономика инференса LLM: локальный vs облако"
🟠 Вайб-кодинг что это ?
🟠 Качество требований в IT-проектах.
🟠 И еще 28 полезные статьи, которые прокачают ваши навыки.
🔗 А мы с вами делимся статьёй: «СЮДА ВСТАВИТЬ ТЕМУ СТАТЬИ / ПОСТА».
✔️ Сохраняйте папку « IT», чтобы быть в курсе всех новостей в мире IT и не только!
⚡️ ПОДПИСАТЬСЯ ⚡️