«Introduction to Algorithms» — выдающийся университетский ресурс для всех, кто изучает алгоритмы и компьютерные науки.
Книга охватывает вычислительную сложность, структуры данных, алгоритмы на графах, динамическое программирование, методы «разделяй и властвуй», жадные алгоритмы, рандомизированные алгоритмы и многие математические основы современной компьютерной науки.
Особенно ценно здесь сочетание математической строгости и практического алгоритмического мышления. Это одна из тех книг, которые сильно меняют подход к анализу задач, эффективности и самим вычислениям.
Обязательный инструмент в библиотеке любого разработчика и инженера, работающего в сфере компьютерных наук.
https://www.cs.mcgill.ca/~akroit/math/compsci/Cormen%20Introduction%20to%20Algorithms.pdf
👉 @PythonPortal
Книга охватывает вычислительную сложность, структуры данных, алгоритмы на графах, динамическое программирование, методы «разделяй и властвуй», жадные алгоритмы, рандомизированные алгоритмы и многие математические основы современной компьютерной науки.
Особенно ценно здесь сочетание математической строгости и практического алгоритмического мышления. Это одна из тех книг, которые сильно меняют подход к анализу задач, эффективности и самим вычислениям.
Обязательный инструмент в библиотеке любого разработчика и инженера, работающего в сфере компьютерных наук.
https://www.cs.mcgill.ca/~akroit/math/compsci/Cormen%20Introduction%20to%20Algorithms.pdf
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥5
Наследование в Python меняет путь поиска атрибутов, также известный как «method resolution order» (MRO):
То есть MRO показывает, в каком порядке Python будет искать методы и атрибуты: сначала в классе потомке, затем в родителях по цепочке, и в конце — в базовом
@PythonPortal
class Child:
pass
Child.__mro__ # (__main__.Child, object)
class Child(Parent):
pass
Child.__mro__ # (__main__.Child, __main__.Parent, object)
То есть MRO показывает, в каком порядке Python будет искать методы и атрибуты: сначала в классе потомке, затем в родителях по цепочке, и в конце — в базовом
object.@PythonPortal
👍10
Не тратьте токены вашего AI на исследование проекта
Создайте локальный семантический граф вашего кода с помощью этого инструмента:
✓ –92% вызовов внешних инструментов
✓ Исследование кода на 71% быстрее
✓ Поддержка Claude Code, Cursor, Codex и OpenCode
Локально и с открытым исходным кодом:
→ http://github.com/colbymchenry/codegraph
👉 @PythonPortal
Создайте локальный семантический граф вашего кода с помощью этого инструмента:
✓ –92% вызовов внешних инструментов
✓ Исследование кода на 71% быстрее
✓ Поддержка Claude Code, Cursor, Codex и OpenCode
Локально и с открытым исходным кодом:
→ http://github.com/colbymchenry/codegraph
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Нужно понять, какие аргументы переданы в скрипт на Питоне.
Для этого используется
дальше идут все переданные параметры запуска
👉 @PythonPortal
Для этого используется
sys.argv — список, где:sys.argv[0] — имя самого скриптадальше идут все переданные параметры запуска
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🤔1
Open-source проект Presenton (5K+ звёзд) генерирует презентации из промптов и документов.
Поддерживает:
- промпт → презентация
- документ → презентация
- экспорт PPTX и PDF
- шаблоны
- самохостинг (Докер)
- API
- BYOK
- Ollama
Работает через генерацию + редактирование + экспорт, без привязки к закрытому редактору.
GitHub: github.com/presenton/pres
👉 @PythonPortal
Поддерживает:
- промпт → презентация
- документ → презентация
- экспорт PPTX и PDF
- шаблоны
- самохостинг (Докер)
- API
- BYOK
- Ollama
Работает через генерацию + редактирование + экспорт, без привязки к закрытому редактору.
GitHub: github.com/presenton/pres
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
«10 миллионов документов помещаются в 4 ГБ ОЗУ»: https://github.com/RyanCodrai/turbovec
Корпус из 10 миллионов документов занимает 31 ГБ ОЗУ в формате float32. turbovec укладывает это в 4 ГБ и выполняет поиск быстрее, чем FAISS.
turbovec — векторный индекс на Rust с Python-обвязками, построенный на алгоритме TurboQuant от Google Research — data-oblivious квантизаторе, который достигает границы Шеннона по искажению без обучения и без проходов по данным.
👉 @PythonPortal
Корпус из 10 миллионов документов занимает 31 ГБ ОЗУ в формате float32. turbovec укладывает это в 4 ГБ и выполняет поиск быстрее, чем FAISS.
turbovec — векторный индекс на Rust с Python-обвязками, построенный на алгоритме TurboQuant от Google Research — data-oblivious квантизаторе, который достигает границы Шеннона по искажению без обучения и без проходов по данным.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤6👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁41🌭5
ИДЕЯ: перепродажа open-source репозиториев бизнесам. стратегия, о которой почти не говорят
тысячи репозиториев на GitHub решают реальные бизнес-задачи. бесплатно. открыто. готово к продакшну
и 99% бизнесов никогда их не найдут
как превратить ЛЮБОЕ open-source решение в $2,000+ в месяц с одного клиента:
1. найти инструмент, который закрывает дорогую проблему
зайти в GitHub Trending. отфильтровать по звёздам, свежей активности и нормальной документации. искать инструменты, которые заменяют то, за что бизнес сейчас платит $500–2,000 в месяц
примеры, которые уже существуют:
- CRM-системы (Twenty, $0 вместо Salesforce за $300/место/мес)
- helpdesk-платформы (Chatwoot, $0 вместо Intercom за $1,200/мес)
- аналитика (Plausible, $0 вместо Mixpanel за $800/мес)
- планировщики (Cal.com, $0 вместо Calendly Business за $480/мес)
- email-маркетинг (Listmonk, $0 вместо Mailchimp за $600/мес)
- конструкторы форм (Formbricks, $0 вместо Typeform за $400/мес)
- управление проектами (Plane, $0 вместо Jira за $700/мес на команду)
это не игрушки. у них по 10k–50k+ звёзд, активные комьюнити и компании, которые уже используют их в продакшне
2. выбрать ОДНУ нишу
не «мы разворачиваем open-source инструменты». а «мы заменяем Salesforce для агентств недвижимости» или «мы настраиваем приватную аналитику для медицинских компаний с требованиями к комплаенсу»
ниша формирует маржу. общий деплой = $2k/клиент на поддержку. нишевый деплой = $200, потому что всё уже шаблонизировано
3. развернуть на VPS за $20–50/мес
Hetzner, Railway, Coolify или обычный DigitalOcean droplet. Claude Code проводит через весь процесс настройки. у большинства таких инструментов есть деплой через Docker в один клик
инфраструктура на клиента: $20–50/мес
твоя цена: $2,000–5,000/мес (зависит от ниши)
все в плюсе. клиент экономит. ты зарабатываешь. математика простая
4. упаковать в язык бизнеса
не «self-hosted инстанс Chatwoot в Docker»
а «ваша приватная платформа поддержки клиентов без платы за пользователя, с полным владением данными и кастомным брендингом»
бизнес покупает не технологию. он покупает результат. «больше никогда не платить за пользователей» продаётся быстрее любого списка фич
5. построить защиту через кастомизацию
open-source инструмент — база. твоя ценность:
- интеграции с их текущим стеком
- брендированный интерфейс под компанию
- поддержка и обновления
- приоритетная помощь от человека, который знает их конфигурацию
это то, что отделяет подписку на $2k/мес от разового деплоя за $500. инструмент бесплатный. оркестрация — продукт
6. находить клиентов там, где они уже жалуются
искать в X и Reddit: "[название инструмента] слишком дорого" или "[название инструмента] альтернатива". это уже прогретые лиды. они знают проблему и ищут решение
постить кейсы: «заменили Intercom за $14k/год self-hosted решением для команды из 12 человек. те же функции. данные теперь у них»
скриншоты экономии закрывают сделки лучше питч-деков
7. масштабирование через стек на клиента
клиент уже платит $3k/мес за CRM? предложить аналитику за +$1,500. потом email-маркетинг за +$1,000. в итоге ты становишься их всей софт-инфраструктурой за $5,500/мес, при этом они всё ещё дешевле старого SaaS-стека
один клиент. пять инструментов. каждый развёрнут за день
часть, о которой почти не говорят:
эти бизнесы никогда сами не найдут эти GitHub-репозитории. они не будут поднимать Docker. они не будут заходить на сервер по SSH. они будут гуглить «недорогая CRM для небольшой команды» и попадут к тебе
open source — это новый опт. код бесплатный. маржа появляется на упаковке
один человек может вести 5–10 клиентов. команда из двух человек выходит на $30–50k/мес. без инвестиций. без офиса. без найма
кто-то в твоей нише это уже сделает. логично, чтобы это был ты
👉 @PythonPortal
тысячи репозиториев на GitHub решают реальные бизнес-задачи. бесплатно. открыто. готово к продакшну
и 99% бизнесов никогда их не найдут
как превратить ЛЮБОЕ open-source решение в $2,000+ в месяц с одного клиента:
1. найти инструмент, который закрывает дорогую проблему
зайти в GitHub Trending. отфильтровать по звёздам, свежей активности и нормальной документации. искать инструменты, которые заменяют то, за что бизнес сейчас платит $500–2,000 в месяц
примеры, которые уже существуют:
- CRM-системы (Twenty, $0 вместо Salesforce за $300/место/мес)
- helpdesk-платформы (Chatwoot, $0 вместо Intercom за $1,200/мес)
- аналитика (Plausible, $0 вместо Mixpanel за $800/мес)
- планировщики (Cal.com, $0 вместо Calendly Business за $480/мес)
- email-маркетинг (Listmonk, $0 вместо Mailchimp за $600/мес)
- конструкторы форм (Formbricks, $0 вместо Typeform за $400/мес)
- управление проектами (Plane, $0 вместо Jira за $700/мес на команду)
это не игрушки. у них по 10k–50k+ звёзд, активные комьюнити и компании, которые уже используют их в продакшне
2. выбрать ОДНУ нишу
не «мы разворачиваем open-source инструменты». а «мы заменяем Salesforce для агентств недвижимости» или «мы настраиваем приватную аналитику для медицинских компаний с требованиями к комплаенсу»
ниша формирует маржу. общий деплой = $2k/клиент на поддержку. нишевый деплой = $200, потому что всё уже шаблонизировано
3. развернуть на VPS за $20–50/мес
Hetzner, Railway, Coolify или обычный DigitalOcean droplet. Claude Code проводит через весь процесс настройки. у большинства таких инструментов есть деплой через Docker в один клик
инфраструктура на клиента: $20–50/мес
твоя цена: $2,000–5,000/мес (зависит от ниши)
все в плюсе. клиент экономит. ты зарабатываешь. математика простая
4. упаковать в язык бизнеса
не «self-hosted инстанс Chatwoot в Docker»
а «ваша приватная платформа поддержки клиентов без платы за пользователя, с полным владением данными и кастомным брендингом»
бизнес покупает не технологию. он покупает результат. «больше никогда не платить за пользователей» продаётся быстрее любого списка фич
5. построить защиту через кастомизацию
open-source инструмент — база. твоя ценность:
- интеграции с их текущим стеком
- брендированный интерфейс под компанию
- поддержка и обновления
- приоритетная помощь от человека, который знает их конфигурацию
это то, что отделяет подписку на $2k/мес от разового деплоя за $500. инструмент бесплатный. оркестрация — продукт
6. находить клиентов там, где они уже жалуются
искать в X и Reddit: "[название инструмента] слишком дорого" или "[название инструмента] альтернатива". это уже прогретые лиды. они знают проблему и ищут решение
постить кейсы: «заменили Intercom за $14k/год self-hosted решением для команды из 12 человек. те же функции. данные теперь у них»
скриншоты экономии закрывают сделки лучше питч-деков
7. масштабирование через стек на клиента
клиент уже платит $3k/мес за CRM? предложить аналитику за +$1,500. потом email-маркетинг за +$1,000. в итоге ты становишься их всей софт-инфраструктурой за $5,500/мес, при этом они всё ещё дешевле старого SaaS-стека
один клиент. пять инструментов. каждый развёрнут за день
часть, о которой почти не говорят:
эти бизнесы никогда сами не найдут эти GitHub-репозитории. они не будут поднимать Docker. они не будут заходить на сервер по SSH. они будут гуглить «недорогая CRM для небольшой команды» и попадут к тебе
open source — это новый опт. код бесплатный. маржа появляется на упаковке
один человек может вести 5–10 клиентов. команда из двух человек выходит на $30–50k/мес. без инвестиций. без офиса. без найма
кто-то в твоей нише это уже сделает. логично, чтобы это был ты
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣24❤10👍7
This media is not supported in your browser
VIEW IN TELEGRAM
При генерации 3D-моделей с помощью AI каждый компонент можно отдельно выделять, переименовывать, перемещать или менять ему материал — без необходимости заново генерировать всю модель.
Nova3D генерирует Python-скрипты для Blender на основе промптов, вместо прямого вывода объединённого mesh-файла. В сгенерированном GLB каждая часть имеет своё имя и иерархию, благодаря чему их можно редактировать по отдельности.
https://github.com/RareSense/Nova3D
👉 @PythonPortal
Nova3D генерирует Python-скрипты для Blender на основе промптов, вместо прямого вывода объединённого mesh-файла. В сгенерированном GLB каждая часть имеет своё имя и иерархию, благодаря чему их можно редактировать по отдельности.
https://github.com/RareSense/Nova3D
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁75👍7
Python-совет: как писать код с эффективным использованием памяти
Это проблемный код:
Проблема в том, что такой подход сохраняет ВСЕ обработанные строки в памяти перед тем, как что-либо вернуть. Это как приготовить 10 000 блюд и хранить их все на кухне — место быстро закончится.
👉 Лучший подход — использовать
Вместо того чтобы собирать один большой список в памяти, эта функция выдаёт по одной транзакции за раз, только когда это нужно. Это как готовить блюда только по мере поступления заказов. Проблем с памятью здесь нет.
👉 @PythonPortal
Это проблемный код:
def generate_transactions_inefficient(df: pd.DataFrame):
transactions = []
for _, row in df.iterrows():
transactions.append({
'user_id': row['user_id'],
'amount': row['amount'],
'transaction_date': row['transaction_date'],
'status': row['status']
})
return transactions
Проблема в том, что такой подход сохраняет ВСЕ обработанные строки в памяти перед тем, как что-либо вернуть. Это как приготовить 10 000 блюд и хранить их все на кухне — место быстро закончится.
yield:def generate_transactions_efficient(df: pd.DataFrame):
for _, row in df.iterrows():
yield {
'user_id': row['user_id'],
'amount': row['amount'],
'transaction_date': row['transaction_date'],
'status': row['status']
}
Вместо того чтобы собирать один большой список в памяти, эта функция выдаёт по одной транзакции за раз, только когда это нужно. Это как готовить блюда только по мере поступления заказов. Проблем с памятью здесь нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20
Один соло-разработчик выиграл хакатон Anthropic, он за 8 часов собрал рабочий продукт с помощью Claude Code и забрал $15,000 призовых.
Затем выложил весь стек в опенсорс.
189,000 звёзд на GitHub. Полная конфигурация:
→ 38 специализированных агентов (planner, security reviewer, debugger, code reviewer)
→ 156 skills, подгружаемых по требованию (/plan, /tdd, /security-scan, /quality-gate)
→ 72 кастомные slash-команды
→ AgentShield: 1,282 security-теста по CLAUDE.md, MCP-конфигам, хукам и skills
→ 3 агента на Opus 4.6, запускающих red-team пайплайны (Attacker, Defender, Auditor)
→ слой непрерывного обучения
→ покрытие 12 языковых экосистем
Работает в Claude Code, Codex, Cursor, OpenCode, Gemini и тд
👉 @PythonPortal
Затем выложил весь стек в опенсорс.
189,000 звёзд на GitHub. Полная конфигурация:
→ 38 специализированных агентов (planner, security reviewer, debugger, code reviewer)
→ 156 skills, подгружаемых по требованию (/plan, /tdd, /security-scan, /quality-gate)
→ 72 кастомные slash-команды
→ AgentShield: 1,282 security-теста по CLAUDE.md, MCP-конфигам, хукам и skills
→ 3 агента на Opus 4.6, запускающих red-team пайплайны (Attacker, Defender, Auditor)
→ слой непрерывного обучения
→ покрытие 12 языковых экосистем
Работает в Claude Code, Codex, Cursor, OpenCode, Gemini и тд
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥10👍5
Почему
Вот один из типичных Unicode-подводных камней, который часто приводит к очень запутанным багам в Python:
Две строки могут выглядеть одинаково на экране, но при этом отличаться внутри:
Внешне они одинаковые, но Python хранит их как разные последовательности Unicode-кодпоинтов.
Посмотреть, что реально внутри строки, можно через
Вывод:
Как правильно сравнивать такие строки?
Нужно нормализовать Unicode перед сравнением:
Такие различия часто появляются в:
- пользовательском вводе
- копипасте из разных источников
- именах файлов
- поиске и фильтрации текста
- данных из разных языков и систем
Ещё один похожий кейс — невидимые символы
Например, zero-width space может ломать сравнение вообще без визуальных признаков:
Подробнее можно почитать здесь:
https://pythonkoans.substack.com/p/koan-15-the-invisible-ink
👉 @PythonPortal
"é" == "é" может возвращать False в PythonВот один из типичных Unicode-подводных камней, который часто приводит к очень запутанным багам в Python:
Две строки могут выглядеть одинаково на экране, но при этом отличаться внутри:
import unicodedata
a = "é" # один кодпоинт: U+00E9
b = "e\u0301" # "e" + комбинирующий акцент (acute accent)
print(a)
print(b)
print(a == b)
# False
print(len(a))
# 1
print(len(b))
# 2
Внешне они одинаковые, но Python хранит их как разные последовательности Unicode-кодпоинтов.
Посмотреть, что реально внутри строки, можно через
repr() и unicodedata.name():import unicodedata
for char in "e\u0301":
print(repr(char), unicodedata.name(char))
Вывод:
'e' LATIN SMALL LETTER E
'́' COMBINING ACUTE ACCENT
Как правильно сравнивать такие строки?
Нужно нормализовать Unicode перед сравнением:
import unicodedata
a = "é"
b = "e\u0301"
a_normalized = unicodedata.normalize("NFC", a)
b_normalized = unicodedata.normalize("NFC", b)
print(a_normalized == b_normalized)
# True
NFC приводит текст к “составной” форме, где комбинация "e" + accent превращается в один символ "é".Такие различия часто появляются в:
- пользовательском вводе
- копипасте из разных источников
- именах файлов
- поиске и фильтрации текста
- данных из разных языков и систем
Ещё один похожий кейс — невидимые символы
Например, zero-width space может ломать сравнение вообще без визуальных признаков:
text = "hello\u200b"
print(text == "hello")
# False
print(text)
# hello
print(repr(text))
# 'hello\u200b'
print() скрывает проблему, но repr() показывает реальное содержимое строки.Подробнее можно почитать здесь:
https://pythonkoans.substack.com/p/koan-15-the-invisible-ink
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤6🔥2🤣1