💡 Извлечение ключевых данных из документов
Подписи:
➡ Document Content → Содержание документа
➡ Define Context(Aspect) → Определите контекст (Аспект)
➡ Select your LLM Model → Выберите модель LLM
➡ Extract information → Извлеките информацию
@python_be1
Подписи:
➡ Document Content → Содержание документа
➡ Define Context(Aspect) → Определите контекст (Аспект)
➡ Select your LLM Model → Выберите модель LLM
➡ Extract information → Извлеките информацию
@python_be1
🐧 Задача с подвохом: Странное поведение с `df` и `du`
Условие:
Вы замечаете, что на сервере `/var/log` неожиданно «занялось» много места. Проверяете это так:
```
df -h /var
```
И видите, что диск почти полностью заполнен. Но при этом, когда проверяете размер файлов в `/var/log`:
```
du -sh /var/log
```
— оказывается, что размер логов совсем небольшой, явно не соответствующий тому, что показывает `df`.
❓ Вопрос:
Почему возникает такая ситуация? Что именно занимает место, если файлы почти пустые? Как это исправить, не перезагружая сервер?
🔍 Подсказка:
На сервере активно работают несколько приложений, которые записывают логи. Недавно был произведён `logrotate`, старые логи удалились.
---
✅ Разбор:
[спойлер: 💥Подвох:Многие думают, что после удаления файла место сразу освобождается. Но в Linux есть важный нюанс: еслипроцесс всё ещё держит файл открытым, даже после удаления файла из файловой системы,его содержимое продолжает занимать место на диске.
Вот что происходит:
-]`du`[спойлер: показываетразмер существующих файлов, поэтому он маленький (ведь файлы удалены).
-]`df`[спойлер: показываетреальное использование блочного устройства, и оновключает те данные, которые всё ещё заняты удалёнными, но открытыми файлами.
🚩 Это классическая ситуация после]`logrotate`[спойлер: : старые логи удаляются, но процессы, которые их писали (например,]`nginx`[спойлер: , `mysql`), продолжают держать дескрипторы открытыми.
🔧Как найти виновника:Используем]`lsof`[спойлер: для поиска удалённых, но ещё открытых файлов:
```bash
lsof | grep deleted
```
Вы увидите что-то вроде:
```
nginx 1234 ... /var/log/nginx/access.log (deleted)
```
🛠Как исправить без перезагрузки:1️⃣ Перезапустить приложение, которое держит файл открытым:
```bash
systemctl restart nginx
```
2️⃣ Если нельзя перезапустить, можно попробовать «сбросить» файл, подменив его на новый (подходит не всегда).
---
✅Вывод:•]`df`[спойлер: и]`du`[спойлер: показывают разное, потому что считают разными методами:
-]`df`[спойлер: : что реально занято на диске (включая удалённые, но ещё открытые файлы)
-]`du`[спойлер: : что физически доступно через файловую систему
• Если место не освобождается после удаления файла — ищите открытые файловые дескрипторы удалённых файлов. Это классика для DevOps!
💡Бонус-вопрос для гуру:Что произойдёт, если в]`lsof`[спойлер: вы видите удалённый файл, но процесс — это]`docker`[спойлер: ? Как поступить в этом случае? 😉]
@python_be1
Условие:
Вы замечаете, что на сервере `/var/log` неожиданно «занялось» много места. Проверяете это так:
```
df -h /var
```
И видите, что диск почти полностью заполнен. Но при этом, когда проверяете размер файлов в `/var/log`:
```
du -sh /var/log
```
— оказывается, что размер логов совсем небольшой, явно не соответствующий тому, что показывает `df`.
❓ Вопрос:
Почему возникает такая ситуация? Что именно занимает место, если файлы почти пустые? Как это исправить, не перезагружая сервер?
🔍 Подсказка:
На сервере активно работают несколько приложений, которые записывают логи. Недавно был произведён `logrotate`, старые логи удалились.
---
✅ Разбор:
[спойлер: 💥Подвох:Многие думают, что после удаления файла место сразу освобождается. Но в Linux есть важный нюанс: еслипроцесс всё ещё держит файл открытым, даже после удаления файла из файловой системы,его содержимое продолжает занимать место на диске.
Вот что происходит:
-]`du`[спойлер: показываетразмер существующих файлов, поэтому он маленький (ведь файлы удалены).
-]`df`[спойлер: показываетреальное использование блочного устройства, и оновключает те данные, которые всё ещё заняты удалёнными, но открытыми файлами.
🚩 Это классическая ситуация после]`logrotate`[спойлер: : старые логи удаляются, но процессы, которые их писали (например,]`nginx`[спойлер: , `mysql`), продолжают держать дескрипторы открытыми.
🔧Как найти виновника:Используем]`lsof`[спойлер: для поиска удалённых, но ещё открытых файлов:
```bash
lsof | grep deleted
```
Вы увидите что-то вроде:
```
nginx 1234 ... /var/log/nginx/access.log (deleted)
```
🛠Как исправить без перезагрузки:1️⃣ Перезапустить приложение, которое держит файл открытым:
```bash
systemctl restart nginx
```
2️⃣ Если нельзя перезапустить, можно попробовать «сбросить» файл, подменив его на новый (подходит не всегда).
---
✅Вывод:•]`df`[спойлер: и]`du`[спойлер: показывают разное, потому что считают разными методами:
-]`df`[спойлер: : что реально занято на диске (включая удалённые, но ещё открытые файлы)
-]`du`[спойлер: : что физически доступно через файловую систему
• Если место не освобождается после удаления файла — ищите открытые файловые дескрипторы удалённых файлов. Это классика для DevOps!
💡Бонус-вопрос для гуру:Что произойдёт, если в]`lsof`[спойлер: вы видите удалённый файл, но процесс — это]`docker`[спойлер: ? Как поступить в этом случае? 😉]
@python_be1
🖥 Шпаргалка по RegEx в Python
📦 Импорт:
```
import re
```
🔍 Основные функции модуля `re`
```
re.search(pattern, string) # Ищет первое совпадение (где угодно в строке)
re.match(pattern, string) # Ищет совпадение только в начале строки
re.fullmatch(pattern, string) # Проверяет, соответствует ли вся строка шаблону
re.findall(pattern, string) # Возвращает все совпадения в виде списка
re.finditer(pattern, string) # То же, но как итератор Match-объектов
re.sub(pattern, repl, string) # Замена по шаблону
re.split(pattern, string) # Разбиение строки по шаблону
```
# 🧠 Основы синтаксиса шаблонов
| Шаблон | Что значит |
|---------|-------------------------------------|
| `.` | Любой символ, кроме `\n` |
| `^` | Начало строки |
| `$` | Конец строки |
| `*` | 0 или больше повторений |
| `+` | 1 или больше |
| `?` | 0 или 1 повторение |
| `{n}` | ровно n раз |
| `{n,}` | n или больше |
| `{n,m}` | от n до m |
| `[]` | Символьный класс |
| `[^]` | Отрицание символьного класса |
| `|` | Или (`a|b`) |
| `()` | Группа (захват) |
| `\` | Экранирование спецсимвола |
💡 Примеры
```
re.search(r'\d+', 'ID=12345') # Найдёт '12345' (одно или больше цифр)
re.match(r'^\w+$', 'hello_world') # Вся строка — только буквы/цифры/_
re.findall(r'[A-Z][a-z]+', 'Mr. Smith and Dr. Brown') # ['Smith', 'Brown']
re.sub(r'\s+', '-', 'a b c') # 'a-b-c'
re.split(r'[;,\s]\s*', 'one, two;three four') # ['one', 'two', 'three', 'four']
```
🎯 Захват групп
```
text = 'Name: John, Age: 30'
match = re.search(r'Name: (\w+), Age: (\d+)', text)
if match:
print(match.group(1)) # John
print(match.group(2)) # 30
```
Группы можно называть:
```
pattern = r'(?P<name>\w+): (?P<value>\d+)'
match = re.search(pattern, 'score: 42')
match.group('name') # 'score'
match.group('value') # '42'
```
🧱 Комбинированные шаблоны
```
pattern = r'\b(?:https?://)?(www\.)?\w+\.\w+\b'
text = 'Visit https://example.com or www.test.org'
re.findall(pattern, text) # [['www.'], ['www.']]
```
⚠️ Полезные советы
• Всегда используйте `r''` перед шаблоном, чтобы не экранировать `\`
• `re.compile(pattern)` ускоряет повторное использование
• Старайтесь избегать `re.match` — чаще нужен `re.search`
✅ Быстрая проверка шаблонов
📍 Онлайн-проверка:
[regex101.com](https://regex101.com/)
[pythex.org](https://pythex.org/)
Хочешь отдельную шпаргалку по `re.sub` с лямбдами, заменами и функциями внутри, ставь лайк 👍
@python_be1
📦 Импорт:
```
import re
```
🔍 Основные функции модуля `re`
```
re.search(pattern, string) # Ищет первое совпадение (где угодно в строке)
re.match(pattern, string) # Ищет совпадение только в начале строки
re.fullmatch(pattern, string) # Проверяет, соответствует ли вся строка шаблону
re.findall(pattern, string) # Возвращает все совпадения в виде списка
re.finditer(pattern, string) # То же, но как итератор Match-объектов
re.sub(pattern, repl, string) # Замена по шаблону
re.split(pattern, string) # Разбиение строки по шаблону
```
# 🧠 Основы синтаксиса шаблонов
| Шаблон | Что значит |
|---------|-------------------------------------|
| `.` | Любой символ, кроме `\n` |
| `^` | Начало строки |
| `$` | Конец строки |
| `*` | 0 или больше повторений |
| `+` | 1 или больше |
| `?` | 0 или 1 повторение |
| `{n}` | ровно n раз |
| `{n,}` | n или больше |
| `{n,m}` | от n до m |
| `[]` | Символьный класс |
| `[^]` | Отрицание символьного класса |
| `|` | Или (`a|b`) |
| `()` | Группа (захват) |
| `\` | Экранирование спецсимвола |
💡 Примеры
```
re.search(r'\d+', 'ID=12345') # Найдёт '12345' (одно или больше цифр)
re.match(r'^\w+$', 'hello_world') # Вся строка — только буквы/цифры/_
re.findall(r'[A-Z][a-z]+', 'Mr. Smith and Dr. Brown') # ['Smith', 'Brown']
re.sub(r'\s+', '-', 'a b c') # 'a-b-c'
re.split(r'[;,\s]\s*', 'one, two;three four') # ['one', 'two', 'three', 'four']
```
🎯 Захват групп
```
text = 'Name: John, Age: 30'
match = re.search(r'Name: (\w+), Age: (\d+)', text)
if match:
print(match.group(1)) # John
print(match.group(2)) # 30
```
Группы можно называть:
```
pattern = r'(?P<name>\w+): (?P<value>\d+)'
match = re.search(pattern, 'score: 42')
match.group('name') # 'score'
match.group('value') # '42'
```
🧱 Комбинированные шаблоны
```
pattern = r'\b(?:https?://)?(www\.)?\w+\.\w+\b'
text = 'Visit https://example.com or www.test.org'
re.findall(pattern, text) # [['www.'], ['www.']]
```
⚠️ Полезные советы
• Всегда используйте `r''` перед шаблоном, чтобы не экранировать `\`
• `re.compile(pattern)` ускоряет повторное использование
• Старайтесь избегать `re.match` — чаще нужен `re.search`
✅ Быстрая проверка шаблонов
📍 Онлайн-проверка:
[regex101.com](https://regex101.com/)
[pythex.org](https://pythex.org/)
Хочешь отдельную шпаргалку по `re.sub` с лямбдами, заменами и функциями внутри, ставь лайк 👍
@python_be1
regex101
regex101: build, test, and debug regex
Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET, Rust.
🖥 systemd-pilot (https://github.com/mfat/systemd-pilot) — это десктопное приложение для управления сервисами systemd на GNU/Linux системах!
🌟 По сути, это графический интерфейс для команд systemctl. Он позволяет просматривать и управлять системными сервисами, быстро развертывать новые сервисы, а также запускать, останавливать и перезапускать их. Приложение легковесное и использует всего один Python-скрипт. Также предусмотрена поддержка поиска сервисов по имени.
🔐 Лицензия: GPL-3.0
🖥 Github (https://github.com/mfat/systemd-pilot)
@python_be1
🌟 По сути, это графический интерфейс для команд systemctl. Он позволяет просматривать и управлять системными сервисами, быстро развертывать новые сервисы, а также запускать, останавливать и перезапускать их. Приложение легковесное и использует всего один Python-скрипт. Также предусмотрена поддержка поиска сервисов по имени.
🔐 Лицензия: GPL-3.0
🖥 Github (https://github.com/mfat/systemd-pilot)
@python_be1
🧠 Как подготовиться к техническому собеседованию с помощью
Если ты готовишься к собеседованию в IT и не знаешь, с чего начать — обрати внимание на бесплатный курс от freeCodeCamp (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150/), основанный на знаменитом списке задач NeetCode 150.
⚙️ Что такое NeetCode 150?
• 🟤 Это отобранные 150 задач с LeetCode, покрывающие всё, что нужно знать:
• массивы
• строки
• хеш-таблицы
• деревья и графы
• динамическое программирование
• стек и очередь
• backtracking и двоичный поиск
🎓 Что предлагает курс freeCodeCamp:
• 38 часов подробного видеоконтента
• Каждая задача разбирается пошагово — с объяснением стратегии и кода
• Языки: Python и JavaScript
• Полностью бесплатно
📈 Почему это эффективно:
• Все задачи — реальный опыт с технических собеседований
• Структура курса позволяет идти от простого к сложному
• Удобно учиться в своем темпе
- Стартуй здесь (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150)
- Видео с разбором вопросов (https://www.youtube.com/watch?v=T0u5nwSA0w0)
- Решения (https://neetcode.io/practice)
Не упусти шанс систематизировать знания и уверенно пройти собеседование!
@python_be1
Если ты готовишься к собеседованию в IT и не знаешь, с чего начать — обрати внимание на бесплатный курс от freeCodeCamp (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150/), основанный на знаменитом списке задач NeetCode 150.
⚙️ Что такое NeetCode 150?
• 🟤 Это отобранные 150 задач с LeetCode, покрывающие всё, что нужно знать:
• массивы
• строки
• хеш-таблицы
• деревья и графы
• динамическое программирование
• стек и очередь
• backtracking и двоичный поиск
🎓 Что предлагает курс freeCodeCamp:
• 38 часов подробного видеоконтента
• Каждая задача разбирается пошагово — с объяснением стратегии и кода
• Языки: Python и JavaScript
• Полностью бесплатно
📈 Почему это эффективно:
• Все задачи — реальный опыт с технических собеседований
• Структура курса позволяет идти от простого к сложному
• Удобно учиться в своем темпе
- Стартуй здесь (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150)
- Видео с разбором вопросов (https://www.youtube.com/watch?v=T0u5nwSA0w0)
- Решения (https://neetcode.io/practice)
Не упусти шанс систематизировать знания и уверенно пройти собеседование!
@python_be1
🎭 Pykka — акторная модель для Python без лишних сложности. Этот проект позволяет организовывать конкурентные вычисления без традиционных проблем с состоянием и блокировками.
Вдохновлённый знаменитым Akka для JVM, Pykka предлагает минималистичный подход — никаких супервизоров или распределённых акторов, только чистые принципы обмена сообщениями между изолированными процессами.
Инструмент имеет продуманную архитектуру: разработчику достаточно определить поведение акторов, а Pykka возьмет на себя всю работу с очередями и потоками.
🤖 GitHub (https://github.com/jodal/pykka?tab=readme-ov-file)
@python_be1
Вдохновлённый знаменитым Akka для JVM, Pykka предлагает минималистичный подход — никаких супервизоров или распределённых акторов, только чистые принципы обмена сообщениями между изолированными процессами.
Инструмент имеет продуманную архитектуру: разработчику достаточно определить поведение акторов, а Pykka возьмет на себя всю работу с очередями и потоками.
🤖 GitHub (https://github.com/jodal/pykka?tab=readme-ov-file)
@python_be1
🐍 Задача уровня Pro: декоратор с внутренним состоянием
📌 Задача:
Напиши декоратор `call_limiter`, который:
- ограничивает функцию `f` максимум до `n` вызовов
- после `n` вызова функция больше не вызывается, а возвращает строку `"LIMIT REACHED"`
Пример использования:
```
(3)
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED
```
🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом `n`
- Внутри должна быть функция с `nonlocal`, чтобы отслеживать число вызовов
- Часто путаются и используют `mutable default`, что ломает независимость между декорируемыми функциями
✅ Решение:
[спойлер: ```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```
🧪 **Проверка:**
```python][спойлер: ][спойлер: (2)
def ping():
return "pong"
print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED][спойлер: ][спойлер: (1)
def echo(msg):
return msg
print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```
🧠 **Что проверяет задача:**
• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области]
@python_be1
📌 Задача:
Напиши декоратор `call_limiter`, который:
- ограничивает функцию `f` максимум до `n` вызовов
- после `n` вызова функция больше не вызывается, а возвращает строку `"LIMIT REACHED"`
Пример использования:
```
(3)
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED
```
🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом `n`
- Внутри должна быть функция с `nonlocal`, чтобы отслеживать число вызовов
- Часто путаются и используют `mutable default`, что ломает независимость между декорируемыми функциями
✅ Решение:
[спойлер: ```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```
🧪 **Проверка:**
```python][спойлер: ][спойлер: (2)
def ping():
return "pong"
print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED][спойлер: ][спойлер: (1)
def echo(msg):
return msg
print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```
🧠 **Что проверяет задача:**
• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области]
@python_be1
Всем привет) Помогите решить задачку, плиз. Я только недавно учиться начала (очные годовые курсы, два раза в неделю занятия), ООП прошли, но обучение, скажу так: "так себе...". Только начинаю что-то понимать, как тут же другая тема, а ещё прошлую тему не закрепили. Причем, все обучение построено на довольно-таки простых примерах, а в реальной работе, по-любому, все гораздо сложнее.
А тут друг-программист мне задачку задал (чисто чтоб проверить мои знания), а я и растерялась совсем. Не знаю как решить. И спрашивать у него не буду: прикалываться начнет. У меня от его приколов аж все желание учиться пропадает.
Так что, буду очень рада, если кто-нибудь из подписчиков группы мне поможет и объяснит эту задачку, а то я уже отчаялась совсем((
Задачку скину в личку тем, кто отзовётся. Надеюсь, что мир не без добрых людей😊
@python_be1
А тут друг-программист мне задачку задал (чисто чтоб проверить мои знания), а я и растерялась совсем. Не знаю как решить. И спрашивать у него не буду: прикалываться начнет. У меня от его приколов аж все желание учиться пропадает.
Так что, буду очень рада, если кто-нибудь из подписчиков группы мне поможет и объяснит эту задачку, а то я уже отчаялась совсем((
Задачку скину в личку тем, кто отзовётся. Надеюсь, что мир не без добрых людей😊
@python_be1
🧠 8 полезных советов по Oracle SQL
Если ты уже «умеешь в SELECT», пора прокачать SQL в Oracle до следующего уровня. Эти советы не для новичков — они для тех, кто работает с продом, сложными запросами и оптимизацией.
⚡ 1. Используй `PIVOT`/`UNPIVOT` вместо `CASE`
Поворот таблиц через PIVOT делает код чище и легче масштабируется.
SELECT * FROM (
SELECT department_id, gender, salary FROM employees
)
PIVOT (
SUM(salary) FOR gender IN ('M' AS male_salary, 'F' AS female_salary)
);
🧱 2. Вызывай функции как таблицы (`TABLE()` + PL/SQL)
Если функция возвращает коллекцию, её можно SELECT’ить напрямую:
SELECT * FROM TABLE(my_package.get_active_users(SYSDATE));
🚀 3. Генерация чисел без тормозов
CONNECT BY LEVEL — это медленно. Лучше так:
SELECT rownum FROM dual CONNECT BY rownum <= 10000;
🔍 4. Помогай оптимизатору через `CARDINALITY` hint
Oracle может ошибаться в оценке количества строк. Подскажи ему:
SELECT /*+ cardinality(e 100000) */ * FROM employees e ...
🧠 5. Используй `RESULT_CACHE` для повторяемых данных
Снизь нагрузку:
SELECT /*+ RESULT_CACHE */ * FROM country_codes;
📉 6. Никогда не делай `ORDER BY` без `FETCH FIRST` или `ROWNUM`
Не сортируй всё зря:
SELECT * FROM employees ORDER BY salary DESC FETCH FIRST 10 ROWS ONLY;
📦 7. Управляй CTE через `MATERIALIZE` и `INLINE`
Это может влиять на производительность:
WITH /*+ MATERIALIZE */ heavy_part AS (...)
SELECT * FROM heavy_part WHERE rownum = 1;
📊 8. Освой `MODEL` для расчётов как в Excel
Рядовые и прогнозные расчёты в SQL без курсоров:
SELECT * FROM sales
MODEL
PARTITION BY (region)
DIMENSION BY (month)
MEASURES (sales)
RULES (
sales[13] = sales[12] * 1.1
);
💡 Не ограничивайся SELECT — используй весь потенциал Oracle SQL.
👍 Лайк и сохраняй себе, чтобы не потерять
@python_be1
Если ты уже «умеешь в SELECT», пора прокачать SQL в Oracle до следующего уровня. Эти советы не для новичков — они для тех, кто работает с продом, сложными запросами и оптимизацией.
⚡ 1. Используй `PIVOT`/`UNPIVOT` вместо `CASE`
Поворот таблиц через PIVOT делает код чище и легче масштабируется.
SELECT * FROM (
SELECT department_id, gender, salary FROM employees
)
PIVOT (
SUM(salary) FOR gender IN ('M' AS male_salary, 'F' AS female_salary)
);
🧱 2. Вызывай функции как таблицы (`TABLE()` + PL/SQL)
Если функция возвращает коллекцию, её можно SELECT’ить напрямую:
SELECT * FROM TABLE(my_package.get_active_users(SYSDATE));
🚀 3. Генерация чисел без тормозов
CONNECT BY LEVEL — это медленно. Лучше так:
SELECT rownum FROM dual CONNECT BY rownum <= 10000;
🔍 4. Помогай оптимизатору через `CARDINALITY` hint
Oracle может ошибаться в оценке количества строк. Подскажи ему:
SELECT /*+ cardinality(e 100000) */ * FROM employees e ...
🧠 5. Используй `RESULT_CACHE` для повторяемых данных
Снизь нагрузку:
SELECT /*+ RESULT_CACHE */ * FROM country_codes;
📉 6. Никогда не делай `ORDER BY` без `FETCH FIRST` или `ROWNUM`
Не сортируй всё зря:
SELECT * FROM employees ORDER BY salary DESC FETCH FIRST 10 ROWS ONLY;
📦 7. Управляй CTE через `MATERIALIZE` и `INLINE`
Это может влиять на производительность:
WITH /*+ MATERIALIZE */ heavy_part AS (...)
SELECT * FROM heavy_part WHERE rownum = 1;
📊 8. Освой `MODEL` для расчётов как в Excel
Рядовые и прогнозные расчёты в SQL без курсоров:
SELECT * FROM sales
MODEL
PARTITION BY (region)
DIMENSION BY (month)
MEASURES (sales)
RULES (
sales[13] = sales[12] * 1.1
);
💡 Не ограничивайся SELECT — используй весь потенциал Oracle SQL.
👍 Лайк и сохраняй себе, чтобы не потерять
@python_be1
This media is not supported in your browser
VIEW IN TELEGRAM
Ночное-полезное: Oh My <s>God</s> Git — прикольная игра с открытым исходным кодом, которая с помощью карточек поможет понять логику работы GIT и научит с ним работать.
Можно залипнуть на сайте (https://ohmygit.org/) или поставить себе локально с GitHub (https://github.com/git-learning-game/oh-my-git/).
@python_be1
Можно залипнуть на сайте (https://ohmygit.org/) или поставить себе локально с GitHub (https://github.com/git-learning-game/oh-my-git/).
@python_be1
https://uproger.com/besplatnaya-podpiska-chatgpt-kak-polzovatsya-bez-oplaty-v-2025-godu/
@python_be1
https://uproger.com/besplatnaya-podpiska-chatgpt-kak-polzovatsya-bez-oplaty-v-2025-godu/
@python_be1
https://uproger.com/besplatnaya-podpiska-chatgpt-kak-polzovatsya-bez-oplaty-v-2025-godu/
UPROGER | Программирование
Бесплатная подписка ChatGPT — как пользоваться без оплаты в 2025 году
Всё больше людей интересуется тем, как получить бесплатную подписку ChatGPT. Сервис от OpenAI стал невероятно популярным благодаря своим возможностям: написание текстов, помощь в программировании, переводах, генерации идей и даже написании кода. Но нужна…
🪬 Boto3 — мост между Python и AWS. Эта официальная Python-библиотека предоставляет удобный интерфейс для взаимодействия с сервисами AWS — от простых операций с S3 до управления кластерами EC2.
После недавнего прекращения поддержки Python 3.8 проект сосредоточился на современных версиях языка. Особенность Boto3 в двухуровневой архитектуре: низкоуровневые клиенты для точного контроля и ресурсные объекты для упрощённого синтаксиса. Документация от AWS включает примеры для всех основных сервисов, что делает интеграцию почти безболезненной.
🤖 GitHub (https://github.com/boto/boto3)
@python_be1
После недавнего прекращения поддержки Python 3.8 проект сосредоточился на современных версиях языка. Особенность Boto3 в двухуровневой архитектуре: низкоуровневые клиенты для точного контроля и ресурсные объекты для упрощённого синтаксиса. Документация от AWS включает примеры для всех основных сервисов, что делает интеграцию почти безболезненной.
🤖 GitHub (https://github.com/boto/boto3)
@python_be1
ReadWriteMemory — это полезная библиотека, позволяющая легко читать/записывать в память любого процесса.
https://pypi.org/project/ReadWriteMemory/
@python_be1
https://pypi.org/project/ReadWriteMemory/
@python_be1
🖥 Как масштабировать Python Task Queue — подробный гайд
Когда ваше Python-приложение начинает активно использовать фоновые задачи (email-уведомления, видеообработка, интеграции и т.д.), быстро возникает проблема: очередь задач растёт, задержка увеличивается, пользователи начинают ощущать тормоза.
В статье разбирается, как это решать грамотно, автоматически и эффективно.
🎯 Основные проблемы:
• Даже при низком CPU задачи могут выполняться с задержкой
• Очередь может казаться «тихой», но задачи копятся
• Масштабирование вручную по метрикам CPU/памяти — неэффективно
• Часто “один жирный воркер” не решает проблему — надо менять подход
⚙ Как масштабировать: пошагово
1) 🔌 Выбор брокера сообщений
• Redis — прост в настройке, отлично работает с Celery и RQ
• RabbitMQ — надёжнее (повторы, подтверждения), подходит для критичных задач
2) ⚙ Настройка воркеров
• *Вертикальное масштабирование*
— больше процессов внутри одного воркера (в Celery можно concurrency)
• *Горизонтальное масштабирование*
— запуск множества воркеров на разных инстансах, читающих из одной очереди
— универсальное и гибкое решение
3) 📈 Авто-скейлинг по latency, а не CPU
• Частая ошибка: масштабировать по CPU
• Правильный подход: масштабировать по времени ожидания задач в очереди
• Judoscale позволяет автоматизировать масштабирование именно по queue latency
• При росте задержки запускаются новые воркеры, при снижении — отключаются
4) 🧠 Fan-Out: разбивай большие задачи
Вместо:
Одна задача: обработать 10 000 пользователей
Правильно:
10 000 задач: по одной на каждого пользователя
Преимущества:
• Параллельность
• Надёжность (ошибки локализуются)
• Легче масштабировать обработку
📊 Результаты после внедрения:
• Время ожидания задач сократилось с 25 минут до 30 секунд
• Масштабирование стало динамичным
• Инфраструктура стала дешевле — меньше простаивающих воркеров
✅ Рекомендации:
• Используй Redis или RabbitMQ в зависимости от требований
• Отдавай предпочтение горизонтальному масштабированию
• Следи за latency, а не за CPU
• Используй Judoscale для авто-масштабирования
• Применяй fan-out для повышения надёжности и скорости
Ссылка на статью: https://judoscale.com/blog/scaling-python-task-queues
@python_be1
Когда ваше Python-приложение начинает активно использовать фоновые задачи (email-уведомления, видеообработка, интеграции и т.д.), быстро возникает проблема: очередь задач растёт, задержка увеличивается, пользователи начинают ощущать тормоза.
В статье разбирается, как это решать грамотно, автоматически и эффективно.
🎯 Основные проблемы:
• Даже при низком CPU задачи могут выполняться с задержкой
• Очередь может казаться «тихой», но задачи копятся
• Масштабирование вручную по метрикам CPU/памяти — неэффективно
• Часто “один жирный воркер” не решает проблему — надо менять подход
⚙ Как масштабировать: пошагово
1) 🔌 Выбор брокера сообщений
• Redis — прост в настройке, отлично работает с Celery и RQ
• RabbitMQ — надёжнее (повторы, подтверждения), подходит для критичных задач
2) ⚙ Настройка воркеров
• *Вертикальное масштабирование*
— больше процессов внутри одного воркера (в Celery можно concurrency)
• *Горизонтальное масштабирование*
— запуск множества воркеров на разных инстансах, читающих из одной очереди
— универсальное и гибкое решение
3) 📈 Авто-скейлинг по latency, а не CPU
• Частая ошибка: масштабировать по CPU
• Правильный подход: масштабировать по времени ожидания задач в очереди
• Judoscale позволяет автоматизировать масштабирование именно по queue latency
• При росте задержки запускаются новые воркеры, при снижении — отключаются
4) 🧠 Fan-Out: разбивай большие задачи
Вместо:
Одна задача: обработать 10 000 пользователей
Правильно:
10 000 задач: по одной на каждого пользователя
Преимущества:
• Параллельность
• Надёжность (ошибки локализуются)
• Легче масштабировать обработку
📊 Результаты после внедрения:
• Время ожидания задач сократилось с 25 минут до 30 секунд
• Масштабирование стало динамичным
• Инфраструктура стала дешевле — меньше простаивающих воркеров
✅ Рекомендации:
• Используй Redis или RabbitMQ в зависимости от требований
• Отдавай предпочтение горизонтальному масштабированию
• Следи за latency, а не за CPU
• Используй Judoscale для авто-масштабирования
• Применяй fan-out для повышения надёжности и скорости
Ссылка на статью: https://judoscale.com/blog/scaling-python-task-queues
@python_be1