🌐
Nginx (engine-x) — один из самых популярных веб-серверов в мире.
Создан для высокой нагрузки, он легко обслуживает тысячи одновременных соединений и почти не расходует ресурсы.
🔥 Почему Nginx так любят?
⚡️ Высокая производительность — событийная модель вместо тяжелых потоков.
🧊 Идеален для статики — картинки, файлы, сайты загружаются молниеносно.
🔁 Reverse Proxy — пропускает запросы к backend'ам (Node.js, Python, Go и т.д.).
⚙️ Load Balancer — распределяет нагрузку по нескольким серверам.
🔐 Удобная работа с HTTPS — легко поднимает TLS.
🧱 Гибкая конфигурация — всё через простой nginx.conf.
📌 Где используется?
как фронт сервер для приложений
как API-gateway
в Docker/Kubernetes
на высоконагруженных сайтах, CDN, стримингах
📚Docs: https://nginx.org/en/docs/index.html
🌐GitHub: https://github.com/nginx/nginx
#web
Nginx — быстрый, лёгкий, мощныйNginx (engine-x) — один из самых популярных веб-серверов в мире.
Создан для высокой нагрузки, он легко обслуживает тысячи одновременных соединений и почти не расходует ресурсы.
🔥 Почему Nginx так любят?
⚡️ Высокая производительность — событийная модель вместо тяжелых потоков.
🧊 Идеален для статики — картинки, файлы, сайты загружаются молниеносно.
🔁 Reverse Proxy — пропускает запросы к backend'ам (Node.js, Python, Go и т.д.).
⚙️ Load Balancer — распределяет нагрузку по нескольким серверам.
🔐 Удобная работа с HTTPS — легко поднимает TLS.
🧱 Гибкая конфигурация — всё через простой nginx.conf.
📌 Где используется?
как фронт сервер для приложений
как API-gateway
в Docker/Kubernetes
на высоконагруженных сайтах, CDN, стримингах
📚Docs: https://nginx.org/en/docs/index.html
🌐GitHub: https://github.com/nginx/nginx
#web
✅ Dokploy — деплой без боли и лишней магии
⚙️Dokploy — это современная платформа для деплоя приложений, которая делает управление серверами и контейнерами простым, понятным и приятным.
🔧 Что умеет Dokploy?
✅ Деплой приложений через Docker
✅ Удобная Web-панель для управления проектами
✅ Поддержка GitHub / GitLab — деплой по push
✅ Автоматический SSL (Let’s Encrypt)
✅ Простая настройка доменных имен
✅ Управление переменными окружения
✅ Мониторинг и логи в одном месте
🎯 Кому подойдёт?
✔️ Backend и Fullstack-разработчикам
✔️ Стартапам
🌐 Официальный сайт: https://dokploy.com
#web #devops
⚙️Dokploy — это современная платформа для деплоя приложений, которая делает управление серверами и контейнерами простым, понятным и приятным.
🔧 Что умеет Dokploy?
✅ Деплой приложений через Docker
✅ Удобная Web-панель для управления проектами
✅ Поддержка GitHub / GitLab — деплой по push
✅ Автоматический SSL (Let’s Encrypt)
✅ Простая настройка доменных имен
✅ Управление переменными окружения
✅ Мониторинг и логи в одном месте
🎯 Кому подойдёт?
✔️ Backend и Fullstack-разработчикам
✔️ Стартапам
🌐 Официальный сайт: https://dokploy.com
#web #devops
👍1
✅ gRPC и Go (Golang)
📚Если REST уже стал привычным инструментом, самое время познакомиться с gRPC — быстрым и строгим способом общения сервисов между собой
Что такое gRPC?
gRPC — это RPC-фреймворк от Google, который:
* использует HTTP/2
* передаёт данные через Protocol Buffers
* отлично подходит для микросервисов
* быстрее и компактнее REST + JSON
⚙️Базовый флоу работы с gRPC в Go:
1️⃣Описываем контракт в
2️⃣ Генерируем код:
3️⃣ Реализуем server (структура + методы)
4️⃣ Поднимаем gRPC-сервер
5️⃣ Пишем client и вызываем методы как обычные функции
Пример RPC-метода:
Когда стоит выбирать
✔️ микросервисы
✔️ высокая нагрузка
✔️ строгие контракты между сервисами
✔️ внутренняя коммуникация
#web #backend #go
📚Если REST уже стал привычным инструментом, самое время познакомиться с gRPC — быстрым и строгим способом общения сервисов между собой
Что такое gRPC?
gRPC — это RPC-фреймворк от Google, который:
* использует HTTP/2
* передаёт данные через Protocol Buffers
* отлично подходит для микросервисов
* быстрее и компактнее REST + JSON
⚙️Базовый флоу работы с gRPC в Go:
1️⃣Описываем контракт в
.proto2️⃣ Генерируем код:
protoc --go_out=. --go-grpc_out=. service.proto
3️⃣ Реализуем server (структура + методы)
4️⃣ Поднимаем gRPC-сервер
5️⃣ Пишем client и вызываем методы как обычные функции
Пример RPC-метода:
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}Когда стоит выбирать
gRPC?✔️ микросервисы
✔️ высокая нагрузка
✔️ строгие контракты между сервисами
✔️ внутренняя коммуникация
#web #backend #go
🤔1
✅Fabric — лучший старт для моддинга Minecraft
Если хочешь создавать собственные моды для Minecraft или развивать уже существующие — обрати внимание на Fabric. Это лёгкий, быстрый и гибкий инструмент, который стал стандартом для моддеров, которым важны производительность и актуальность.
✨ Почему Fabric?
⚡️ Лёгкий и быстрый — минимальная нагрузка, работает даже на слабых устройствах.
🧩 Модульность — чёткая структура, которую легко понимать и расширять.
🚀 Быстро обновляется — новые версии игры поддерживаются почти сразу после выхода.
🛠 Fabric API — удобная библиотека с готовыми инструментами для разработки.
🤝 Большое комьюнити — множество примеров, гайдов и открытого кода.
Docs: https://docs.fabricmc.net/
#gamedev
Если хочешь создавать собственные моды для Minecraft или развивать уже существующие — обрати внимание на Fabric. Это лёгкий, быстрый и гибкий инструмент, который стал стандартом для моддеров, которым важны производительность и актуальность.
✨ Почему Fabric?
⚡️ Лёгкий и быстрый — минимальная нагрузка, работает даже на слабых устройствах.
🧩 Модульность — чёткая структура, которую легко понимать и расширять.
🚀 Быстро обновляется — новые версии игры поддерживаются почти сразу после выхода.
🛠 Fabric API — удобная библиотека с готовыми инструментами для разработки.
🤝 Большое комьюнити — множество примеров, гайдов и открытого кода.
Docs: https://docs.fabricmc.net/
#gamedev
🤔1
Какие посты вы ждёте больше ?
Anonymous Poll
30%
backend
30%
frontend
20%
Computer Since
30%
DevOps
30%
Leet Code/Алгоримты и структура данных
10%
useful lib/framework
✅Двусвязный список (Doubly Linked List)
Двусвязный список — структура данных, где каждый узел хранит:
✔️значение
✔️ссылку на следующий узел (next)
✔️ссылку на предыдущий узел (prev)
1️⃣Узел списка:
2️⃣Двусвязный список:
3️⃣Вставка в начало — O(1)
4️⃣Обход списка — O(n)
#ComputerScience #algorithms
Двусвязный список — структура данных, где каждый узел хранит:
✔️значение
✔️ссылку на следующий узел (next)
✔️ссылку на предыдущий узел (prev)
1️⃣Узел списка:
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
2️⃣Двусвязный список:
class DoublyLinkedList:
def __init__(self):
self.head = None
3️⃣Вставка в начало — O(1)
def add_front(self, data):
new_node = Node(data)
if self.head:
self.head.prev = new_node
new_node.next = self.head
self.head = new_node
4️⃣Обход списка — O(n)
def print_list(self):
current = self.head
while current:
print(current.data, end=" <-> ")
current = current.next
print("None")
#ComputerScience #algorithms
🔥1
🗄 S3-хранилище — просто и практично
📚S3 (Simple Storage Service) — это объектное хранилище.
Вместо папок и файлов — бакеты и объекты.
Используется для:
✔️загрузки файлов (аватарки, документы, видео)
✔️бэкапов
✔️логов
✔️статики для сайтов
✔️микросервисов (через API)
💡Базовые понятия
✔️Bucket — контейнер (как корневая папка)
✔️Object — файл + метаданные
✔️Key — путь к объекту (images/avatar.png)
✔️S3 API — HTTP API для работы с файлами
🐳 Локальный запуск S3 хранилища через Docker (MinIO):
▶️ После запуска:
* S3 endpoint: http://localhost:9000
* UI: http://localhost:9001
* Логин: admin / admin123
Продолжение 👇
📚S3 (Simple Storage Service) — это объектное хранилище.
Вместо папок и файлов — бакеты и объекты.
Используется для:
✔️загрузки файлов (аватарки, документы, видео)
✔️бэкапов
✔️логов
✔️статики для сайтов
✔️микросервисов (через API)
💡Базовые понятия
✔️Bucket — контейнер (как корневая папка)
✔️Object — файл + метаданные
✔️Key — путь к объекту (images/avatar.png)
✔️S3 API — HTTP API для работы с файлами
🐳 Локальный запуск S3 хранилища через Docker (MinIO):
# docker-compose.yml
version: "3.9"
services:
minio:
image: minio/minio
container_name: minio
command: server /data --console-address ":9001"
ports:
- "9000:9000" # S3 API
- "9001:9001" # Web UI
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: admin123
volumes:
- minio-data:/data
volumes:
minio-data:
▶️ После запуска:
* S3 endpoint: http://localhost:9000
* UI: http://localhost:9001
* Логин: admin / admin123
Продолжение 👇
❤1
Full stack dev
🗄 S3-хранилище — просто и практично 📚S3 (Simple Storage Service) — это объектное хранилище. Вместо папок и файлов — бакеты и объекты. Используется для: ✔️загрузки файлов (аватарки, документы, видео) ✔️бэкапов ✔️логов ✔️статики для сайтов ✔️микросервисов…
После запуска S3, можно подключится к ниму, через любой язык программирования.
✅Пример кода (Python — самый короткий и читаемый)
💡 Где это реально применяют
Backend → загружает файлы → отдает ссылку
Frontend → загружает напрямую в S3 (presigned URL)
Kubernetes → хранение артефактов
#backend #devOps
✅Пример кода (Python — самый короткий и читаемый)
pip install boto3
import boto3
s3 = boto3.client(
"s3",
endpoint_url="http://localhost:9000",
aws_access_key_id="admin",
aws_secret_access_key="admin123",
region_name="us-east-1",
)
bucket = "files"
# создать бакет
s3.create_bucket(Bucket=bucket)
# загрузить файл
s3.put_object(
Bucket=bucket,
Key="hello.txt",
Body=b"Hello S3!"
)
# скачать файл
obj = s3.get_object(Bucket=bucket, Key="hello.txt")
print(obj["Body"].read().decode())
💡 Где это реально применяют
Backend → загружает файлы → отдает ссылку
Frontend → загружает напрямую в S3 (presigned URL)
Kubernetes → хранение артефактов
#backend #devOps
🤔1
Работа языко программирования №1
Многие из вас, сейчас читающих данный пост, умеют писать код на разных языках. Но немногие понимают и знают работу этих языков, то, как они реализованы, и то, что происходит, когда вы запускаете свой код. Данный пост открывает арку постов, связанных с этой темой; все последующие посты — 3–4 шт.
Многие из вас, сейчас читающих данный пост, умеют писать код на разных языках. Но немногие понимают и знают работу этих языков, то, как они реализованы, и то, что происходит, когда вы запускаете свой код. Данный пост открывает арку постов, связанных с этой темой; все последующие посты — 3–4 шт.
Любой написанный код является просто набором байтов в памяти, но с компилятором наш код обретает логическую интерпретацию. Данное превращение из набора символов в набор команд делится на 8 этапов:
1. Лексический анализ (Lexical analysis)
2. Синтаксический анализ (Parsing)
3. Семантический анализ
4. Построение промежуточного представления (IR)
5. Оптимизации (Compile-time optimizations)
6. Генерация кода
7. Линковка (Linking)
8. Бинарник / байткод
Каждый из этапов мы отдельно рассмотрим, и пример реализации каждого слоя будет представлен на Node.js или Python.
1. Лексический анализ (Lexical analysis)
2. Синтаксический анализ (Parsing)
3. Семантический анализ
4. Построение промежуточного представления (IR)
5. Оптимизации (Compile-time optimizations)
6. Генерация кода
7. Линковка (Linking)
8. Бинарник / байткод
Каждый из этапов мы отдельно рассмотрим, и пример реализации каждого слоя будет представлен на Node.js или Python.
🤯1
Лексический анализ — это первый этап компиляции.
На этом этапе исходный код разбивается на последовательность токенов.
Лексер читает поток символов, группирует их в лексемы и классифицирует согласно правилам языка.
Пробелы, табуляции, переносы строк и комментарии обычно игнорируются.
Результатом работы является поток токенов, который передаётся на этап синтаксического анализа.
Пример:
выходит:
На этом этапе исходный код разбивается на последовательность токенов.
Лексер читает поток символов, группирует их в лексемы и классифицирует согласно правилам языка.
Пробелы, табуляции, переносы строк и комментарии обычно игнорируются.
Результатом работы является поток токенов, который передаётся на этап синтаксического анализа.
Пример:
int a = 10 + b
выходит:
KEYWORD(int)
IDENTIFIER(a)
ASSIGN
NUMBER(10)
PLUS
IDENTIFIER(b)
SEMICOLON
Full stack dev
Лексический анализ — это первый этап компиляции. На этом этапе исходный код разбивается на последовательность токенов. Лексер читает поток символов, группирует их в лексемы и классифицирует согласно правилам языка. Пробелы, табуляции, переносы строк и комментарии…
Пример кода на python:
При запуске:
Token(type=<Вид токена>, value=<Значение>, position=<метоположение токена в строке>)
python main.py
from core.lexer import Lexer
def main():
code = "int a = 10 + b;"
lexer = Lexer(code)
tokens = lexer.tokenize()
for token in tokens:
print(token)
if __name__ == "__main__":
main()
python core.lexer.py
import re
from dataclasses import dataclass
@dataclass
class Token:
type: str
value: str
position: int
class Lexer:
def __init__(self, source: str):
self.source = source
self.position = 0
self.tokens = []
self.token_specification = [
("NUMBER", r"\d+"),
("IDENTIFIER", r"[a-zA-Z_]\w*"),
("PLUS", r"\+"),
("MINUS", r"-"),
("MULTIPLY", r"\*"),
("DIVIDE", r"/"),
("ASSIGN", r"="),
("LPAREN", r"\("),
("RPAREN", r"\)"),
("SEMICOLON", r";"),
("SKIP", r"[ \t\n]+"),
("MISMATCH", r"."),
]
self.regex = re.compile(
"|".join(
f"(?P<{name}>{pattern})" for name, pattern in self.token_specification
)
)
def tokenize(self) -> list[Token]:
for match in self.regex.finditer(self.source):
kind = match.lastgroup
value = match.group()
position = match.start()
if kind == "SKIP":
continue
elif kind == "MISMATCH":
raise SyntaxError(f"Unexpected character {value} at {position}")
else:
# Проверка на ключевое слово
if kind == "IDENTIFIER" and value == "int":
kind = "KEYWORD"
self.tokens.append(Token(kind, value, position))
return self.tokens
При запуске:
Token(type='KEYWORD', value='int', position=0)
Token(type='IDENTIFIER', value='a', position=4)
Token(type='ASSIGN', value='=', position=6)
Token(type='NUMBER', value='10', position=8)
Token(type='PLUS', value='+', position=11)
Token(type='IDENTIFIER', value='b', position=13)
Token(type='SEMICOLON', value=';', position=14)
Token(type=<Вид токена>, value=<Значение>, position=<метоположение токена в строке>)