𝚋𝚊𝚍𝚟𝚒𝚋𝚎𝚜 𝚏𝚘𝚛𝚎𝚟𝚎𝚛
32 subscribers
405 photos
62 videos
4 files
81 links
Download Telegram
хотел похвастаться что у нас снег выпал, но с меня хуевый фотограф
31
трек прикольный
а в чем я не прав…
21
хорошее напоминание о том, почему важно правильно проектировать базы данных…….👍🏻
2
Привет. (черновик)

вроде всё есть, а будто ничего нет. в 17 лет у меня уже есть квартира, кошка, девушка, сетап, интернет, даже еда в холодильнике… ну… хоть и не всегда конечно, но есть. и всё равно иногда ловлю пустоту внутри, как будто весь этот комфорт не имеет запаха, как будто живу не я, а какая-то версия меня, которая просто выполняет расписание.

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

иногда думаю, что может я слишком рано стал взрослым. пока другие только мечтают о своей комнате, я уже знаю цену аренды, вкус одиночества и странное чувство, когда всё работает, а счастья нет. когда вроде бы выиграл, но не чувствуешь победу, а только усталость, будто жизнь уже случилась, и теперь просто продолжается по привычке.

девушка приходит по выходным… и будто весь шум в голове стихает. мы валяемся целыми днями, смеёмся, едим, спорим о ерунде. и в эти моменты я понимаю, что именно она держит меня от полного провала в одиночество. что без неё этот город казался бы слишком холодным. она как фильтр между мной и пустотой, умеет молчать правильно, обнимать так, что даже стены дышат теплее. я не называю это спасением, но иногда думаю, что если бы не она, то я б просто растворился в тишине, где нет ни голоса, ни смысла, только эхо своих же мыслей.

я часто смотрю на свой стол: провода, мышь, свет монитора, пустая чашка, кошка на клаве лежит. и думаю, что в этих мелочах больше правды, чем в любых словах о будущем. потому что будущее сейчас не чувствуется.. оно где-то далеко, а я просто существую между пульсацией курсора и отражением в экране.

все говорят, что я далеко ушёл, что в 17 у меня уже есть всё, о чём они только мечтают. но я не чувствую этого “дальше”, это не движение, это просто скорость без направления. я не впереди и не позади, я просто между, где нет ни восторга, ни страха. только странное равновесие, которое иногда кажется покоем, а иногда — безжизненностью.

может, это и есть ¿взросление?, когда перестаёшь гнаться, перестаёшь верить, что что-то внешнее изменит внутри. остаёшься наедине с собой и понимаешь, что теперь всё зависит от того, сможешь ли ты сам себя услышать, а не просто заполнить время.

или, может, это просто осень такая серая, вязкая, с запахом сырости. в которой даже радость звучит приглушённо. и хочется не счастья, а простого тепла, ну чтоб хоть что-то горело, хоть маленький огонёк. чтобы стало понятно: я ещё жив, я ещё чувствую. просто устал.
3
Привет.

новичковский js код который режет глаза. все думают «ну работает же, и ладно»…

const express = require('express')
const app = express()

app.get('/', (req, res) => {
res.send('ok')
})

app.listen(3000)


работает, все довольны, но опытный кодер сразу видит проблему — так приложение нельзя нормально тестировать, переносить, использовать в serverless или в любом другом модуле. и если проект вырастет, этот “нормальный код” превратится в кошмар.

правильный подход, это… отделять создание приложения от запуска:

// app.js
const express = require('express')
const app = express()

app.get('/', (req, res) => {
res.send('ok')
})

module.exports = app


// server.js
const app = require('./app')
app.listen(process.env.PORT || 3000)


разница на первый взгляд невидимая, но она огромная:
• можно легко писать unit-тесты
• можно использовать приложение в serverless или других сценариях
• код становится чистым и модульным
• проще управлять окружением через переменные (process.env.PORT)

это именно тот тонкий момент, который отличает нуба от профи, вроде всё работает, но архитектура проекта уже на другом уровне ;)

если хочешь расти как разработчик, то учись видеть такие мелочи, отделять логику от запуска и строить проект как настоящий профи.
Кстати…

ты когда-нибудь запускал свой сервер и через час думал «бля, я же забыл прописать переменную окружения» и всё сломалось? или запускал бота, вроде всё работает, но при первом запросе выскакивает какая‑то странная ошибка и ты тратишь час, чтобы понять что PORT был строкой, а должен быть числом? если да — ты точно сталкивался с болью, которая не видна сразу, но убивает весь день.

переменные окружения — это одновременно и спасение, и проклятие. с одной стороны они позволяют хранить пароли, адреса баз, ключи API отдельно от кода. с другой — если хоть что‑то пропущено, неправильно прописано или использовано без проверки, твой сервер просто разваливается. и самое обидное — ошибки проявляются не сразу.

тут на сцену выходит envalid — маленькая библиотека для node.js, которая делает жизнь проще и спокойнее. она валидирует переменные окружения на старте, гарантирует что они имеют правильный тип, и если чего‑то нет — сервер падает сразу, а не через час. она создаёт ясность, порядок и уверенность в том, что твоя среда настроена как надо.

почему это реально важно:
• забыл указать PORT? сервер может стартовать, но всё упадёт при первом подключении
• DB_HOST пустой? сначала работает локально, потом на проде падает — час дебага гарантирован
• неправильный тип переменной: boolean вместо числа, строка вместо URL — сложно найти и исправить
• “тихие” ошибки, которые проявляются только при определённых сценариях — envalid ловит их сразу

короче, если не использовать проверку — рано или поздно это выстрелит в спину.

библиотека даёт набор валидаторов для разных типов данных:
• str() — строка
• num() — число
• bool() — true/false
• url() — проверка на валидный URL
• json() — если хочешь хранить объект или массив в переменной окружения
• makeValidator() — создать свой валидатор под особые задачи

и главное — всё это иммутабельно. переменные нельзя случайно поменять во время работы. это как зафиксировать фундамент дома, чтобы стены не поехали.

const { cleanEnv, str, num, bool, url } = require('envalid');
require('dotenv').config(); // если используешь .env

const env = cleanEnv(process.env, {
NODE_ENV: str({ choices: ['development', 'production', 'test'] }),
PORT: num({ default: 3000 }),
USE_CACHE: bool({ default: false }),
DATABASE_URL: url(),
});

console.log('сервер запущен на порту', env.PORT)
console.log('используем кэш:', env.USE_CACHE)
console.log('подключаемся к базе:', env.DATABASE_URL)


если переменная DATABASE_URL не задана или задана не как URL — сервер не запустится. ты увидишь ошибку сразу и сможешь исправить.

дополнительные фишки:
• можно создавать свои валидаторы через makeValidator
• поддержка JSON — удобно хранить конфиги
• можно комбинировать с dotenv и .env файлами
• дефолтные значения — для локалки, тестов или фич, которые не критичны

живые кейсы:
1. забыл DB_HOST
сервер стартует, но при первом запросе к базе падает. час поиска: «где ошибка?» envalid бы сразу сказал — «нет DB_HOST, остановка».
2. неправильный PORT
на проде ты ставишь PORT=‘3000’ строкой, а в коде ждёшь число. сервер вроде стартует, но при bind к сокету падает. envalid поймал бы это сразу.
3. случайный опционал
переменная USE_CACHE иногда нужна, иногда нет. с envalid можно задать дефолт: false. сервер работает без лишней головной боли.

почему это лучше, чем просто process.env.X || default:
• ты видишь всё на старте, а не в процессе работы
• тип переменной гарантирован
• иммутабельность — никто случайно не поменяет значение
• читаемость — сразу видно, какие переменные нужны для работы
• лёгкая интеграция с dotenv

если ты пишешь бэкенд на Node.js или телеграм‑бота на Telegraf.js:

require('dotenv').config()
const { cleanEnv, str, num, bool } = require('envalid')

const env = cleanEnv(process.env, {
NODE_ENV: str({ choices: ['development','production'] }),
PORT: num({ default: 3000 }),
DB_HOST: str(),
DB_PORT: num(),
})

console.log('среда', env.NODE_ENV)
console.log('порт', env.PORT)
console.log('база', env.DB_HOST, env.DB_PORT)
2