Get Lucky
Daft Punk feat. Pharrell Williams, Nile Rodgers
немножкааа треков от меня
❤2
Привет. (черновик)
вроде всё есть, а будто ничего нет. в 17 лет у меня уже есть квартира, кошка, девушка, сетап, интернет, даже еда в холодильнике… ну… хоть и не всегда конечно, но есть. и всё равно иногда ловлю пустоту внутри, как будто весь этот комфорт не имеет запаха, как будто живу не я, а какая-то версия меня, которая просто выполняет расписание.
просыпаюсь поздно. кулеры гудят, кошка крутится у ног. за окном — та же площадка, идеально ровные стены, тишина такая, что слышно, как в батареях проходит воздух. делаю чай, включаю экран: лента, музыка, тени на полу — и всё будто живое, но не откликается, не зажигает. просто есть, как фон.
иногда думаю, что может я слишком рано стал взрослым. пока другие только мечтают о своей комнате, я уже знаю цену аренды, вкус одиночества и странное чувство, когда всё работает, а счастья нет. когда вроде бы выиграл, но не чувствуешь победу, а только усталость, будто жизнь уже случилась, и теперь просто продолжается по привычке.
девушка приходит по выходным… и будто весь шум в голове стихает. мы валяемся целыми днями, смеёмся, едим, спорим о ерунде. и в эти моменты я понимаю, что именно она держит меня от полного провала в одиночество. что без неё этот город казался бы слишком холодным. она как фильтр между мной и пустотой, умеет молчать правильно, обнимать так, что даже стены дышат теплее. я не называю это спасением, но иногда думаю, что если бы не она, то я б просто растворился в тишине, где нет ни голоса, ни смысла, только эхо своих же мыслей.
я часто смотрю на свой стол: провода, мышь, свет монитора, пустая чашка, кошка на клаве лежит. и думаю, что в этих мелочах больше правды, чем в любых словах о будущем. потому что будущее сейчас не чувствуется.. оно где-то далеко, а я просто существую между пульсацией курсора и отражением в экране.
все говорят, что я далеко ушёл, что в 17 у меня уже есть всё, о чём они только мечтают. но я не чувствую этого “дальше”, это не движение, это просто скорость без направления. я не впереди и не позади, я просто между, где нет ни восторга, ни страха. только странное равновесие, которое иногда кажется покоем, а иногда — безжизненностью.
может, это и есть ¿взросление?, когда перестаёшь гнаться, перестаёшь верить, что что-то внешнее изменит внутри. остаёшься наедине с собой и понимаешь, что теперь всё зависит от того, сможешь ли ты сам себя услышать, а не просто заполнить время.
или, может, это просто осень такая серая, вязкая, с запахом сырости. в которой даже радость звучит приглушённо. и хочется не счастья, а простого тепла, ну чтоб хоть что-то горело, хоть маленький огонёк. чтобы стало понятно: я ещё жив, я ещё чувствую. просто устал.
вроде всё есть, а будто ничего нет. в 17 лет у меня уже есть квартира, кошка, девушка, сетап, интернет, даже еда в холодильнике… ну… хоть и не всегда конечно, но есть. и всё равно иногда ловлю пустоту внутри, как будто весь этот комфорт не имеет запаха, как будто живу не я, а какая-то версия меня, которая просто выполняет расписание.
просыпаюсь поздно. кулеры гудят, кошка крутится у ног. за окном — та же площадка, идеально ровные стены, тишина такая, что слышно, как в батареях проходит воздух. делаю чай, включаю экран: лента, музыка, тени на полу — и всё будто живое, но не откликается, не зажигает. просто есть, как фон.
иногда думаю, что может я слишком рано стал взрослым. пока другие только мечтают о своей комнате, я уже знаю цену аренды, вкус одиночества и странное чувство, когда всё работает, а счастья нет. когда вроде бы выиграл, но не чувствуешь победу, а только усталость, будто жизнь уже случилась, и теперь просто продолжается по привычке.
девушка приходит по выходным… и будто весь шум в голове стихает. мы валяемся целыми днями, смеёмся, едим, спорим о ерунде. и в эти моменты я понимаю, что именно она держит меня от полного провала в одиночество. что без неё этот город казался бы слишком холодным. она как фильтр между мной и пустотой, умеет молчать правильно, обнимать так, что даже стены дышат теплее. я не называю это спасением, но иногда думаю, что если бы не она, то я б просто растворился в тишине, где нет ни голоса, ни смысла, только эхо своих же мыслей.
я часто смотрю на свой стол: провода, мышь, свет монитора, пустая чашка, кошка на клаве лежит. и думаю, что в этих мелочах больше правды, чем в любых словах о будущем. потому что будущее сейчас не чувствуется.. оно где-то далеко, а я просто существую между пульсацией курсора и отражением в экране.
все говорят, что я далеко ушёл, что в 17 у меня уже есть всё, о чём они только мечтают. но я не чувствую этого “дальше”, это не движение, это просто скорость без направления. я не впереди и не позади, я просто между, где нет ни восторга, ни страха. только странное равновесие, которое иногда кажется покоем, а иногда — безжизненностью.
может, это и есть ¿взросление?, когда перестаёшь гнаться, перестаёшь верить, что что-то внешнее изменит внутри. остаёшься наедине с собой и понимаешь, что теперь всё зависит от того, сможешь ли ты сам себя услышать, а не просто заполнить время.
или, может, это просто осень такая серая, вязкая, с запахом сырости. в которой даже радость звучит приглушённо. и хочется не счастья, а простого тепла, ну чтоб хоть что-то горело, хоть маленький огонёк. чтобы стало понятно: я ещё жив, я ещё чувствую. просто устал.
❤3
Привет.
новичковский js код который режет глаза. все думают «ну работает же, и ладно»…
работает, все довольны, но опытный кодер сразу видит проблему — так приложение нельзя нормально тестировать, переносить, использовать в serverless или в любом другом модуле. и если проект вырастет, этот “нормальный код” превратится в кошмар.
правильный подход, это… отделять создание приложения от запуска:
разница на первый взгляд невидимая, но она огромная:
• можно легко писать unit-тесты
• можно использовать приложение в serverless или других сценариях
• код становится чистым и модульным
• проще управлять окружением через переменные (process.env.PORT)
это именно тот тонкий момент, который отличает нуба от профи, вроде всё работает, но архитектура проекта уже на другом уровне ;)
если хочешь расти как разработчик, то учись видеть такие мелочи, отделять логику от запуска и строить проект как настоящий профи.
новичковский 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() — создать свой валидатор под особые задачи
и главное — всё это иммутабельно. переменные нельзя случайно поменять во время работы. это как зафиксировать фундамент дома, чтобы стены не поехали.
если переменная DATABASE_URL не задана или задана не как URL — сервер не запустится. ты увидишь ошибку сразу и сможешь исправить.
дополнительные фишки:
• можно создавать свои валидаторы через makeValidator
• поддержка JSON — удобно хранить конфиги
• можно комбинировать с dotenv и .env файлами
• дефолтные значения — для локалки, тестов или фич, которые не критичны
живые кейсы:
1. забыл DB_HOST
сервер стартует, но при первом запросе к базе падает. час поиска: «где ошибка?» envalid бы сразу сказал — «нет DB_HOST, остановка».
2. неправильный PORT
на проде ты ставишь PORT=‘3000’ строкой, а в коде ждёшь число. сервер вроде стартует, но при bind к сокету падает. envalid поймал бы это сразу.
3. случайный опционал
переменная USE_CACHE иногда нужна, иногда нет. с envalid можно задать дефолт: false. сервер работает без лишней головной боли.
почему это лучше, чем просто
• ты видишь всё на старте, а не в процессе работы
• тип переменной гарантирован
• иммутабельность — никто случайно не поменяет значение
• читаемость — сразу видно, какие переменные нужны для работы
• лёгкая интеграция с dotenv
если ты пишешь бэкенд на Node.js или телеграм‑бота на Telegraf.js:
ты когда-нибудь запускал свой сервер и через час думал «бля, я же забыл прописать переменную окружения» и всё сломалось? или запускал бота, вроде всё работает, но при первом запросе выскакивает какая‑то странная ошибка и ты тратишь час, чтобы понять что 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