GitHub digest #14: и посчитать, и в шахматы сыграть
Выясняем, чем пахнет код, и печатаем реактивные компоненты.


Иллюстрация: Оля Ежак для Skillbox Media
В этом дайджесте, помимо уже привычных утилит для работы в терминале можно найти виртуального шахматного тренера, минималистичный калькулятор и Python-библиотеку для обработку видео.
Скриншоты из терминала
Termshot
Termshot — утилита, с помощью которой можно сделать скриншот терминала. Особенно она полезна для тех, кто работает с операционной системой без пользовательского интерфейса, например на серверной версии. Удобно, что перед созданием скриншота можно отредактировать вывод терминала: удалить лишние строки или скрыть конфиденциальную информацию.
Простой скриншот можно сделать с помощью команды termshot --show-cmd — lolcat -f <(figlet -f big foobar). Выглядеть он будет так:

Проект доступен для Linux и macOS. Установить его можно с помощью пакетного менеджера Homebrew или собрать самому.
Открыть репозиторийКоллекция запахов плохого кода
Bad Code Smells
Bad Code Smells — репозиторий с коллекцией исходников сайта Code Smell Catalog, в котором хранится подборка разных «запахов» кода.
Запахи кода (code smells) — термин, который популяризировали Мартин Фаулер и Кент Бек в книге Refactoring: Improving the Design of Existing Code. Он обозначает признаки потенциальных проблем в коде. Так же как неприятный запах может сигнализировать, например, о том, что еда испортилась, так и «запахи кода» указывают на возможные недостатки или проблемы в программе.
Ниже пример кода «с запашком», который возвращает словарь с кодом статуса и данными, проводя при этом дополнительную проверку статуса при каждом вызове. Это нагружает проект и заставляет компьютер выполнять лишние действия.
def create_foo() -> dict:
response = requests.get('https://api.github.com/events')
if response.status_code != requests.codes.ok:
return {'status_code': response.status_code, 'foo': None}
return {
'status_code': response.status_code,
'foo': Foo(**response.json())
}
foo_response: dict = create_foo()
if foo['status_code'] != requests.codes.ok:
foo: Foo = foo_response['foo']
...
Лучше было бы использовать исключение для сигнализации об ошибке и сразу выбрасывать ошибку, если что-то пошло не так. Это упростит код и сделает его более читаемым.
def create_foo() -> Foo:
response = requests.get('https://api.github.com/events')
if response.status_code != requests.codes.ok:
raise Exception('Что-то пошло не так')
return Foo(**response.json())
foo: Foo = create_foo()
Проект пригодится как начинающим, так и опытным программистам. Новички могут изучить примеры плохого кода и стараться не делать так в своих проектах. Матёрые разработчики часто ссылаются на «запахи кода» во время код-ревью.
Открыть репозиторийУправление музыкой из терминала
Retro
Retro — утилита для воспроизведения музыки с помощью командной строки. Она просто ищет и проигрывает аудиофайлы из разных источников.
Примеры команд Retro:
- retro play «https://www.youtube.com/....» — воспроизводит трек по ссылке.
- retro play queue_music — запускает плейлист.
- retro play ~/Music/ — воспроизводит все файлы в папке по очереди.
- retro play ~/Music/Despacito.mp3 — включает конкретный файл.

Изображение: Malwarize / GitHub
Библиотека для работы с SVG
SVG.js
SVG.js — JavaScript-библиотека для работы с векторными изображениями в формате SVG. С её помощью можно анимировать картинки, менять их размер, цвета и другие свойства.
Главный плюс библиотеке в небольшом размере, а это значит, что её можно использовать в проектах и не нагружать систему. Кроме того, она работает быстрее конкурентов, например Snap.svg.
Открыть репозиторийБесплатный учитель шахмат
Chessli2
Chessli2 — бесплатное приложение для обучения игре в шахматы. Инструмент анализирует партии, выявляет ошибки и подсказывает, как можно улучшить свои навыки. В основе проекта лежат материалы Lichess — популярного сайта для шахматистов. Также приложение может получать данные сыгранных матчей на Lichess и анализировать их.
Приложение можно запустить локально по инструкции в репозитории. Для интеграции с Lichess понадобится токен API.
Открыть репозиторийUI для лендингов
Page UI
Page UI — коллекция бесплатных шаблонов и компонентов для разработки красивых лендингов с помощью React и Next.js. С её помощью можно быстро реализовывать популярные интерфейсы. Page UI совместима с Tailwind CSS, что упрощает кастомизацию шаблонов и тем.

Скриншот: Shipixen / Page UI
Распечатываем React
ReactToPrint
ReactToPrint — утилита, с помощью которой можно легко распечатать содержимое компонента React. Например, инструмент пригодится, если вы хотите добавить на свой сайт возможность распечатать статью или сохранить её в формате PDF.

У проекта есть демо, в котором можно попробовать разные варианты печати компонентов.
Открыть репозиторийУниверсальный перетаскиватель
Swapy
Swapy — JavaScript-библиотека, с помощью которой любой элемент веб-приложения можно сделать перетаскиваемым. При этом рядом стоящие элементы изменят свой размер или рассортируются так, чтобы вместе вписываться в заданную сетку.

Скриншот: Swapy / Skillbox Media
Библиотеку можно использовать со всеми популярными фреймворками для фронтенда. Swapy доступен в пакетном менеджере PNPM.
Открыть репозиторийРисуем графики
Recharts
Recharts — React-библиотека, с помощью которой можно создавать графики и диаграммы на основе компонентов React. Готовые рисунки можно экспортировать в формате SVG, поэтому библиотека подходит как просто для визуализации данных, так и для разработки сервиса генерации графиков.

Калькулятор
Numara
Numara — минималистичный калькулятор, который моментально считает выражения и выдаёт результат по мере ввода. Приложение построено на библиотеке Math.js и фреймворке Electron.

Помимо обычных функций калькулятора, Numara поддерживает переменные. Это значит, что можно посчитать промежуточный результат, сохранить его и после использовать для других подсчётов. Также приложение строит графики функций, конвертирует валюты и считает выражения с датами, например, «сегодня + 3 недели».
Numara доступен для Windows, macOS и Linux. Есть веб-версия, которую можно открыть даже в мобильном браузере.
Открыть репозиторийУмный навигатор по папкам
Zoxide
Zoxide — команда cd на стероидах. Она не просто помогает перемещаться по директориям компьютера, а запоминает, какие папки вы используете чаще всего. К ним можно переходить с помощью горячих клавиш, а не долгого ввода пути к папке. Утилита работает во всех популярных оболочках терминала.
Открыть репозиторийКонвертер в Markdown и JSON
Docling
Docling — мощный конвертер, который получает на вход документы в форматах PDF, DOCX, PPTX, XLSX, HTML и AsciiDoc, а на выходе генерирует файл в формате Markdown или JSON. При этом утилита быстро обрабатывает даже огромные коллекции документов.
Готовые файлы в JSON и Markdown нужны для нейросетей. Всё дело в том, что они не очень хорошо понимают привычные для человека форматы, поэтому документы надо чётко структурировать. Разработчики интегрировали LlamaIndex и LangChain, чтобы полученные файлы сразу отправлялись к языковой модели.
Открыть репозиторийРедактор видео
MoviePy
MoviePy — Python-библиотека для редактирования видеофайлов. С её помощью можно нарезать видео на фрагменты, склеивать их, добавлять титры, музыку и эффекты. Главное преимущество MoviePy в том, что каждый пиксель видео доступен для редактирования с помощью кода. Это значит, что можно реализовывать практически любые анимации и переходы.
Если вы не занимаетесь монтажом, но хорошо пишете код на Python, то можете стать участником проекта. Сейчас команда MoviePy ищет разработчиков.
Открыть репозиторийКонсольный файловый менеджер
Yazi
Yazi — файловый менеджер для терминала, написанный на Rust. Все операции ввода и вывода в нём выполняются асинхронно, а задачи распределяются на несколько потоков. Всё это делает Yazi невероятно быстрым.
Также в файловом менеджере есть продвинутый поиск, предпросмотр файлов, можно выбрать сразу несколько файлов и отображение папок в отдельных вкладках. Yazi доступен для Windows, Linux и macOS.
Открыть репозиторийБольше интересного про код — в нашем телеграм-канале. Подписывайтесь!